[{"data":1,"prerenderedAt":173092},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch17-web-fu-wu-qi-yu-wang-zhan-fa-bu":3,"wiki-doc-nav":140},{"id":4,"title":5,"body":6,"description":132,"extension":133,"meta":134,"navigation":135,"path":136,"seo":137,"stem":138,"__hash__":139},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":8,"toc":124},"minimark",[9,13,18,22,27,37,48,53,58,67,88,91,94,97,100,103,106,109,112,115,118,121],[10,11,5],"h1",{"id":12},"_17-web服务器与网站发布",[14,15,17],"h2",{"id":16},"_171-web服务器","17.1 Web服务器",[19,20,21],"p",{},"把自己网站上传到服务器上，可以让其他人访问",[23,24],"img",{"style":25,"src":26},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,28,29,33,34],{},[30,31,32],"strong",{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[30,35,36],{},"Web 服务器等",[19,38,39,40,43,44,47],{},"根据服务器在网络中所在的位置不同，又可分为 ",[30,41,42],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）"," 和 ",[30,45,46],{},"远程服务器"," 。",[49,50,52],"h3",{"id":51},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,54,55],{},[30,56,57],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,59,60,61],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[62,63,64],"a",{"href":64,"rel":65},"http:\u002F\u002Ffree.3v.do\u002F",[66],"nofollow",[68,69,70,74,77,85],"ul",{},[71,72,73],"li",{},"去免费空间网站注册账号。",[71,75,76],{},"记录下主机名、用户名、密码、域名。",[71,78,79,80,84],{},"利用 ",[81,82,83],"code",{},"utftp"," 软件 上传网站到远程服务器",[71,86,87],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,89,90],{},"使用软件上传，对上传软件文件进行解压",[23,92],{"style":25,"src":93},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[23,95],{"style":25,"src":96},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,98,99],{},"输入刚刚申请的服务器账号信息：",[23,101],{"style":25,"src":102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[23,104],{"style":25,"src":105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[23,107],{"style":25,"src":108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[23,110],{"style":25,"src":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,113,114],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[23,116],{"style":25,"src":117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,119,120],{},"浏览器输入域名即可访问",[19,122,123],{},"首页一定必须是index",{"title":125,"searchDepth":126,"depth":126,"links":127},"",2,[128],{"id":16,"depth":126,"text":17,"children":129},[130],{"id":51,"depth":131,"text":52},3,null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":5,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",[141,5249,6357,7777,10766,12117,13606,14695,23458,23470,24068,24094,24218,24459,24524,24542,24555,24602,24726,24895,25094,25274,25479,25615,25710,25747,25760,26069,26810,27518,27539,28559,30190,30341,30354,30366,30667,50479,50494,50511,50544,53416,76764,92909,92930,93043,93164,93934,94597,94958,94996,95102,95202,95245,95271,95332,96986,97087,97112,97603,98103,99183,99466,100208,100710,100722,102737,104401,105904,107602,109519,111438,113460,116930,117362,117825,118574,121518,121866,121888,122244,125551,125563,125966,125989,126136,126303,126507,126808,127365,128022,129953,131551,132200,133694,135125,136360,138054,139806,142216,142293,143228,143439,144324,145559,145787,145800,146955,149367,151735,155056,157533,159177,160954,162967,166019,168199,170726,172920],{"id":142,"title":143,"body":144,"description":125,"extension":133,"meta":5244,"navigation":135,"path":5245,"seo":5246,"stem":5247,"__hash__":5248},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":145,"toc":5216},[146,149,153,156,160,172,176,180,183,186,189,192,195,229,233,236,239,242,245,298,302,321,323,337,340,348,351,1212,1219,1235,1239,1329,1333,1339,1428,1432,1470,1474,1538,1542,1546,1552,1563,1567,1572,1576,1581,1585,1590,1594,1598,1603,1873,1878,2016,2021,2278,2281,2289,2293,2298,2401,2404,2710,2719,2820,2823,2826,2829,2832,3092,3097,3237,3240,3419,3422,3550,3553,3705,3709,3714,3717,3728,3736,3739,3846,3850,3854,3859,3909,3914,3919,3943,3948,4001,4004,4009,4186,4191,4476,4481,4878,4882,4887,4944,4949,4957,4960,5100,5103,5212],[10,147,143],{"id":148},"_1基础入门",[14,150,152],{"id":151},"_11注释","1.1注释",[19,154,155],{},"\u002F\u002F或者\u002F* *\u002F",[14,157,159],{"id":158},"_12命名","1.2命名",[161,162,163,166,169],"ol",{},[71,164,165],{},"字母数字下划线",[71,167,168],{},"开头必须是字母或_",[71,170,171],{},"不能使用关键词",[14,173,175],{"id":174},"_13数据类型","1.3数据类型",[49,177,179],{"id":178},"_131整形","1.3.1整形",[19,181,182],{},"short 短整形 2",[19,184,185],{},"int 整形 4",[19,187,188],{},"long 长整形 win4 linux32位4 linux64位8",[19,190,191],{},"long long 长长整形 8",[19,193,194],{},"利用sizeof可以求数据类型占用的内存空间大小",[196,197,201],"pre",{"className":198,"code":199,"language":200,"meta":125,"style":125},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[81,202,203,222],{"__ignoreMap":125},[204,205,208,212,216,219],"span",{"class":206,"line":207},"line",1,[204,209,211],{"class":210},"szBVR","sizeof",[204,213,215],{"class":214},"sVt8B","(",[204,217,218],{"class":210},"int",[204,220,221],{"class":214},")\n",[204,223,224,226],{"class":206,"line":126},[204,225,211],{"class":210},[204,227,228],{"class":214},"(num)\n",[49,230,232],{"id":231},"_132浮点型","1.3.2浮点型",[19,234,235],{},"float 单精度 4节 7位有效数字",[19,237,238],{},"double 双精度 8节 15-16有效数字",[19,240,241],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,243,244],{},"注意点：",[196,246,248],{"className":198,"code":247,"language":200,"meta":125,"style":125},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[81,249,250,275],{"__ignoreMap":125},[204,251,252,255,258,261,265,268,271],{"class":206,"line":207},[204,253,254],{"class":210},"float",[204,256,257],{"class":214}," f1",[204,259,260],{"class":210},"=",[204,262,264],{"class":263},"sj4cs","3.14",[204,266,267],{"class":210},"f",[204,269,270],{"class":214},";",[204,272,274],{"class":273},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[204,276,277,279,282,284,287,290,293,295],{"class":206,"line":126},[204,278,254],{"class":210},[204,280,281],{"class":214}," f2",[204,283,260],{"class":210},[204,285,286],{"class":263},"3",[204,288,289],{"class":210},"e",[204,291,292],{"class":263},"2",[204,294,270],{"class":214},[204,296,297],{"class":273}," \u002F\u002F科学记数法\n",[49,299,301],{"id":300},"_133字符型","1.3.3字符型",[196,303,305],{"className":198,"code":304,"language":200,"meta":125,"style":125},"char ch='a'\n",[81,306,307],{"__ignoreMap":125},[204,308,309,312,315,317],{"class":206,"line":207},[204,310,311],{"class":210},"char",[204,313,314],{"class":214}," ch",[204,316,260],{"class":210},[204,318,320],{"class":319},"sZZnC","'a'\n",[19,322,244],{},[161,324,325,328,331,334],{},[71,326,327],{},"在显示字符型变量时，只能单引号，双引号x",[71,329,330],{},"单引号内只能一个字符，不能字符串",[71,332,333],{},"c和c++字符型变量只占用一个字符",[71,335,336],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,338,339],{},"ASCII码大致由以下两部分组成：",[161,341,342,345],{},[71,343,344],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[71,346,347],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,349,350],{},"ASCII码表格：",[352,353,354,397],"table",{},[355,356,357],"thead",{},[358,359,360,367,372,376,381,385,389,393],"tr",{},[361,362,363,366],"th",{},[30,364,365],{},"ASCII","值",[361,368,369],{},[30,370,371],{},"控制字符",[361,373,374,366],{},[30,375,365],{},[361,377,378],{},[30,379,380],{},"字符",[361,382,383,366],{},[30,384,365],{},[361,386,387],{},[30,388,380],{},[361,390,391,366],{},[30,392,365],{},[361,394,395],{},[30,396,380],{},[398,399,400,427,452,477,502,528,553,578,604,629,655,681,707,732,758,784,810,834,859,884,909,934,959,984,1009,1034,1059,1085,1110,1135,1160,1186],"tbody",{},[358,401,402,406,409,412,415,418,421,424],{},[403,404,405],"td",{},"0",[403,407,408],{},"NUT",[403,410,411],{},"32",[403,413,414],{},"(space)",[403,416,417],{},"64",[403,419,420],{},"@",[403,422,423],{},"96",[403,425,426],{},"、",[358,428,429,432,435,438,441,444,447,450],{},[403,430,431],{},"1",[403,433,434],{},"SOH",[403,436,437],{},"33",[403,439,440],{},"!",[403,442,443],{},"65",[403,445,446],{},"A",[403,448,449],{},"97",[403,451,62],{},[358,453,454,456,459,462,465,468,471,474],{},[403,455,292],{},[403,457,458],{},"STX",[403,460,461],{},"34",[403,463,464],{},"\"",[403,466,467],{},"66",[403,469,470],{},"B",[403,472,473],{},"98",[403,475,476],{},"b",[358,478,479,481,484,487,490,493,496,499],{},[403,480,286],{},[403,482,483],{},"ETX",[403,485,486],{},"35",[403,488,489],{},"#",[403,491,492],{},"67",[403,494,495],{},"C",[403,497,498],{},"99",[403,500,501],{},"c",[358,503,504,507,510,513,516,519,522,525],{},[403,505,506],{},"4",[403,508,509],{},"EOT",[403,511,512],{},"36",[403,514,515],{},"$",[403,517,518],{},"68",[403,520,521],{},"D",[403,523,524],{},"100",[403,526,527],{},"d",[358,529,530,533,536,539,542,545,548,551],{},[403,531,532],{},"5",[403,534,535],{},"ENQ",[403,537,538],{},"37",[403,540,541],{},"%",[403,543,544],{},"69",[403,546,547],{},"E",[403,549,550],{},"101",[403,552,289],{},[358,554,555,558,561,564,567,570,573,576],{},[403,556,557],{},"6",[403,559,560],{},"ACK",[403,562,563],{},"38",[403,565,566],{},"&",[403,568,569],{},"70",[403,571,572],{},"F",[403,574,575],{},"102",[403,577,267],{},[358,579,580,583,586,589,592,595,598,601],{},[403,581,582],{},"7",[403,584,585],{},"BEL",[403,587,588],{},"39",[403,590,591],{},",",[403,593,594],{},"71",[403,596,597],{},"G",[403,599,600],{},"103",[403,602,603],{},"g",[358,605,606,609,612,615,617,620,623,626],{},[403,607,608],{},"8",[403,610,611],{},"BS",[403,613,614],{},"40",[403,616,215],{},[403,618,619],{},"72",[403,621,622],{},"H",[403,624,625],{},"104",[403,627,628],{},"h",[358,630,631,634,637,640,643,646,649,652],{},[403,632,633],{},"9",[403,635,636],{},"HT",[403,638,639],{},"41",[403,641,642],{},")",[403,644,645],{},"73",[403,647,648],{},"I",[403,650,651],{},"105",[403,653,654],{},"i",[358,656,657,660,663,666,669,672,675,678],{},[403,658,659],{},"10",[403,661,662],{},"LF",[403,664,665],{},"42",[403,667,668],{},"*",[403,670,671],{},"74",[403,673,674],{},"J",[403,676,677],{},"106",[403,679,680],{},"j",[358,682,683,686,689,692,695,698,701,704],{},[403,684,685],{},"11",[403,687,688],{},"VT",[403,690,691],{},"43",[403,693,694],{},"+",[403,696,697],{},"75",[403,699,700],{},"K",[403,702,703],{},"107",[403,705,706],{},"k",[358,708,709,712,715,718,720,723,726,729],{},[403,710,711],{},"12",[403,713,714],{},"FF",[403,716,717],{},"44",[403,719,591],{},[403,721,722],{},"76",[403,724,725],{},"L",[403,727,728],{},"108",[403,730,731],{},"l",[358,733,734,737,740,743,746,749,752,755],{},[403,735,736],{},"13",[403,738,739],{},"CR",[403,741,742],{},"45",[403,744,745],{},"-",[403,747,748],{},"77",[403,750,751],{},"M",[403,753,754],{},"109",[403,756,757],{},"m",[358,759,760,763,766,769,772,775,778,781],{},[403,761,762],{},"14",[403,764,765],{},"SO",[403,767,768],{},"46",[403,770,771],{},".",[403,773,774],{},"78",[403,776,777],{},"N",[403,779,780],{},"110",[403,782,783],{},"n",[358,785,786,789,792,795,798,801,804,807],{},[403,787,788],{},"15",[403,790,791],{},"SI",[403,793,794],{},"47",[403,796,797],{},"\u002F",[403,799,800],{},"79",[403,802,803],{},"O",[403,805,806],{},"111",[403,808,809],{},"o",[358,811,812,815,818,821,823,826,829,832],{},[403,813,814],{},"16",[403,816,817],{},"DLE",[403,819,820],{},"48",[403,822,405],{},[403,824,825],{},"80",[403,827,828],{},"P",[403,830,831],{},"112",[403,833,19],{},[358,835,836,839,842,845,847,850,853,856],{},[403,837,838],{},"17",[403,840,841],{},"DCI",[403,843,844],{},"49",[403,846,431],{},[403,848,849],{},"81",[403,851,852],{},"Q",[403,854,855],{},"113",[403,857,858],{},"q",[358,860,861,864,867,870,872,875,878,881],{},[403,862,863],{},"18",[403,865,866],{},"DC2",[403,868,869],{},"50",[403,871,292],{},[403,873,874],{},"82",[403,876,877],{},"R",[403,879,880],{},"114",[403,882,883],{},"r",[358,885,886,889,892,895,897,900,903,906],{},[403,887,888],{},"19",[403,890,891],{},"DC3",[403,893,894],{},"51",[403,896,286],{},[403,898,899],{},"83",[403,901,902],{},"S",[403,904,905],{},"115",[403,907,908],{},"s",[358,910,911,914,917,920,922,925,928,931],{},[403,912,913],{},"20",[403,915,916],{},"DC4",[403,918,919],{},"52",[403,921,506],{},[403,923,924],{},"84",[403,926,927],{},"T",[403,929,930],{},"116",[403,932,933],{},"t",[358,935,936,939,942,945,947,950,953,956],{},[403,937,938],{},"21",[403,940,941],{},"NAK",[403,943,944],{},"53",[403,946,532],{},[403,948,949],{},"85",[403,951,952],{},"U",[403,954,955],{},"117",[403,957,958],{},"u",[358,960,961,964,967,970,972,975,978,981],{},[403,962,963],{},"22",[403,965,966],{},"SYN",[403,968,969],{},"54",[403,971,557],{},[403,973,974],{},"86",[403,976,977],{},"V",[403,979,980],{},"118",[403,982,983],{},"v",[358,985,986,989,992,995,997,1000,1003,1006],{},[403,987,988],{},"23",[403,990,991],{},"TB",[403,993,994],{},"55",[403,996,582],{},[403,998,999],{},"87",[403,1001,1002],{},"W",[403,1004,1005],{},"119",[403,1007,1008],{},"w",[358,1010,1011,1014,1017,1020,1022,1025,1028,1031],{},[403,1012,1013],{},"24",[403,1015,1016],{},"CAN",[403,1018,1019],{},"56",[403,1021,608],{},[403,1023,1024],{},"88",[403,1026,1027],{},"X",[403,1029,1030],{},"120",[403,1032,1033],{},"x",[358,1035,1036,1039,1042,1045,1047,1050,1053,1056],{},[403,1037,1038],{},"25",[403,1040,1041],{},"EM",[403,1043,1044],{},"57",[403,1046,633],{},[403,1048,1049],{},"89",[403,1051,1052],{},"Y",[403,1054,1055],{},"121",[403,1057,1058],{},"y",[358,1060,1061,1064,1067,1070,1073,1076,1079,1082],{},[403,1062,1063],{},"26",[403,1065,1066],{},"SUB",[403,1068,1069],{},"58",[403,1071,1072],{},":",[403,1074,1075],{},"90",[403,1077,1078],{},"Z",[403,1080,1081],{},"122",[403,1083,1084],{},"z",[358,1086,1087,1090,1093,1096,1098,1101,1104,1107],{},[403,1088,1089],{},"27",[403,1091,1092],{},"ESC",[403,1094,1095],{},"59",[403,1097,270],{},[403,1099,1100],{},"91",[403,1102,1103],{},"[",[403,1105,1106],{},"123",[403,1108,1109],{},"{",[358,1111,1112,1115,1118,1121,1124,1127,1129,1132],{},[403,1113,1114],{},"28",[403,1116,1117],{},"FS",[403,1119,1120],{},"60",[403,1122,1123],{},"\u003C",[403,1125,1126],{},"92",[403,1128,797],{},[403,1130,1131],{},"124",[403,1133,1134],{},"|",[358,1136,1137,1140,1143,1146,1148,1151,1154,1157],{},[403,1138,1139],{},"29",[403,1141,1142],{},"GS",[403,1144,1145],{},"61",[403,1147,260],{},[403,1149,1150],{},"93",[403,1152,1153],{},"]",[403,1155,1156],{},"125",[403,1158,1159],{},"}",[358,1161,1162,1165,1168,1171,1174,1177,1180,1183],{},[403,1163,1164],{},"30",[403,1166,1167],{},"RS",[403,1169,1170],{},"62",[403,1172,1173],{},">",[403,1175,1176],{},"94",[403,1178,1179],{},"^",[403,1181,1182],{},"126",[403,1184,1185],{},"`",[358,1187,1188,1191,1194,1197,1200,1203,1206,1209],{},[403,1189,1190],{},"31",[403,1192,1193],{},"US",[403,1195,1196],{},"63",[403,1198,1199],{},"?",[403,1201,1202],{},"95",[403,1204,1205],{},"_",[403,1207,1208],{},"127",[403,1210,1211],{},"DEL",[19,1213,1214,1215,1218],{},"ASCII 码大致由以下",[30,1216,1217],{},"两部分组","成：",[68,1220,1221,1228],{},[71,1222,1223,1224,1227],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[30,1225,1226],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[71,1229,1230,1231,1234],{},"ASCII 打印字符：数字 ",[30,1232,1233],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[49,1236,1238],{"id":1237},"_134转义字符","1.3.4转义字符",[196,1240,1242],{"className":198,"code":1241,"language":200,"meta":125,"style":125},"\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",[81,1243,1244,1249,1265,1279,1285,1299,1305],{"__ignoreMap":125},[204,1245,1246],{"class":206,"line":207},[204,1247,1248],{"class":273},"\u002F\u002F换行符\n",[204,1250,1251,1254,1257,1260,1262],{"class":206,"line":126},[204,1252,1253],{"class":214},"cout ",[204,1255,1256],{"class":210},"\u003C\u003C",[204,1258,1259],{"class":319},"\"hello world\u002Fn\"",[204,1261,270],{"class":214},[204,1263,1264],{"class":273}," \u002F\u002F就等同于如下：\n",[204,1266,1267,1269,1271,1274,1276],{"class":206,"line":131},[204,1268,1253],{"class":214},[204,1270,1256],{"class":210},[204,1272,1273],{"class":319},"\"hello world\"",[204,1275,1256],{"class":210},[204,1277,1278],{"class":214},"endl;\n",[204,1280,1282],{"class":206,"line":1281},4,[204,1283,1284],{"class":273},"\u002F\u002F反斜杠\n",[204,1286,1288,1290,1292,1295,1297],{"class":206,"line":1287},5,[204,1289,1253],{"class":214},[204,1291,1256],{"class":210},[204,1293,1294],{"class":319},"\"\u002F\u002F\"",[204,1296,1256],{"class":210},[204,1298,1278],{"class":214},[204,1300,1302],{"class":206,"line":1301},6,[204,1303,1304],{"class":273},"\u002F\u002F水平制表符\n",[204,1306,1308,1310,1312,1315,1318,1321,1323,1326],{"class":206,"line":1307},7,[204,1309,1253],{"class":214},[204,1311,1256],{"class":210},[204,1313,1314],{"class":319},"\"aaaa",[204,1316,1317],{"class":263},"\\t",[204,1319,1320],{"class":319},"helloworld\"",[204,1322,1256],{"class":210},[204,1324,1325],{"class":214},"endl;",[204,1327,1328],{"class":273}," \u002F\u002F输出窗口时有对齐效果\n",[49,1330,1332],{"id":1331},"_135字符串型","1.3.5字符串型",[19,1334,1335,1336,1338],{},"char 变量名",[204,1337],{},"=\"字符串值\"",[196,1340,1342],{"className":198,"code":1341,"language":200,"meta":125,"style":125},"\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",[81,1343,1344,1349,1354,1359,1364,1378,1391,1396,1402,1414],{"__ignoreMap":125},[204,1345,1346],{"class":206,"line":207},[204,1347,1348],{"class":273},"\u002F\u002Fc风格字符串\n",[204,1350,1351],{"class":206,"line":126},[204,1352,1353],{"class":273},"\u002F\u002F注意事项：\n",[204,1355,1356],{"class":206,"line":131},[204,1357,1358],{"class":273},"\u002F\u002F1.char字符串名[]\n",[204,1360,1361],{"class":206,"line":1281},[204,1362,1363],{"class":273},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[204,1365,1366,1368,1371,1373,1375],{"class":206,"line":1287},[204,1367,311],{"class":210},[204,1369,1370],{"class":214}," str[]",[204,1372,260],{"class":210},[204,1374,1273],{"class":319},[204,1376,1377],{"class":214},";\n",[204,1379,1380,1382,1384,1387,1389],{"class":206,"line":1301},[204,1381,1253],{"class":214},[204,1383,1256],{"class":210},[204,1385,1386],{"class":214},"str",[204,1388,1256],{"class":210},[204,1390,1278],{"class":214},[204,1392,1393],{"class":206,"line":1307},[204,1394,1395],{"class":273},"\u002F\u002Fc++风格字符串\n",[204,1397,1399],{"class":206,"line":1398},8,[204,1400,1401],{"class":273},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[204,1403,1405,1408,1410,1412],{"class":206,"line":1404},9,[204,1406,1407],{"class":214},"string str2",[204,1409,260],{"class":210},[204,1411,1273],{"class":319},[204,1413,1377],{"class":214},[204,1415,1417,1419,1421,1424,1426],{"class":206,"line":1416},10,[204,1418,1253],{"class":214},[204,1420,1256],{"class":210},[204,1422,1423],{"class":214},"str2",[204,1425,1256],{"class":210},[204,1427,1278],{"class":214},[49,1429,1431],{"id":1430},"_136布尔类型bool","1.3.6布尔类型bool",[196,1433,1435],{"className":198,"code":1434,"language":200,"meta":125,"style":125},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[81,1436,1437,1452],{"__ignoreMap":125},[204,1438,1439,1442,1445,1447,1450],{"class":206,"line":207},[204,1440,1441],{"class":210},"bool",[204,1443,1444],{"class":214}," flag",[204,1446,260],{"class":210},[204,1448,1449],{"class":263},"true",[204,1451,1377],{"class":214},[204,1453,1454,1457,1460,1463,1465,1467],{"class":206,"line":126},[204,1455,1456],{"class":214},"cout",[204,1458,1459],{"class":210},"\u003C\u003Csizeof",[204,1461,1462],{"class":214},"(flag)",[204,1464,1256],{"class":210},[204,1466,1325],{"class":214},[204,1468,1469],{"class":273}," \u002F\u002F查看布尔占内存空间\n",[14,1471,1473],{"id":1472},"_14键盘输入cin","1.4键盘输入cin",[196,1475,1477],{"className":198,"code":1476,"language":200,"meta":125,"style":125},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[81,1478,1479,1492,1509,1520],{"__ignoreMap":125},[204,1480,1481,1483,1486,1488,1490],{"class":206,"line":207},[204,1482,218],{"class":210},[204,1484,1485],{"class":214}," a",[204,1487,260],{"class":210},[204,1489,405],{"class":263},[204,1491,1377],{"class":214},[204,1493,1494,1496,1498,1501,1503,1505,1507],{"class":206,"line":126},[204,1495,1456],{"class":214},[204,1497,1256],{"class":210},[204,1499,1500],{"class":319},"\"请给整型变量a赋值\"",[204,1502,1256],{"class":210},[204,1504,62],{"class":214},[204,1506,1256],{"class":210},[204,1508,1278],{"class":214},[204,1510,1511,1514,1517],{"class":206,"line":131},[204,1512,1513],{"class":214},"cin ",[204,1515,1516],{"class":210},">>",[204,1518,1519],{"class":214}," a;\n",[204,1521,1522,1524,1526,1529,1532,1534,1536],{"class":206,"line":1281},[204,1523,1253],{"class":214},[204,1525,1256],{"class":210},[204,1527,1528],{"class":319}," \"整型变量a=\"",[204,1530,1531],{"class":210}," \u003C\u003C",[204,1533,62],{"class":214},[204,1535,1256],{"class":210},[204,1537,1278],{"class":214},[14,1539,1541],{"id":1540},"_15运算符","1.5运算符",[49,1543,1545],{"id":1544},"_151算术运算符","1.5.1算术运算符",[19,1547,1548,1551],{},[23,1549],{"alt":125,"src":1550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[161,1553,1554,1557,1560],{},[71,1555,1556],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[71,1558,1559],{},"两个小数不可以做取模运算",[71,1561,1562],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[49,1564,1566],{"id":1565},"_152赋值运算符","1.5.2赋值运算符",[19,1568,1569],{},[23,1570],{"alt":125,"src":1571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[49,1573,1575],{"id":1574},"_153比较运算符","1.5.3比较运算符",[19,1577,1578],{},[23,1579],{"alt":125,"src":1580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[49,1582,1584],{"id":1583},"_154逻辑运算符","1.5.4逻辑运算符",[19,1586,1587],{},[23,1588],{"alt":125,"src":1589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1591,1593],{"id":1592},"_16程序流程结构","1.6程序流程结构",[49,1595,1597],{"id":1596},"_161选择结构","1.6.1选择结构",[161,1599,1600],{},[71,1601,1602],{},"if语句\n单行、多行、多条件if语句",[196,1604,1606],{"className":198,"code":1605,"language":200,"meta":125,"style":125},"\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",[81,1607,1608,1613,1628,1633,1647,1652,1657,1666,1679,1683,1696,1701,1707,1712,1726,1731,1737,1758,1763,1777,1782,1811,1816,1833,1838,1843,1848,1862,1867],{"__ignoreMap":125},[204,1609,1610],{"class":206,"line":207},[204,1611,1612],{"class":273},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[204,1614,1615,1618,1621,1623,1626],{"class":206,"line":126},[204,1616,1617],{"class":210},"if",[204,1619,1620],{"class":214},"(score",[204,1622,1173],{"class":210},[204,1624,1625],{"class":263},"600",[204,1627,221],{"class":214},[204,1629,1630],{"class":206,"line":131},[204,1631,1632],{"class":214},"{\n",[204,1634,1635,1638,1640,1643,1645],{"class":206,"line":1281},[204,1636,1637],{"class":214},"    cout",[204,1639,1256],{"class":210},[204,1641,1642],{"class":319},"'这是单行if语句'",[204,1644,1256],{"class":210},[204,1646,1278],{"class":214},[204,1648,1649],{"class":206,"line":1287},[204,1650,1651],{"class":214},"}\n",[204,1653,1654],{"class":206,"line":1301},[204,1655,1656],{"class":273},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[204,1658,1659,1661,1663],{"class":206,"line":1307},[204,1660,1513],{"class":214},[204,1662,1516],{"class":210},[204,1664,1665],{"class":214}," score\n",[204,1667,1668,1670,1672,1675,1677],{"class":206,"line":1398},[204,1669,1617],{"class":210},[204,1671,1620],{"class":214},[204,1673,1674],{"class":210},"\u003C=",[204,1676,1625],{"class":263},[204,1678,221],{"class":214},[204,1680,1681],{"class":206,"line":1404},[204,1682,1632],{"class":214},[204,1684,1685,1687,1689,1692,1694],{"class":206,"line":1416},[204,1686,1637],{"class":214},[204,1688,1516],{"class":210},[204,1690,1691],{"class":319},"\"小于等于600\"",[204,1693,1256],{"class":210},[204,1695,1278],{"class":214},[204,1697,1699],{"class":206,"line":1698},11,[204,1700,1651],{"class":214},[204,1702,1704],{"class":206,"line":1703},12,[204,1705,1706],{"class":210},"else\n",[204,1708,1710],{"class":206,"line":1709},13,[204,1711,1632],{"class":214},[204,1713,1715,1717,1719,1722,1724],{"class":206,"line":1714},14,[204,1716,1637],{"class":214},[204,1718,1516],{"class":210},[204,1720,1721],{"class":319},"\"大于600\"",[204,1723,1516],{"class":210},[204,1725,1278],{"class":214},[204,1727,1729],{"class":206,"line":1728},15,[204,1730,1651],{"class":214},[204,1732,1734],{"class":206,"line":1733},16,[204,1735,1736],{"class":273},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[204,1738,1740,1742,1745,1747,1749,1752,1754,1756],{"class":206,"line":1739},17,[204,1741,1617],{"class":210},[204,1743,1744],{"class":214}," (",[204,1746,405],{"class":263},[204,1748,1123],{"class":210},[204,1750,1751],{"class":214},"num",[204,1753,1123],{"class":210},[204,1755,524],{"class":263},[204,1757,221],{"class":214},[204,1759,1761],{"class":206,"line":1760},18,[204,1762,1632],{"class":214},[204,1764,1766,1768,1770,1773,1775],{"class":206,"line":1765},19,[204,1767,1637],{"class":214},[204,1769,1256],{"class":210},[204,1771,1772],{"class":319},"\"小于100\"",[204,1774,1256],{"class":210},[204,1776,1278],{"class":214},[204,1778,1780],{"class":206,"line":1779},20,[204,1781,1651],{"class":214},[204,1783,1785,1788,1791,1794,1797,1799,1802,1804,1806,1809],{"class":206,"line":1784},21,[204,1786,1787],{"class":210},"else",[204,1789,1790],{"class":210}," if",[204,1792,1793],{"class":214}," (nmu",[204,1795,1796],{"class":210},">=",[204,1798,524],{"class":263},[204,1800,1801],{"class":210},"&&",[204,1803,1751],{"class":214},[204,1805,1123],{"class":210},[204,1807,1808],{"class":263},"200",[204,1810,221],{"class":214},[204,1812,1814],{"class":206,"line":1813},22,[204,1815,1632],{"class":214},[204,1817,1819,1821,1823,1826,1828,1830],{"class":206,"line":1818},23,[204,1820,1637],{"class":214},[204,1822,1256],{"class":210},[204,1824,1825],{"class":319},"\"不小于100且小于200\"",[204,1827,1256],{"class":210},[204,1829,1325],{"class":214},[204,1831,1832],{"class":273}," \u002F\u002F可以无限else if,python中是elif：\n",[204,1834,1836],{"class":206,"line":1835},24,[204,1837,1651],{"class":214},[204,1839,1841],{"class":206,"line":1840},25,[204,1842,1706],{"class":210},[204,1844,1846],{"class":206,"line":1845},26,[204,1847,1632],{"class":214},[204,1849,1851,1853,1855,1858,1860],{"class":206,"line":1850},27,[204,1852,1637],{"class":214},[204,1854,1256],{"class":210},[204,1856,1857],{"class":319},"\"不小于200\"",[204,1859,1256],{"class":210},[204,1861,1278],{"class":214},[204,1863,1865],{"class":206,"line":1864},28,[204,1866,1651],{"class":214},[204,1868,1870],{"class":206,"line":1869},29,[204,1871,1872],{"class":273},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[161,1874,1875],{"start":126},[71,1876,1877],{},"三目运算符",[196,1879,1881],{"className":198,"code":1880,"language":200,"meta":125,"style":125},"\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",[81,1882,1883,1888,1893,1919,1941,1958,1963,1986,2001],{"__ignoreMap":125},[204,1884,1885],{"class":206,"line":207},[204,1886,1887],{"class":273},"\u002F\u002F创建三个变量a,b,c\n",[204,1889,1890],{"class":206,"line":126},[204,1891,1892],{"class":273},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[204,1894,1895,1897,1899,1901,1903,1906,1908,1910,1913,1915,1917],{"class":206,"line":131},[204,1896,218],{"class":210},[204,1898,1485],{"class":214},[204,1900,260],{"class":210},[204,1902,913],{"class":263},[204,1904,1905],{"class":214},",b",[204,1907,260],{"class":210},[204,1909,659],{"class":263},[204,1911,1912],{"class":214},",c",[204,1914,260],{"class":210},[204,1916,405],{"class":263},[204,1918,1377],{"class":214},[204,1920,1921,1923,1925,1928,1930,1932,1934,1936,1938],{"class":206,"line":1281},[204,1922,501],{"class":214},[204,1924,260],{"class":210},[204,1926,1927],{"class":214},"(a",[204,1929,1173],{"class":210},[204,1931,476],{"class":214},[204,1933,1199],{"class":210},[204,1935,62],{"class":214},[204,1937,1072],{"class":210},[204,1939,1940],{"class":214},"b)\n",[204,1942,1943,1945,1947,1950,1952,1954,1956],{"class":206,"line":1287},[204,1944,1456],{"class":214},[204,1946,1256],{"class":210},[204,1948,1949],{"class":319},"\"c=\"",[204,1951,1256],{"class":210},[204,1953,501],{"class":214},[204,1955,1256],{"class":210},[204,1957,1278],{"class":214},[204,1959,1960],{"class":206,"line":1301},[204,1961,1962],{"class":273},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[204,1964,1965,1967,1969,1971,1973,1975,1977,1980,1982,1984],{"class":206,"line":1307},[204,1966,1927],{"class":214},[204,1968,1173],{"class":210},[204,1970,476],{"class":214},[204,1972,1199],{"class":210},[204,1974,62],{"class":214},[204,1976,1072],{"class":210},[204,1978,1979],{"class":214},"b)",[204,1981,260],{"class":210},[204,1983,524],{"class":263},[204,1985,1377],{"class":214},[204,1987,1988,1990,1992,1994,1996,1998],{"class":206,"line":1398},[204,1989,1456],{"class":214},[204,1991,1256],{"class":210},[204,1993,62],{"class":214},[204,1995,1256],{"class":210},[204,1997,1325],{"class":214},[204,1999,2000],{"class":273}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[204,2002,2003,2005,2007,2009,2011,2013],{"class":206,"line":1404},[204,2004,1456],{"class":214},[204,2006,1256],{"class":210},[204,2008,476],{"class":214},[204,2010,1256],{"class":210},[204,2012,1325],{"class":214},[204,2014,2015],{"class":273}," \u002F\u002F10   a>b,b还是原值\n",[161,2017,2018],{"start":131},[71,2019,2020],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[196,2022,2024],{"className":198,"code":2023,"language":200,"meta":125,"style":125},"\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",[81,2025,2026,2031,2039,2053,2063,2067,2081,2094,2104,2112,2117,2142,2163,2185,2206,2228,2249,2269,2274],{"__ignoreMap":125},[204,2027,2028],{"class":206,"line":207},[204,2029,2030],{"class":273},"\u002F\u002F案例-电影打分\n",[204,2032,2033,2036],{"class":206,"line":126},[204,2034,2035],{"class":210},"#include",[204,2037,2038],{"class":319},"\u003Ciostream>\n",[204,2040,2041,2044,2047,2051],{"class":206,"line":131},[204,2042,2043],{"class":210},"using",[204,2045,2046],{"class":210}," namespace",[204,2048,2050],{"class":2049},"sScJk"," std",[204,2052,1377],{"class":214},[204,2054,2055,2057,2060],{"class":206,"line":1281},[204,2056,218],{"class":210},[204,2058,2059],{"class":2049}," main",[204,2061,2062],{"class":214},"()\n",[204,2064,2065],{"class":206,"line":1287},[204,2066,1632],{"class":214},[204,2068,2069,2072,2075,2077,2079],{"class":206,"line":1301},[204,2070,2071],{"class":210},"    int",[204,2073,2074],{"class":214}," score",[204,2076,260],{"class":210},[204,2078,405],{"class":263},[204,2080,1377],{"class":214},[204,2082,2083,2085,2087,2090,2092],{"class":206,"line":1307},[204,2084,1637],{"class":214},[204,2086,1256],{"class":210},[204,2088,2089],{"class":319},"\"电影打分：\"",[204,2091,1256],{"class":210},[204,2093,1278],{"class":214},[204,2095,2096,2099,2101],{"class":206,"line":1398},[204,2097,2098],{"class":214},"    cin",[204,2100,1516],{"class":210},[204,2102,2103],{"class":214},"score;\n",[204,2105,2106,2109],{"class":206,"line":1404},[204,2107,2108],{"class":210},"    switch",[204,2110,2111],{"class":214},"(score)\n",[204,2113,2114],{"class":206,"line":1416},[204,2115,2116],{"class":214},"    {\n",[204,2118,2119,2122,2125,2128,2130,2133,2135,2137,2140],{"class":206,"line":1698},[204,2120,2121],{"class":210},"        case",[204,2123,2124],{"class":263}," 10",[204,2126,2127],{"class":214},":cout",[204,2129,1256],{"class":210},[204,2131,2132],{"class":319},"\"经典\"",[204,2134,1256],{"class":210},[204,2136,1325],{"class":214},[204,2138,2139],{"class":210},"break",[204,2141,1377],{"class":214},[204,2143,2144,2146,2149,2151,2153,2155,2157,2159,2161],{"class":206,"line":1703},[204,2145,2121],{"class":210},[204,2147,2148],{"class":263}," 9",[204,2150,2127],{"class":214},[204,2152,1256],{"class":210},[204,2154,2132],{"class":319},[204,2156,1256],{"class":210},[204,2158,1325],{"class":214},[204,2160,2139],{"class":210},[204,2162,1377],{"class":214},[204,2164,2165,2167,2170,2172,2174,2177,2179,2181,2183],{"class":206,"line":1709},[204,2166,2121],{"class":210},[204,2168,2169],{"class":263}," 8",[204,2171,2127],{"class":214},[204,2173,1256],{"class":210},[204,2175,2176],{"class":319},"\"非常好\"",[204,2178,1256],{"class":210},[204,2180,1325],{"class":214},[204,2182,2139],{"class":210},[204,2184,1377],{"class":214},[204,2186,2187,2189,2192,2194,2196,2198,2200,2202,2204],{"class":206,"line":1714},[204,2188,2121],{"class":210},[204,2190,2191],{"class":263}," 7",[204,2193,2127],{"class":214},[204,2195,1256],{"class":210},[204,2197,2176],{"class":319},[204,2199,1256],{"class":210},[204,2201,1325],{"class":214},[204,2203,2139],{"class":210},[204,2205,1377],{"class":214},[204,2207,2208,2210,2213,2215,2217,2220,2222,2224,2226],{"class":206,"line":1728},[204,2209,2121],{"class":210},[204,2211,2212],{"class":263}," 6",[204,2214,2127],{"class":214},[204,2216,1256],{"class":210},[204,2218,2219],{"class":319},"\"一般\"",[204,2221,1256],{"class":210},[204,2223,1325],{"class":214},[204,2225,2139],{"class":210},[204,2227,1377],{"class":214},[204,2229,2230,2232,2235,2237,2239,2241,2243,2245,2247],{"class":206,"line":1733},[204,2231,2121],{"class":210},[204,2233,2234],{"class":263}," 5",[204,2236,2127],{"class":214},[204,2238,1256],{"class":210},[204,2240,2219],{"class":319},[204,2242,1256],{"class":210},[204,2244,1325],{"class":214},[204,2246,2139],{"class":210},[204,2248,1377],{"class":214},[204,2250,2251,2254,2256,2258,2261,2263,2265,2267],{"class":206,"line":1739},[204,2252,2253],{"class":210},"        default",[204,2255,2127],{"class":214},[204,2257,1256],{"class":210},[204,2259,2260],{"class":319},"\"烂片\"",[204,2262,1256],{"class":210},[204,2264,1325],{"class":214},[204,2266,2139],{"class":210},[204,2268,1377],{"class":214},[204,2270,2271],{"class":206,"line":1760},[204,2272,2273],{"class":214},"    }\n",[204,2275,2276],{"class":206,"line":1765},[204,2277,1651],{"class":214},[19,2279,2280],{},"if和switch区别：",[68,2282,2283,2286],{},[71,2284,2285],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[71,2287,2288],{},"switch优点：结构清晰，执行效率高",[49,2290,2292],{"id":2291},"_162循环结构","1.6.2循环结构",[161,2294,2295],{},[71,2296,2297],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[196,2299,2301],{"className":198,"code":2300,"language":200,"meta":125,"style":125},"\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",[81,2302,2303,2308,2316,2320,2333,2347,2351,2371,2381,2385,2397],{"__ignoreMap":125},[204,2304,2305],{"class":206,"line":207},[204,2306,2307],{"class":273},"\u002F\u002F打印0-9数字\n",[204,2309,2310,2312,2314],{"class":206,"line":126},[204,2311,218],{"class":210},[204,2313,2059],{"class":2049},[204,2315,2062],{"class":214},[204,2317,2318],{"class":206,"line":131},[204,2319,1632],{"class":214},[204,2321,2322,2324,2327,2329,2331],{"class":206,"line":1281},[204,2323,2071],{"class":210},[204,2325,2326],{"class":214}," num",[204,2328,260],{"class":210},[204,2330,405],{"class":263},[204,2332,1377],{"class":214},[204,2334,2335,2338,2341,2343,2345],{"class":206,"line":1287},[204,2336,2337],{"class":210},"    while",[204,2339,2340],{"class":214},"(num",[204,2342,1123],{"class":210},[204,2344,659],{"class":263},[204,2346,221],{"class":214},[204,2348,2349],{"class":206,"line":1301},[204,2350,2116],{"class":214},[204,2352,2353,2356,2359,2361,2363,2365,2368],{"class":206,"line":1307},[204,2354,2355],{"class":2049},"       std",[204,2357,2358],{"class":214},"::cout",[204,2360,1256],{"class":210},[204,2362,1751],{"class":214},[204,2364,1256],{"class":210},[204,2366,2367],{"class":2049},"std",[204,2369,2370],{"class":214},"::endl;\n",[204,2372,2373,2376,2379],{"class":206,"line":1398},[204,2374,2375],{"class":214},"        num",[204,2377,2378],{"class":210},"++",[204,2380,1377],{"class":214},[204,2382,2383],{"class":206,"line":1404},[204,2384,2273],{"class":214},[204,2386,2387,2390,2392,2395],{"class":206,"line":1416},[204,2388,2389],{"class":2049},"    system",[204,2391,215],{"class":214},[204,2393,2394],{"class":319},"\"pause\"",[204,2396,221],{"class":214},[204,2398,2399],{"class":206,"line":1698},[204,2400,1651],{"class":214},[19,2402,2403],{},"注意：写好循环条件，避免死循环情况",[196,2405,2407],{"className":198,"code":2406,"language":200,"meta":125,"style":125},"\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",[81,2408,2409,2414,2421,2428,2438,2446,2450,2455,2482,2487,2492,2500,2527,2532,2537,2550,2560,2564,2574,2579,2592,2597,2611,2616,2631,2635,2648,2652,2657,2661,2675,2683,2688,2694,2700,2705],{"__ignoreMap":125},[204,2410,2411],{"class":206,"line":207},[204,2412,2413],{"class":273},"\u002F\u002F循环结构-猜数字\n",[204,2415,2416,2418],{"class":206,"line":126},[204,2417,2035],{"class":210},[204,2419,2420],{"class":319}," \u003Ciostream>\n",[204,2422,2423,2425],{"class":206,"line":131},[204,2424,2035],{"class":210},[204,2426,2427],{"class":319}," \u003Cctime>\n",[204,2429,2430,2432,2434,2436],{"class":206,"line":1281},[204,2431,2043],{"class":210},[204,2433,2046],{"class":210},[204,2435,2050],{"class":2049},[204,2437,1377],{"class":214},[204,2439,2440,2442,2444],{"class":206,"line":1287},[204,2441,218],{"class":210},[204,2443,2059],{"class":2049},[204,2445,2062],{"class":214},[204,2447,2448],{"class":206,"line":1301},[204,2449,1632],{"class":214},[204,2451,2452],{"class":206,"line":1307},[204,2453,2454],{"class":273},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[204,2456,2457,2460,2463,2466,2469,2471,2474,2476,2479],{"class":206,"line":1398},[204,2458,2459],{"class":2049},"    srand",[204,2461,2462],{"class":214},"((",[204,2464,2465],{"class":210},"unsigned",[204,2467,2468],{"class":210}," int",[204,2470,642],{"class":214},[204,2472,2473],{"class":2049},"time",[204,2475,215],{"class":214},[204,2477,2478],{"class":263},"NULL",[204,2480,2481],{"class":214},"));\n",[204,2483,2484],{"class":206,"line":1404},[204,2485,2486],{"emptyLinePlaceholder":135},"\n",[204,2488,2489],{"class":206,"line":1416},[204,2490,2491],{"class":273},"    \u002F\u002F1.系统生成随机数\n",[204,2493,2494,2497],{"class":206,"line":1698},[204,2495,2496],{"class":273},"    \u002F\u002Frand()%100",[204,2498,2499],{"class":273}," \u002F\u002F生成0-99的随机数\n",[204,2501,2502,2504,2506,2508,2511,2514,2516,2518,2520,2522,2524],{"class":206,"line":1703},[204,2503,2071],{"class":210},[204,2505,2326],{"class":214},[204,2507,260],{"class":210},[204,2509,2510],{"class":2049},"rand",[204,2512,2513],{"class":214},"()",[204,2515,541],{"class":210},[204,2517,524],{"class":263},[204,2519,694],{"class":210},[204,2521,431],{"class":263},[204,2523,270],{"class":214},[204,2525,2526],{"class":273}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[204,2528,2529],{"class":206,"line":1709},[204,2530,2531],{"class":273},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[204,2533,2534],{"class":206,"line":1714},[204,2535,2536],{"class":273},"    \u002F\u002F2.玩家猜测\n",[204,2538,2539,2541,2544,2546,2548],{"class":206,"line":1728},[204,2540,2071],{"class":210},[204,2542,2543],{"class":214}," val",[204,2545,260],{"class":210},[204,2547,405],{"class":263},[204,2549,1377],{"class":214},[204,2551,2552,2554,2556,2558],{"class":206,"line":1733},[204,2553,2337],{"class":210},[204,2555,1744],{"class":214},[204,2557,431],{"class":263},[204,2559,221],{"class":214},[204,2561,2562],{"class":206,"line":1739},[204,2563,2116],{"class":214},[204,2565,2566,2569,2571],{"class":206,"line":1760},[204,2567,2568],{"class":214},"        cin",[204,2570,1516],{"class":210},[204,2572,2573],{"class":214},"val;\n",[204,2575,2576],{"class":206,"line":1765},[204,2577,2578],{"class":273},"        \u002F\u002F3.判断玩家猜测\n",[204,2580,2581,2584,2587,2589],{"class":206,"line":1779},[204,2582,2583],{"class":210},"        if",[204,2585,2586],{"class":214},"(val",[204,2588,1123],{"class":210},[204,2590,2591],{"class":214},"num) \n",[204,2593,2594],{"class":206,"line":1784},[204,2595,2596],{"class":214},"        {\n",[204,2598,2599,2602,2604,2607,2609],{"class":206,"line":1813},[204,2600,2601],{"class":214},"            cout",[204,2603,1256],{"class":210},[204,2605,2606],{"class":319},"\"猜小了！\"",[204,2608,1256],{"class":210},[204,2610,1278],{"class":214},[204,2612,2613],{"class":206,"line":1818},[204,2614,2615],{"class":214},"        }\n",[204,2617,2618,2621,2623,2626,2628],{"class":206,"line":1835},[204,2619,2620],{"class":210},"        else",[204,2622,1790],{"class":210},[204,2624,2625],{"class":214}," (val",[204,2627,1173],{"class":210},[204,2629,2630],{"class":214},"num)\n",[204,2632,2633],{"class":206,"line":1840},[204,2634,2596],{"class":214},[204,2636,2637,2639,2641,2644,2646],{"class":206,"line":1845},[204,2638,2601],{"class":214},[204,2640,1256],{"class":210},[204,2642,2643],{"class":319},"\"猜大了！\"",[204,2645,1256],{"class":210},[204,2647,1278],{"class":214},[204,2649,2650],{"class":206,"line":1850},[204,2651,2615],{"class":214},[204,2653,2654],{"class":206,"line":1864},[204,2655,2656],{"class":210},"        else\n",[204,2658,2659],{"class":206,"line":1869},[204,2660,2596],{"class":214},[204,2662,2664,2666,2668,2671,2673],{"class":206,"line":2663},30,[204,2665,2601],{"class":214},[204,2667,1256],{"class":210},[204,2669,2670],{"class":319},"\"猜对了！\"",[204,2672,1256],{"class":210},[204,2674,1278],{"class":214},[204,2676,2678,2681],{"class":206,"line":2677},31,[204,2679,2680],{"class":210},"            break",[204,2682,1377],{"class":214},[204,2684,2686],{"class":206,"line":2685},32,[204,2687,2615],{"class":214},[204,2689,2691],{"class":206,"line":2690},33,[204,2692,2693],{"class":273},"        \u002F\u002F猜对 退出游戏\n",[204,2695,2697],{"class":206,"line":2696},34,[204,2698,2699],{"class":273},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[204,2701,2703],{"class":206,"line":2702},35,[204,2704,2273],{"class":214},[204,2706,2708],{"class":206,"line":2707},36,[204,2709,1651],{"class":214},[161,2711,2712],{"start":126},[71,2713,2714,2715,2718],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[30,2716,2717],{},"do...while会先执行一次循环语句","，在判断循环语句",[196,2720,2722],{"className":198,"code":2721,"language":200,"meta":125,"style":125},"\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",[81,2723,2724,2729,2737,2741,2753,2761,2765,2782,2789,2793,2806,2816],{"__ignoreMap":125},[204,2725,2726],{"class":206,"line":207},[204,2727,2728],{"class":273},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[204,2730,2731,2733,2735],{"class":206,"line":126},[204,2732,218],{"class":210},[204,2734,2059],{"class":2049},[204,2736,2062],{"class":214},[204,2738,2739],{"class":206,"line":131},[204,2740,1632],{"class":214},[204,2742,2743,2745,2747,2749,2751],{"class":206,"line":1281},[204,2744,2071],{"class":210},[204,2746,2326],{"class":214},[204,2748,260],{"class":210},[204,2750,405],{"class":263},[204,2752,1377],{"class":214},[204,2754,2755,2758],{"class":206,"line":1287},[204,2756,2757],{"class":210},"    do",[204,2759,2760],{"class":214}," \n",[204,2762,2763],{"class":206,"line":1301},[204,2764,2116],{"class":214},[204,2766,2767,2770,2772,2774,2776,2778,2780],{"class":206,"line":1307},[204,2768,2769],{"class":2049},"        std",[204,2771,2358],{"class":214},[204,2773,1256],{"class":210},[204,2775,1751],{"class":214},[204,2777,1256],{"class":210},[204,2779,2367],{"class":2049},[204,2781,2370],{"class":214},[204,2783,2784,2786],{"class":206,"line":1398},[204,2785,2375],{"class":214},[204,2787,2788],{"class":210},"++\n",[204,2790,2791],{"class":206,"line":1404},[204,2792,2273],{"class":214},[204,2794,2795,2797,2799,2801,2803],{"class":206,"line":1416},[204,2796,2337],{"class":210},[204,2798,2340],{"class":214},[204,2800,1123],{"class":210},[204,2802,659],{"class":263},[204,2804,2805],{"class":214},");\n",[204,2807,2808,2810,2812,2814],{"class":206,"line":1698},[204,2809,2389],{"class":2049},[204,2811,215],{"class":214},[204,2813,2394],{"class":319},[204,2815,2805],{"class":214},[204,2817,2818],{"class":206,"line":1703},[204,2819,1651],{"class":214},[19,2821,2822],{},"案例-水仙花数",[19,2824,2825],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2827,2828],{},"例如：1^3+5^3+3^3=153",[19,2830,2831],{},"请用do...while语句，求出所有3位数的水仙花数",[196,2833,2835],{"className":198,"code":2834,"language":200,"meta":125,"style":125},"#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",[81,2836,2837,2843,2853,2861,2865,2870,2882,2888,2892,2897,2913,2929,2945,2960,2979,2994,3042,3046,3058,3062,3070,3074,3088],{"__ignoreMap":125},[204,2838,2839,2841],{"class":206,"line":207},[204,2840,2035],{"class":210},[204,2842,2420],{"class":319},[204,2844,2845,2847,2849,2851],{"class":206,"line":126},[204,2846,2043],{"class":210},[204,2848,2046],{"class":210},[204,2850,2050],{"class":2049},[204,2852,1377],{"class":214},[204,2854,2855,2857,2859],{"class":206,"line":131},[204,2856,218],{"class":210},[204,2858,2059],{"class":2049},[204,2860,2062],{"class":214},[204,2862,2863],{"class":206,"line":1281},[204,2864,1632],{"class":214},[204,2866,2867],{"class":206,"line":1287},[204,2868,2869],{"class":273},"    \u002F\u002F1.先打印所有三位数字\n",[204,2871,2872,2874,2876,2878,2880],{"class":206,"line":1301},[204,2873,2071],{"class":210},[204,2875,2326],{"class":214},[204,2877,260],{"class":210},[204,2879,524],{"class":263},[204,2881,1377],{"class":214},[204,2883,2884,2886],{"class":206,"line":1307},[204,2885,2757],{"class":210},[204,2887,2760],{"class":214},[204,2889,2890],{"class":206,"line":1398},[204,2891,2116],{"class":214},[204,2893,2894],{"class":206,"line":1404},[204,2895,2896],{"class":273},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[204,2898,2899,2902,2904,2906,2908,2910],{"class":206,"line":1416},[204,2900,2901],{"class":210},"        int",[204,2903,1485],{"class":214},[204,2905,260],{"class":210},[204,2907,405],{"class":263},[204,2909,270],{"class":214},[204,2911,2912],{"class":273}," \u002F\u002F个位\n",[204,2914,2915,2917,2920,2922,2924,2926],{"class":206,"line":1698},[204,2916,2901],{"class":210},[204,2918,2919],{"class":214}," b",[204,2921,260],{"class":210},[204,2923,405],{"class":263},[204,2925,270],{"class":214},[204,2927,2928],{"class":273}," \u002F\u002F十位\n",[204,2930,2931,2933,2936,2938,2940,2942],{"class":206,"line":1703},[204,2932,2901],{"class":210},[204,2934,2935],{"class":214}," c",[204,2937,260],{"class":210},[204,2939,405],{"class":263},[204,2941,270],{"class":214},[204,2943,2944],{"class":273}," \u002F\u002F百位\n",[204,2946,2947,2950,2952,2954,2956,2958],{"class":206,"line":1709},[204,2948,2949],{"class":214},"        a",[204,2951,260],{"class":210},[204,2953,1751],{"class":214},[204,2955,541],{"class":210},[204,2957,659],{"class":263},[204,2959,1377],{"class":214},[204,2961,2962,2965,2967,2969,2971,2973,2975,2977],{"class":206,"line":1714},[204,2963,2964],{"class":214},"        b",[204,2966,260],{"class":210},[204,2968,1751],{"class":214},[204,2970,797],{"class":210},[204,2972,659],{"class":263},[204,2974,541],{"class":210},[204,2976,659],{"class":263},[204,2978,1377],{"class":214},[204,2980,2981,2984,2986,2988,2990,2992],{"class":206,"line":1728},[204,2982,2983],{"class":214},"        c",[204,2985,260],{"class":210},[204,2987,1751],{"class":214},[204,2989,797],{"class":210},[204,2991,524],{"class":263},[204,2993,1377],{"class":214},[204,2995,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3033,3036,3039],{"class":206,"line":1733},[204,2997,2583],{"class":210},[204,2999,1927],{"class":214},[204,3001,668],{"class":210},[204,3003,62],{"class":214},[204,3005,668],{"class":210},[204,3007,62],{"class":214},[204,3009,694],{"class":210},[204,3011,476],{"class":214},[204,3013,668],{"class":210},[204,3015,476],{"class":214},[204,3017,668],{"class":210},[204,3019,476],{"class":214},[204,3021,694],{"class":210},[204,3023,501],{"class":214},[204,3025,668],{"class":210},[204,3027,501],{"class":214},[204,3029,668],{"class":210},[204,3031,3032],{"class":214},"c ",[204,3034,3035],{"class":210},"==",[204,3037,3038],{"class":214}," num)",[204,3040,3041],{"class":273}," \u002F\u002F如果是水仙花数，才打印\n",[204,3043,3044],{"class":206,"line":1739},[204,3045,2596],{"class":214},[204,3047,3048,3050,3052,3054,3056],{"class":206,"line":1760},[204,3049,2601],{"class":214},[204,3051,1256],{"class":210},[204,3053,1751],{"class":214},[204,3055,1256],{"class":210},[204,3057,1278],{"class":214},[204,3059,3060],{"class":206,"line":1765},[204,3061,2615],{"class":214},[204,3063,3064,3066,3068],{"class":206,"line":1779},[204,3065,2375],{"class":214},[204,3067,2378],{"class":210},[204,3069,1377],{"class":214},[204,3071,3072],{"class":206,"line":1784},[204,3073,2273],{"class":214},[204,3075,3076,3078,3081,3083,3086],{"class":206,"line":1813},[204,3077,2337],{"class":210},[204,3079,3080],{"class":214}," (num ",[204,3082,1123],{"class":210},[204,3084,3085],{"class":263}," 1000",[204,3087,2805],{"class":214},[204,3089,3090],{"class":206,"line":1818},[204,3091,1651],{"class":214},[161,3093,3094],{"start":131},[71,3095,3096],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[196,3098,3100],{"className":198,"code":3099,"language":200,"meta":125,"style":125},"\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",[81,3101,3102,3107,3136,3140,3152,3156,3161,3172,3179,3183,3197,3201,3208,3212,3224,3233],{"__ignoreMap":125},[204,3103,3104],{"class":206,"line":207},[204,3105,3106],{"class":273},"\u002F\u002F从数字0-9打印\n",[204,3108,3109,3112,3114,3116,3119,3121,3123,3126,3128,3130,3132,3134],{"class":206,"line":126},[204,3110,3111],{"class":210},"for",[204,3113,215],{"class":214},[204,3115,218],{"class":210},[204,3117,3118],{"class":214}," i",[204,3120,260],{"class":210},[204,3122,405],{"class":263},[204,3124,3125],{"class":214},";i",[204,3127,1123],{"class":210},[204,3129,659],{"class":263},[204,3131,3125],{"class":214},[204,3133,2378],{"class":210},[204,3135,221],{"class":214},[204,3137,3138],{"class":206,"line":131},[204,3139,1632],{"class":214},[204,3141,3142,3144,3146,3148,3150],{"class":206,"line":1281},[204,3143,1637],{"class":214},[204,3145,1256],{"class":210},[204,3147,654],{"class":214},[204,3149,1256],{"class":210},[204,3151,1278],{"class":214},[204,3153,3154],{"class":206,"line":1287},[204,3155,1651],{"class":214},[204,3157,3158],{"class":206,"line":1301},[204,3159,3160],{"class":273},"\u002F\u002F上式可以进行拆分\n",[204,3162,3163,3165,3167,3169],{"class":206,"line":1307},[204,3164,218],{"class":210},[204,3166,3118],{"class":214},[204,3168,260],{"class":210},[204,3170,3171],{"class":263},"0\n",[204,3173,3174,3176],{"class":206,"line":1398},[204,3175,3111],{"class":210},[204,3177,3178],{"class":214},"(;;;)\n",[204,3180,3181],{"class":206,"line":1404},[204,3182,1632],{"class":214},[204,3184,3185,3188,3191,3193,3195],{"class":206,"line":1416},[204,3186,3187],{"class":210},"    if",[204,3189,3190],{"class":214},"(i",[204,3192,1796],{"class":210},[204,3194,659],{"class":263},[204,3196,221],{"class":214},[204,3198,3199],{"class":206,"line":1698},[204,3200,2116],{"class":214},[204,3202,3203,3206],{"class":206,"line":1703},[204,3204,3205],{"class":210},"        break",[204,3207,1377],{"class":214},[204,3209,3210],{"class":206,"line":1709},[204,3211,2273],{"class":214},[204,3213,3214,3216,3218,3220,3222],{"class":206,"line":1714},[204,3215,1637],{"class":214},[204,3217,1256],{"class":210},[204,3219,654],{"class":214},[204,3221,1256],{"class":210},[204,3223,1278],{"class":214},[204,3225,3226,3229,3231],{"class":206,"line":1728},[204,3227,3228],{"class":214},"    i",[204,3230,2378],{"class":210},[204,3232,1377],{"class":214},[204,3234,3235],{"class":206,"line":1733},[204,3236,1651],{"class":214},[19,3238,3239],{},"小练习",[196,3241,3243],{"className":198,"code":3242,"language":200,"meta":125,"style":125},"#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",[81,3244,3245,3251,3261,3269,3273,3278,3283,3311,3315,3320,3325,3366,3370,3383,3387,3391,3395,3407,3411,3415],{"__ignoreMap":125},[204,3246,3247,3249],{"class":206,"line":207},[204,3248,2035],{"class":210},[204,3250,2038],{"class":319},[204,3252,3253,3255,3257,3259],{"class":206,"line":126},[204,3254,2043],{"class":210},[204,3256,2046],{"class":210},[204,3258,2050],{"class":2049},[204,3260,1377],{"class":214},[204,3262,3263,3265,3267],{"class":206,"line":131},[204,3264,218],{"class":210},[204,3266,2059],{"class":2049},[204,3268,2062],{"class":214},[204,3270,3271],{"class":206,"line":1281},[204,3272,1632],{"class":214},[204,3274,3275],{"class":206,"line":1287},[204,3276,3277],{"class":273},"    \u002F\u002F敲桌子案例\n",[204,3279,3280],{"class":206,"line":1301},[204,3281,3282],{"class":273},"    \u002F\u002F1.先输出1-100的数字\n",[204,3284,3285,3288,3290,3292,3294,3296,3298,3301,3303,3305,3307,3309],{"class":206,"line":1307},[204,3286,3287],{"class":210},"    for",[204,3289,215],{"class":214},[204,3291,218],{"class":210},[204,3293,3118],{"class":214},[204,3295,260],{"class":210},[204,3297,431],{"class":263},[204,3299,3300],{"class":214},"; i",[204,3302,1674],{"class":210},[204,3304,524],{"class":263},[204,3306,3300],{"class":214},[204,3308,2378],{"class":210},[204,3310,221],{"class":214},[204,3312,3313],{"class":206,"line":1398},[204,3314,2116],{"class":214},[204,3316,3317],{"class":206,"line":1404},[204,3318,3319],{"class":273},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[204,3321,3322],{"class":206,"line":1416},[204,3323,3324],{"class":273},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[204,3326,3327,3329,3331,3333,3335,3337,3339,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364],{"class":206,"line":1698},[204,3328,2583],{"class":210},[204,3330,3190],{"class":214},[204,3332,541],{"class":210},[204,3334,582],{"class":263},[204,3336,3035],{"class":210},[204,3338,405],{"class":263},[204,3340,3341],{"class":210}," ||",[204,3343,3118],{"class":214},[204,3345,541],{"class":210},[204,3347,659],{"class":263},[204,3349,3035],{"class":210},[204,3351,582],{"class":263},[204,3353,3341],{"class":210},[204,3355,3118],{"class":214},[204,3357,797],{"class":210},[204,3359,659],{"class":263},[204,3361,3035],{"class":210},[204,3363,582],{"class":263},[204,3365,221],{"class":214},[204,3367,3368],{"class":206,"line":1703},[204,3369,2596],{"class":214},[204,3371,3372,3374,3376,3379,3381],{"class":206,"line":1709},[204,3373,2601],{"class":214},[204,3375,1256],{"class":210},[204,3377,3378],{"class":319},"\"敲桌子\"",[204,3380,1256],{"class":210},[204,3382,1278],{"class":214},[204,3384,3385],{"class":206,"line":1714},[204,3386,2615],{"class":214},[204,3388,3389],{"class":206,"line":1728},[204,3390,2656],{"class":210},[204,3392,3393],{"class":206,"line":1733},[204,3394,2596],{"class":214},[204,3396,3397,3399,3401,3403,3405],{"class":206,"line":1739},[204,3398,2601],{"class":214},[204,3400,1256],{"class":210},[204,3402,654],{"class":214},[204,3404,1256],{"class":210},[204,3406,1278],{"class":214},[204,3408,3409],{"class":206,"line":1760},[204,3410,2615],{"class":214},[204,3412,3413],{"class":206,"line":1765},[204,3414,2273],{"class":214},[204,3416,3417],{"class":206,"line":1779},[204,3418,1651],{"class":214},[19,3420,3421],{},"嵌套实现星图",[196,3423,3425],{"className":198,"code":3424,"language":200,"meta":125,"style":125},"#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",[81,3426,3427,3433,3443,3451,3455,3481,3485,3514,3518,3529,3533,3542,3546],{"__ignoreMap":125},[204,3428,3429,3431],{"class":206,"line":207},[204,3430,2035],{"class":210},[204,3432,2038],{"class":319},[204,3434,3435,3437,3439,3441],{"class":206,"line":126},[204,3436,2043],{"class":210},[204,3438,2046],{"class":210},[204,3440,2050],{"class":2049},[204,3442,1377],{"class":214},[204,3444,3445,3447,3449],{"class":206,"line":131},[204,3446,218],{"class":210},[204,3448,2059],{"class":2049},[204,3450,2062],{"class":214},[204,3452,3453],{"class":206,"line":1281},[204,3454,1632],{"class":214},[204,3456,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479],{"class":206,"line":1287},[204,3458,3287],{"class":210},[204,3460,1744],{"class":214},[204,3462,218],{"class":210},[204,3464,3118],{"class":214},[204,3466,260],{"class":210},[204,3468,405],{"class":263},[204,3470,3125],{"class":214},[204,3472,1123],{"class":210},[204,3474,659],{"class":263},[204,3476,3125],{"class":214},[204,3478,2378],{"class":210},[204,3480,221],{"class":214},[204,3482,3483],{"class":206,"line":1301},[204,3484,2116],{"class":214},[204,3486,3487,3490,3492,3494,3497,3499,3501,3504,3506,3508,3510,3512],{"class":206,"line":1307},[204,3488,3489],{"class":210},"        for",[204,3491,1744],{"class":214},[204,3493,218],{"class":210},[204,3495,3496],{"class":214}," j",[204,3498,260],{"class":210},[204,3500,405],{"class":263},[204,3502,3503],{"class":214},";j",[204,3505,1123],{"class":210},[204,3507,659],{"class":263},[204,3509,3503],{"class":214},[204,3511,2378],{"class":210},[204,3513,221],{"class":214},[204,3515,3516],{"class":206,"line":1398},[204,3517,2596],{"class":214},[204,3519,3520,3522,3524,3527],{"class":206,"line":1404},[204,3521,2601],{"class":214},[204,3523,1256],{"class":210},[204,3525,3526],{"class":319},"\"*\"",[204,3528,1377],{"class":214},[204,3530,3531],{"class":206,"line":1416},[204,3532,2615],{"class":214},[204,3534,3535,3538,3540],{"class":206,"line":1698},[204,3536,3537],{"class":214},"        cout",[204,3539,1256],{"class":210},[204,3541,1278],{"class":214},[204,3543,3544],{"class":206,"line":1703},[204,3545,2273],{"class":214},[204,3547,3548],{"class":206,"line":1709},[204,3549,1651],{"class":214},[19,3551,3552],{},"乘法口诀表",[196,3554,3556],{"className":198,"code":3555,"language":200,"meta":125,"style":125},"#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",[81,3557,3558,3564,3574,3582,3586,3612,3616,3641,3645,3685,3689,3697,3701],{"__ignoreMap":125},[204,3559,3560,3562],{"class":206,"line":207},[204,3561,2035],{"class":210},[204,3563,2420],{"class":319},[204,3565,3566,3568,3570,3572],{"class":206,"line":126},[204,3567,2043],{"class":210},[204,3569,2046],{"class":210},[204,3571,2050],{"class":2049},[204,3573,1377],{"class":214},[204,3575,3576,3578,3580],{"class":206,"line":131},[204,3577,218],{"class":210},[204,3579,2059],{"class":2049},[204,3581,2062],{"class":214},[204,3583,3584],{"class":206,"line":1281},[204,3585,1632],{"class":214},[204,3587,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610],{"class":206,"line":1287},[204,3589,3287],{"class":210},[204,3591,215],{"class":214},[204,3593,218],{"class":210},[204,3595,3118],{"class":214},[204,3597,260],{"class":210},[204,3599,431],{"class":263},[204,3601,3125],{"class":214},[204,3603,1123],{"class":210},[204,3605,659],{"class":263},[204,3607,3125],{"class":214},[204,3609,2378],{"class":210},[204,3611,221],{"class":214},[204,3613,3614],{"class":206,"line":1301},[204,3615,2116],{"class":214},[204,3617,3618,3620,3622,3624,3626,3628,3630,3632,3634,3637,3639],{"class":206,"line":1307},[204,3619,3489],{"class":210},[204,3621,215],{"class":214},[204,3623,218],{"class":210},[204,3625,3496],{"class":214},[204,3627,260],{"class":210},[204,3629,431],{"class":263},[204,3631,3503],{"class":214},[204,3633,1674],{"class":210},[204,3635,3636],{"class":214},"i;j",[204,3638,2378],{"class":210},[204,3640,221],{"class":214},[204,3642,3643],{"class":206,"line":1398},[204,3644,2596],{"class":214},[204,3646,3647,3649,3651,3653,3655,3657,3659,3661,3663,3666,3668,3670,3672,3674,3676,3679,3681,3683],{"class":206,"line":1404},[204,3648,2601],{"class":214},[204,3650,1256],{"class":210},[204,3652,680],{"class":214},[204,3654,1256],{"class":210},[204,3656,3526],{"class":319},[204,3658,1256],{"class":210},[204,3660,654],{"class":214},[204,3662,1256],{"class":210},[204,3664,3665],{"class":319},"\"=\"",[204,3667,1256],{"class":210},[204,3669,654],{"class":214},[204,3671,668],{"class":210},[204,3673,680],{"class":214},[204,3675,1256],{"class":210},[204,3677,3678],{"class":319},"'",[204,3680,1317],{"class":263},[204,3682,3678],{"class":319},[204,3684,1377],{"class":214},[204,3686,3687],{"class":206,"line":1416},[204,3688,2615],{"class":214},[204,3690,3691,3693,3695],{"class":206,"line":1698},[204,3692,3537],{"class":214},[204,3694,1256],{"class":210},[204,3696,1278],{"class":214},[204,3698,3699],{"class":206,"line":1703},[204,3700,2273],{"class":214},[204,3702,3703],{"class":206,"line":1709},[204,3704,1651],{"class":214},[49,3706,3708],{"id":3707},"_163跳出语句","1.6.3跳出语句",[161,3710,3711],{},[71,3712,3713],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3715,3716],{},"break使用时机：",[68,3718,3719,3722,3725],{},[71,3720,3721],{},"出现在switch条件语句中，作用是终止case并跳出switch",[71,3723,3724],{},"出现在循环结构中，作用是跳出当前的循环结构",[71,3726,3727],{},"出现在嵌套循环中，跳出最近的内层循环语句",[161,3729,3730,3733],{"start":126},[71,3731,3732],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[71,3734,3735],{},"goto语句\n语法：goto 标记;",[19,3737,3738],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[196,3740,3742],{"className":198,"code":3741,"language":200,"meta":125,"style":125},"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",[81,3743,3744,3752,3756,3769,3779,3792,3805,3818,3826,3842],{"__ignoreMap":125},[204,3745,3746,3748,3750],{"class":206,"line":207},[204,3747,218],{"class":210},[204,3749,2059],{"class":2049},[204,3751,2062],{"class":214},[204,3753,3754],{"class":206,"line":126},[204,3755,1632],{"class":214},[204,3757,3758,3760,3762,3765,3767],{"class":206,"line":131},[204,3759,1637],{"class":214},[204,3761,1256],{"class":210},[204,3763,3764],{"class":319},"\"1\"",[204,3766,1256],{"class":210},[204,3768,1278],{"class":214},[204,3770,3771,3774,3777],{"class":206,"line":1281},[204,3772,3773],{"class":210},"    goto",[204,3775,3776],{"class":2049}," FLAG",[204,3778,1377],{"class":214},[204,3780,3781,3783,3785,3788,3790],{"class":206,"line":1287},[204,3782,1637],{"class":214},[204,3784,1256],{"class":210},[204,3786,3787],{"class":319},"\"2\"",[204,3789,1256],{"class":210},[204,3791,1278],{"class":214},[204,3793,3794,3796,3798,3801,3803],{"class":206,"line":1301},[204,3795,1637],{"class":214},[204,3797,1256],{"class":210},[204,3799,3800],{"class":319},"\"3\"",[204,3802,1256],{"class":210},[204,3804,1278],{"class":214},[204,3806,3807,3809,3811,3814,3816],{"class":206,"line":1307},[204,3808,1637],{"class":214},[204,3810,1256],{"class":210},[204,3812,3813],{"class":319},"\"4\"",[204,3815,1256],{"class":210},[204,3817,1278],{"class":214},[204,3819,3820,3823],{"class":206,"line":1398},[204,3821,3822],{"class":2049},"    FLAG",[204,3824,3825],{"class":214},":\n",[204,3827,3828,3830,3832,3835,3837,3839],{"class":206,"line":1404},[204,3829,1637],{"class":214},[204,3831,1256],{"class":210},[204,3833,3834],{"class":319},"\"5\"",[204,3836,1256],{"class":210},[204,3838,1325],{"class":214},[204,3840,3841],{"class":273},"\u002F\u002F跳过了2,3,4,直接到5\n",[204,3843,3844],{"class":206,"line":1416},[204,3845,1651],{"class":214},[14,3847,3849],{"id":3848},"_17数组","1.7数组",[49,3851,3853],{"id":3852},"_171一维数组","1.7.1一维数组",[161,3855,3856],{},[71,3857,3858],{},"一维数组定义方式",[352,3860,3861,3871],{},[355,3862,3863],{},[358,3864,3865,3868],{},[361,3866,3867],{},"方式",[361,3869,3870],{},"注意事项",[398,3872,3873,3887,3897],{},[358,3874,3875,3881],{},[403,3876,3877,3878,270],{},"数据类型 数组名",[204,3879,3880],{},"数组长度",[403,3882,3883,3884,3886],{},"这种方式是先定义再arr",[204,3885,654],{},"赋值",[358,3888,3889,3894],{},[403,3890,3877,3891,3893],{},[204,3892,3880],{},"={值1,值2....};",[403,3895,3896],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[358,3898,3899,3903],{},[403,3900,3877,3901,3893],{},[204,3902],{},[403,3904,3905,3906,3908],{},"int arr",[204,3907],{},";这是不正确的，按照这样的方式定义必须有初始长度",[161,3910,3911],{"start":126},[71,3912,3913],{},"一维数组数组名\n用途：",[68,3915,3916],{},[71,3917,3918],{},"1.可以统计整个数组在内存中的长度：",[196,3920,3922],{"className":198,"code":3921,"language":200,"meta":125,"style":125},"sizeof(arr);\nsizeof(arr[0]);\n",[81,3923,3924,3931],{"__ignoreMap":125},[204,3925,3926,3928],{"class":206,"line":207},[204,3927,211],{"class":210},[204,3929,3930],{"class":214},"(arr);\n",[204,3932,3933,3935,3938,3940],{"class":206,"line":126},[204,3934,211],{"class":210},[204,3936,3937],{"class":214},"(arr[",[204,3939,405],{"class":263},[204,3941,3942],{"class":214},"]);\n",[68,3944,3945],{},[71,3946,3947],{},"2.可以获取数组在内存中的首地址:",[196,3949,3951],{"className":198,"code":3950,"language":200,"meta":125,"style":125},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[81,3952,3953,3958,3971,3976],{"__ignoreMap":125},[204,3954,3955],{"class":206,"line":207},[204,3956,3957],{"class":273},"\u002F\u002F查看16进制的首地址\n",[204,3959,3960,3962,3964,3967,3969],{"class":206,"line":126},[204,3961,1456],{"class":214},[204,3963,1256],{"class":210},[204,3965,3966],{"class":214},"arr",[204,3968,1256],{"class":210},[204,3970,1278],{"class":214},[204,3972,3973],{"class":206,"line":131},[204,3974,3975],{"class":273},"\u002F\u002F看10进制数\n",[204,3977,3978,3980,3982,3984,3986,3988,3990,3993,3995,3997,3999],{"class":206,"line":1281},[204,3979,1456],{"class":214},[204,3981,1256],{"class":210},[204,3983,215],{"class":214},[204,3985,218],{"class":210},[204,3987,642],{"class":214},[204,3989,566],{"class":210},[204,3991,3992],{"class":214},"arr[",[204,3994,405],{"class":263},[204,3996,1153],{"class":214},[204,3998,1256],{"class":210},[204,4000,1278],{"class":214},[19,4002,4003],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[68,4005,4006],{},[71,4007,4008],{},"1️⃣五只小猪称体重",[196,4010,4012],{"className":198,"code":4011,"language":200,"meta":125,"style":125},"#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",[81,4013,4014,4020,4030,4038,4042,4082,4095,4121,4125,4137,4141,4151,4155,4159,4172,4182],{"__ignoreMap":125},[204,4015,4016,4018],{"class":206,"line":207},[204,4017,2035],{"class":210},[204,4019,2038],{"class":319},[204,4021,4022,4024,4026,4028],{"class":206,"line":126},[204,4023,2043],{"class":210},[204,4025,2046],{"class":210},[204,4027,2050],{"class":2049},[204,4029,1377],{"class":214},[204,4031,4032,4034,4036],{"class":206,"line":131},[204,4033,218],{"class":210},[204,4035,2059],{"class":2049},[204,4037,2062],{"class":214},[204,4039,4040],{"class":206,"line":1281},[204,4041,1632],{"class":214},[204,4043,4044,4046,4049,4051,4053,4055,4057,4060,4062,4065,4067,4069,4071,4074,4076,4079],{"class":206,"line":1287},[204,4045,2071],{"class":210},[204,4047,4048],{"class":214}," arr[",[204,4050,532],{"class":263},[204,4052,1153],{"class":214},[204,4054,260],{"class":210},[204,4056,1109],{"class":214},[204,4058,4059],{"class":263},"300",[204,4061,591],{"class":214},[204,4063,4064],{"class":263},"350",[204,4066,591],{"class":214},[204,4068,1808],{"class":263},[204,4070,591],{"class":214},[204,4072,4073],{"class":263},"400",[204,4075,591],{"class":214},[204,4077,4078],{"class":263},"250",[204,4080,4081],{"class":214},"};\n",[204,4083,4084,4086,4089,4091,4093],{"class":206,"line":1301},[204,4085,2071],{"class":210},[204,4087,4088],{"class":214}," tmp",[204,4090,260],{"class":210},[204,4092,405],{"class":263},[204,4094,1377],{"class":214},[204,4096,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119],{"class":206,"line":1307},[204,4098,3287],{"class":210},[204,4100,1744],{"class":214},[204,4102,218],{"class":210},[204,4104,3118],{"class":214},[204,4106,260],{"class":210},[204,4108,405],{"class":263},[204,4110,3125],{"class":214},[204,4112,1123],{"class":210},[204,4114,532],{"class":263},[204,4116,3125],{"class":214},[204,4118,2378],{"class":210},[204,4120,221],{"class":214},[204,4122,4123],{"class":206,"line":1398},[204,4124,2116],{"class":214},[204,4126,4127,4129,4132,4134],{"class":206,"line":1404},[204,4128,2583],{"class":210},[204,4130,4131],{"class":214},"(tmp",[204,4133,1123],{"class":210},[204,4135,4136],{"class":214},"arr[i])\n",[204,4138,4139],{"class":206,"line":1416},[204,4140,2596],{"class":214},[204,4142,4143,4146,4148],{"class":206,"line":1698},[204,4144,4145],{"class":214},"            tmp",[204,4147,260],{"class":210},[204,4149,4150],{"class":214},"arr[i];\n",[204,4152,4153],{"class":206,"line":1703},[204,4154,2615],{"class":214},[204,4156,4157],{"class":206,"line":1709},[204,4158,2273],{"class":214},[204,4160,4161,4163,4165,4168,4170],{"class":206,"line":1714},[204,4162,1637],{"class":214},[204,4164,1256],{"class":210},[204,4166,4167],{"class":214},"tmp",[204,4169,1256],{"class":210},[204,4171,1278],{"class":214},[204,4173,4174,4177,4180],{"class":206,"line":1728},[204,4175,4176],{"class":210},"    return",[204,4178,4179],{"class":263}," 0",[204,4181,1377],{"class":214},[204,4183,4184],{"class":206,"line":1733},[204,4185,1651],{"class":214},[68,4187,4188],{},[71,4189,4190],{},"2️⃣数组元素逆置",[196,4192,4194],{"className":198,"code":4193,"language":200,"meta":125,"style":125},"\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",[81,4195,4196,4201,4207,4217,4225,4229,4264,4280,4312,4325,4330,4335,4347,4357,4367,4372,4381,4391,4396,4401,4428,4432,4448,4452,4463,4472],{"__ignoreMap":125},[204,4197,4198],{"class":206,"line":207},[204,4199,4200],{"class":273},"\u002F\u002F元素逆置\n",[204,4202,4203,4205],{"class":206,"line":126},[204,4204,2035],{"class":210},[204,4206,2038],{"class":319},[204,4208,4209,4211,4213,4215],{"class":206,"line":131},[204,4210,2043],{"class":210},[204,4212,2046],{"class":210},[204,4214,2050],{"class":2049},[204,4216,1377],{"class":214},[204,4218,4219,4221,4223],{"class":206,"line":1281},[204,4220,218],{"class":210},[204,4222,2059],{"class":2049},[204,4224,2062],{"class":214},[204,4226,4227],{"class":206,"line":1287},[204,4228,1632],{"class":214},[204,4230,4231,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262],{"class":206,"line":1301},[204,4232,4233],{"class":210},"   int",[204,4235,4048],{"class":214},[204,4237,532],{"class":263},[204,4239,1153],{"class":214},[204,4241,260],{"class":210},[204,4243,1109],{"class":214},[204,4245,431],{"class":263},[204,4247,591],{"class":214},[204,4249,292],{"class":263},[204,4251,591],{"class":214},[204,4253,286],{"class":263},[204,4255,591],{"class":214},[204,4257,506],{"class":263},[204,4259,591],{"class":214},[204,4261,532],{"class":263},[204,4263,4081],{"class":214},[204,4265,4266,4268,4271,4273,4275,4277],{"class":206,"line":1307},[204,4267,4233],{"class":210},[204,4269,4270],{"class":214}," start",[204,4272,260],{"class":210},[204,4274,405],{"class":263},[204,4276,270],{"class":214},[204,4278,4279],{"class":273},"\u002F\u002F起始下标\n",[204,4281,4282,4284,4287,4290,4293,4296,4298,4300,4303,4305,4307,4309],{"class":206,"line":1398},[204,4283,4233],{"class":210},[204,4285,4286],{"class":214}," end",[204,4288,4289],{"class":210},"=sizeof",[204,4291,4292],{"class":214},"(arr)",[204,4294,4295],{"class":210},"\u002Fsizeof",[204,4297,3937],{"class":214},[204,4299,405],{"class":263},[204,4301,4302],{"class":214},"])",[204,4304,745],{"class":210},[204,4306,431],{"class":263},[204,4308,270],{"class":214},[204,4310,4311],{"class":273},"\u002F\u002F结束下标\n",[204,4313,4314,4317,4320,4322],{"class":206,"line":1404},[204,4315,4316],{"class":210},"   while",[204,4318,4319],{"class":214}," (start",[204,4321,1123],{"class":210},[204,4323,4324],{"class":214},"end)\n",[204,4326,4327],{"class":206,"line":1416},[204,4328,4329],{"class":214},"   {\n",[204,4331,4332],{"class":206,"line":1698},[204,4333,4334],{"class":273},"    \u002F\u002F实现元素互换代码\n",[204,4336,4337,4339,4342,4344],{"class":206,"line":1703},[204,4338,2071],{"class":210},[204,4340,4341],{"class":214}," temp",[204,4343,260],{"class":210},[204,4345,4346],{"class":214},"arr[start];\n",[204,4348,4349,4352,4354],{"class":206,"line":1709},[204,4350,4351],{"class":214},"    arr[start]",[204,4353,260],{"class":210},[204,4355,4356],{"class":214},"arr[end];\n",[204,4358,4359,4362,4364],{"class":206,"line":1714},[204,4360,4361],{"class":214},"    arr[end]",[204,4363,260],{"class":210},[204,4365,4366],{"class":214},"temp;\n",[204,4368,4369],{"class":206,"line":1728},[204,4370,4371],{"class":273},"    \u002F\u002F下标更新\n",[204,4373,4374,4377,4379],{"class":206,"line":1733},[204,4375,4376],{"class":214},"    start",[204,4378,2378],{"class":210},[204,4380,1377],{"class":214},[204,4382,4383,4386,4389],{"class":206,"line":1739},[204,4384,4385],{"class":214},"    end",[204,4387,4388],{"class":210},"--",[204,4390,1377],{"class":214},[204,4392,4393],{"class":206,"line":1760},[204,4394,4395],{"class":214},"   }\n",[204,4397,4398],{"class":206,"line":1765},[204,4399,4400],{"class":273},"   \u002F\u002F输出逆置后的数组\n",[204,4402,4403,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426],{"class":206,"line":1779},[204,4404,4405],{"class":210},"   for",[204,4407,1744],{"class":214},[204,4409,218],{"class":210},[204,4411,3118],{"class":214},[204,4413,260],{"class":210},[204,4415,405],{"class":263},[204,4417,3125],{"class":214},[204,4419,1123],{"class":210},[204,4421,532],{"class":263},[204,4423,3125],{"class":214},[204,4425,2378],{"class":210},[204,4427,221],{"class":214},[204,4429,4430],{"class":206,"line":1784},[204,4431,4329],{"class":214},[204,4433,4434,4436,4438,4441,4443,4446],{"class":206,"line":1813},[204,4435,1637],{"class":214},[204,4437,1256],{"class":210},[204,4439,4440],{"class":214},"arr[i]",[204,4442,1256],{"class":210},[204,4444,4445],{"class":319},"\" \"",[204,4447,1377],{"class":214},[204,4449,4450],{"class":206,"line":1818},[204,4451,4395],{"class":214},[204,4453,4454,4457,4459,4461],{"class":206,"line":1835},[204,4455,4456],{"class":2049},"   system",[204,4458,215],{"class":214},[204,4460,2394],{"class":319},[204,4462,2805],{"class":214},[204,4464,4465,4468,4470],{"class":206,"line":1840},[204,4466,4467],{"class":210},"   return",[204,4469,4179],{"class":263},[204,4471,1377],{"class":214},[204,4473,4474],{"class":206,"line":1845},[204,4475,1651],{"class":214},[68,4477,4478],{},[71,4479,4480],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[196,4482,4484],{"className":198,"code":4483,"language":200,"meta":125,"style":125},"\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",[81,4485,4486,4491,4497,4507,4515,4519,4571,4584,4610,4614,4628,4632,4637,4642,4672,4676,4681,4715,4719,4724,4744,4749,4761,4777,4792,4797,4801,4805,4818,4844,4848,4862,4866,4874],{"__ignoreMap":125},[204,4487,4488],{"class":206,"line":207},[204,4489,4490],{"class":273},"\u002F\u002F冒泡排序,升序\n",[204,4492,4493,4495],{"class":206,"line":126},[204,4494,2035],{"class":210},[204,4496,2038],{"class":319},[204,4498,4499,4501,4503,4505],{"class":206,"line":131},[204,4500,2043],{"class":210},[204,4502,2046],{"class":210},[204,4504,2050],{"class":2049},[204,4506,1377],{"class":214},[204,4508,4509,4511,4513],{"class":206,"line":1281},[204,4510,218],{"class":210},[204,4512,2059],{"class":2049},[204,4514,2062],{"class":214},[204,4516,4517],{"class":206,"line":1287},[204,4518,1632],{"class":214},[204,4520,4521,4523,4525,4527,4530,4532,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569],{"class":206,"line":1301},[204,4522,2071],{"class":210},[204,4524,4048],{"class":214},[204,4526,633],{"class":263},[204,4528,4529],{"class":214},"] ",[204,4531,260],{"class":210},[204,4533,4534],{"class":214}," {",[204,4536,506],{"class":263},[204,4538,591],{"class":214},[204,4540,292],{"class":263},[204,4542,591],{"class":214},[204,4544,608],{"class":263},[204,4546,591],{"class":214},[204,4548,405],{"class":263},[204,4550,591],{"class":214},[204,4552,532],{"class":263},[204,4554,591],{"class":214},[204,4556,582],{"class":263},[204,4558,591],{"class":214},[204,4560,431],{"class":263},[204,4562,591],{"class":214},[204,4564,286],{"class":263},[204,4566,591],{"class":214},[204,4568,633],{"class":263},[204,4570,4081],{"class":214},[204,4572,4573,4575,4577,4580,4582],{"class":206,"line":1307},[204,4574,1637],{"class":214},[204,4576,1256],{"class":210},[204,4578,4579],{"class":319},"\"排序前：\"",[204,4581,1256],{"class":210},[204,4583,1278],{"class":214},[204,4585,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608],{"class":206,"line":1398},[204,4587,3287],{"class":210},[204,4589,1744],{"class":214},[204,4591,218],{"class":210},[204,4593,3118],{"class":214},[204,4595,260],{"class":210},[204,4597,405],{"class":263},[204,4599,3125],{"class":214},[204,4601,1123],{"class":210},[204,4603,633],{"class":263},[204,4605,3125],{"class":214},[204,4607,2378],{"class":210},[204,4609,221],{"class":214},[204,4611,4612],{"class":206,"line":1404},[204,4613,2116],{"class":214},[204,4615,4616,4618,4620,4622,4624,4626],{"class":206,"line":1416},[204,4617,3537],{"class":214},[204,4619,1256],{"class":210},[204,4621,4440],{"class":214},[204,4623,1256],{"class":210},[204,4625,4445],{"class":319},[204,4627,1377],{"class":214},[204,4629,4630],{"class":206,"line":1698},[204,4631,2273],{"class":214},[204,4633,4634],{"class":206,"line":1703},[204,4635,4636],{"class":273},"    \u002F\u002F开始冒泡排序\n",[204,4638,4639],{"class":206,"line":1709},[204,4640,4641],{"class":273},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[204,4643,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670],{"class":206,"line":1714},[204,4645,3287],{"class":210},[204,4647,1744],{"class":214},[204,4649,218],{"class":210},[204,4651,3118],{"class":214},[204,4653,260],{"class":210},[204,4655,405],{"class":263},[204,4657,3125],{"class":214},[204,4659,1123],{"class":210},[204,4661,633],{"class":263},[204,4663,745],{"class":210},[204,4665,431],{"class":263},[204,4667,3125],{"class":214},[204,4669,2378],{"class":210},[204,4671,221],{"class":214},[204,4673,4674],{"class":206,"line":1728},[204,4675,2116],{"class":214},[204,4677,4678],{"class":206,"line":1733},[204,4679,4680],{"class":273},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[204,4682,4683,4685,4687,4689,4691,4693,4695,4697,4699,4701,4703,4705,4707,4709,4711,4713],{"class":206,"line":1739},[204,4684,3489],{"class":210},[204,4686,1744],{"class":214},[204,4688,218],{"class":210},[204,4690,3496],{"class":214},[204,4692,260],{"class":210},[204,4694,405],{"class":263},[204,4696,3503],{"class":214},[204,4698,1123],{"class":210},[204,4700,633],{"class":263},[204,4702,745],{"class":210},[204,4704,654],{"class":214},[204,4706,745],{"class":210},[204,4708,431],{"class":263},[204,4710,3503],{"class":214},[204,4712,2378],{"class":210},[204,4714,221],{"class":214},[204,4716,4717],{"class":206,"line":1760},[204,4718,2596],{"class":214},[204,4720,4721],{"class":206,"line":1765},[204,4722,4723],{"class":273},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[204,4725,4726,4729,4732,4734,4737,4739,4741],{"class":206,"line":1779},[204,4727,4728],{"class":210},"            if",[204,4730,4731],{"class":214},"(arr[j]",[204,4733,1173],{"class":210},[204,4735,4736],{"class":214},"arr[j",[204,4738,694],{"class":210},[204,4740,431],{"class":263},[204,4742,4743],{"class":214},"])\n",[204,4745,4746],{"class":206,"line":1784},[204,4747,4748],{"class":214},"            {\n",[204,4750,4751,4754,4756,4758],{"class":206,"line":1813},[204,4752,4753],{"class":210},"                int",[204,4755,4341],{"class":214},[204,4757,260],{"class":210},[204,4759,4760],{"class":214},"arr[j];\n",[204,4762,4763,4766,4768,4770,4772,4774],{"class":206,"line":1818},[204,4764,4765],{"class":214},"                arr[j]",[204,4767,260],{"class":210},[204,4769,4736],{"class":214},[204,4771,694],{"class":210},[204,4773,431],{"class":263},[204,4775,4776],{"class":214},"];\n",[204,4778,4779,4782,4784,4786,4788,4790],{"class":206,"line":1835},[204,4780,4781],{"class":214},"                arr[j",[204,4783,694],{"class":210},[204,4785,431],{"class":263},[204,4787,1153],{"class":214},[204,4789,260],{"class":210},[204,4791,4366],{"class":214},[204,4793,4794],{"class":206,"line":1840},[204,4795,4796],{"class":214},"            }\n",[204,4798,4799],{"class":206,"line":1845},[204,4800,2615],{"class":214},[204,4802,4803],{"class":206,"line":1850},[204,4804,2273],{"class":214},[204,4806,4807,4809,4811,4814,4816],{"class":206,"line":1864},[204,4808,1637],{"class":214},[204,4810,1256],{"class":210},[204,4812,4813],{"class":319},"\"排序后：\"",[204,4815,1256],{"class":210},[204,4817,1278],{"class":214},[204,4819,4820,4822,4824,4826,4828,4830,4832,4834,4836,4838,4840,4842],{"class":206,"line":1869},[204,4821,3287],{"class":210},[204,4823,1744],{"class":214},[204,4825,218],{"class":210},[204,4827,3118],{"class":214},[204,4829,260],{"class":210},[204,4831,405],{"class":263},[204,4833,3125],{"class":214},[204,4835,1123],{"class":210},[204,4837,633],{"class":263},[204,4839,3125],{"class":214},[204,4841,2378],{"class":210},[204,4843,221],{"class":214},[204,4845,4846],{"class":206,"line":2663},[204,4847,2116],{"class":214},[204,4849,4850,4852,4854,4856,4858,4860],{"class":206,"line":2677},[204,4851,3537],{"class":214},[204,4853,1256],{"class":210},[204,4855,4440],{"class":214},[204,4857,1256],{"class":210},[204,4859,4445],{"class":319},[204,4861,1377],{"class":214},[204,4863,4864],{"class":206,"line":2685},[204,4865,2273],{"class":214},[204,4867,4868,4870,4872],{"class":206,"line":2690},[204,4869,4176],{"class":210},[204,4871,4179],{"class":263},[204,4873,1377],{"class":214},[204,4875,4876],{"class":206,"line":2696},[204,4877,1651],{"class":214},[49,4879,4881],{"id":4880},"_172二维数组","1.7.2二维数组",[161,4883,4884],{},[71,4885,4886],{},"二维数组的四种定义方式",[352,4888,4889,4898],{},[355,4890,4891],{},[358,4892,4893,4896],{},[361,4894,4895],{},"序号",[361,4897,3867],{},[398,4899,4900,4910,4919,4928,4937],{},[358,4901,4902,4904],{},[403,4903,431],{},[403,4905,4906,4907,270],{},"数据类型 数组名[行数]",[204,4908,4909],{},"列数",[358,4911,4912,4914],{},[403,4913,292],{},[403,4915,4906,4916,4918],{},[204,4917,4909],{},"={ {数据1,数据2}，{数据3，数据4}... }",[358,4920,4921,4923],{},[403,4922,286],{},[403,4924,4906,4925,4927],{},[204,4926,4909],{},"={数据1,数据2,数据3...}",[358,4929,4930,4932],{},[403,4931,506],{},[403,4933,4934,4935,4927],{},"数据类型 数组名[]",[204,4936,4909],{},[358,4938,4939,4942],{},[403,4940,4941],{},"注意：不能只省略列数",[403,4943],{},[161,4945,4946],{"start":126},[71,4947,4948],{},"二维数组数组名",[68,4950,4951,4954],{},[71,4952,4953],{},"1.查看二维数组所占内存空间",[71,4955,4956],{},"2.获取二维数组首地址",[19,4958,4959],{},"已知二维数组，求二维数组的行数与列数",[196,4961,4963],{"className":198,"code":4962,"language":200,"meta":125,"style":125},"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",[81,4964,4965,4973,4977,4995,4999,5017,5033,5038,5063,5096],{"__ignoreMap":125},[204,4966,4967,4969,4971],{"class":206,"line":207},[204,4968,218],{"class":210},[204,4970,2059],{"class":2049},[204,4972,2062],{"class":214},[204,4974,4975],{"class":206,"line":126},[204,4976,1632],{"class":214},[204,4978,4979,4981,4983,4985,4988,4990,4992],{"class":206,"line":131},[204,4980,2071],{"class":210},[204,4982,4048],{"class":214},[204,4984,292],{"class":263},[204,4986,4987],{"class":214},"][",[204,4989,286],{"class":263},[204,4991,1153],{"class":214},[204,4993,4994],{"class":210},"=\n",[204,4996,4997],{"class":206,"line":1281},[204,4998,2116],{"class":214},[204,5000,5001,5004,5006,5008,5010,5012,5014],{"class":206,"line":1287},[204,5002,5003],{"class":214},"        {",[204,5005,431],{"class":263},[204,5007,591],{"class":214},[204,5009,292],{"class":263},[204,5011,591],{"class":214},[204,5013,286],{"class":263},[204,5015,5016],{"class":214},"},\n",[204,5018,5019,5021,5023,5025,5027,5029,5031],{"class":206,"line":1301},[204,5020,5003],{"class":214},[204,5022,506],{"class":263},[204,5024,591],{"class":214},[204,5026,532],{"class":263},[204,5028,591],{"class":214},[204,5030,557],{"class":263},[204,5032,1651],{"class":214},[204,5034,5035],{"class":206,"line":1307},[204,5036,5037],{"class":214},"    };\n",[204,5039,5040,5042,5044,5047,5049,5051,5053,5055,5057,5059,5061],{"class":206,"line":1398},[204,5041,1637],{"class":214},[204,5043,1256],{"class":210},[204,5045,5046],{"class":319},"\"二维数组的行数\"",[204,5048,1459],{"class":210},[204,5050,4292],{"class":214},[204,5052,4295],{"class":210},[204,5054,3937],{"class":214},[204,5056,405],{"class":263},[204,5058,4302],{"class":214},[204,5060,1256],{"class":210},[204,5062,1278],{"class":214},[204,5064,5065,5067,5069,5072,5074,5076,5078,5080,5082,5084,5086,5088,5090,5092,5094],{"class":206,"line":1404},[204,5066,1637],{"class":214},[204,5068,1256],{"class":210},[204,5070,5071],{"class":319},"\"二维数组的列数\"",[204,5073,1459],{"class":210},[204,5075,3937],{"class":214},[204,5077,405],{"class":263},[204,5079,4302],{"class":214},[204,5081,4295],{"class":210},[204,5083,3937],{"class":214},[204,5085,405],{"class":263},[204,5087,4987],{"class":214},[204,5089,405],{"class":263},[204,5091,4302],{"class":214},[204,5093,1256],{"class":210},[204,5095,1278],{"class":214},[204,5097,5098],{"class":206,"line":1416},[204,5099,1651],{"class":214},[19,5101,5102],{},"查看二维数组首地址",[196,5104,5106],{"className":198,"code":5105,"language":200,"meta":125,"style":125},"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",[81,5107,5108,5125,5151,5176],{"__ignoreMap":125},[204,5109,5110,5112,5114,5117,5119,5121,5123],{"class":206,"line":207},[204,5111,1456],{"class":214},[204,5113,1256],{"class":210},[204,5115,5116],{"class":319},"\"二维数组首地址：\"",[204,5118,1256],{"class":210},[204,5120,3966],{"class":214},[204,5122,1256],{"class":210},[204,5124,1278],{"class":214},[204,5126,5127,5129,5131,5134,5136,5138,5140,5143,5145,5147,5149],{"class":206,"line":126},[204,5128,1456],{"class":214},[204,5130,1256],{"class":210},[204,5132,5133],{"class":319},"\"二维数组第一行的首地址：\"",[204,5135,1256],{"class":210},[204,5137,215],{"class":214},[204,5139,218],{"class":210},[204,5141,5142],{"class":214},")arr[",[204,5144,405],{"class":263},[204,5146,1153],{"class":214},[204,5148,1256],{"class":210},[204,5150,1278],{"class":214},[204,5152,5153,5155,5157,5160,5162,5164,5166,5168,5170,5172,5174],{"class":206,"line":131},[204,5154,1456],{"class":214},[204,5156,1256],{"class":210},[204,5158,5159],{"class":319},"\"二维数组第二行的首地址：\"",[204,5161,1256],{"class":210},[204,5163,215],{"class":214},[204,5165,218],{"class":210},[204,5167,5142],{"class":214},[204,5169,431],{"class":263},[204,5171,1153],{"class":214},[204,5173,1256],{"class":210},[204,5175,1278],{"class":214},[204,5177,5178,5180,5182,5185,5187,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209],{"class":206,"line":1281},[204,5179,1456],{"class":214},[204,5181,1256],{"class":210},[204,5183,5184],{"class":319},"\"二维数组第一个元素的首地址:\"",[204,5186,1256],{"class":210},[204,5188,215],{"class":214},[204,5190,218],{"class":210},[204,5192,642],{"class":214},[204,5194,566],{"class":210},[204,5196,3992],{"class":214},[204,5198,405],{"class":263},[204,5200,4987],{"class":214},[204,5202,405],{"class":263},[204,5204,1153],{"class":214},[204,5206,1256],{"class":210},[204,5208,1325],{"class":214},[204,5210,5211],{"class":273},"\u002F\u002F对于数，要加取址符\n",[5213,5214,5215],"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":125,"searchDepth":126,"depth":126,"links":5217},[5218,5219,5220,5228,5229,5235,5240],{"id":151,"depth":126,"text":152},{"id":158,"depth":126,"text":159},{"id":174,"depth":126,"text":175,"children":5221},[5222,5223,5224,5225,5226,5227],{"id":178,"depth":131,"text":179},{"id":231,"depth":131,"text":232},{"id":300,"depth":131,"text":301},{"id":1237,"depth":131,"text":1238},{"id":1331,"depth":131,"text":1332},{"id":1430,"depth":131,"text":1431},{"id":1472,"depth":126,"text":1473},{"id":1540,"depth":126,"text":1541,"children":5230},[5231,5232,5233,5234],{"id":1544,"depth":131,"text":1545},{"id":1565,"depth":131,"text":1566},{"id":1574,"depth":131,"text":1575},{"id":1583,"depth":131,"text":1584},{"id":1592,"depth":126,"text":1593,"children":5236},[5237,5238,5239],{"id":1596,"depth":131,"text":1597},{"id":2291,"depth":131,"text":2292},{"id":3707,"depth":131,"text":3708},{"id":3848,"depth":126,"text":3849,"children":5241},[5242,5243],{"id":3852,"depth":131,"text":3853},{"id":4880,"depth":131,"text":4881},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":143,"description":125},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5250,"title":5251,"body":5252,"description":125,"extension":133,"meta":6352,"navigation":135,"path":6353,"seo":6354,"stem":6355,"__hash__":6356},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5253,"toc":6344},[5254,5257,5261,5269,5277,5280,5346,5350,5353,5429,5433,5436,5439,5442,5655,5659,5664,5728,5733,5800,5805,5896,5899,6004,6008,6011,6017,6161,6165,6168,6182,6185,6230,6233,6341],[10,5255,5251],{"id":5256},"_2函数",[14,5258,5260],{"id":5259},"_21函数概述","2.1函数概述",[161,5262,5263,5266],{},[71,5264,5265],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[71,5267,5268],{},"语法：",[196,5270,5275],{"className":5271,"code":5273,"language":5274,"meta":125},[5272],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[81,5276,5273],{"__ignoreMap":125},[19,5278,5279],{},"小案例",[196,5281,5283],{"className":198,"code":5282,"language":200,"meta":125,"style":125},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[81,5284,5285,5290,5314,5318,5335,5342],{"__ignoreMap":125},[204,5286,5287],{"class":206,"line":207},[204,5288,5289],{"class":273},"\u002F\u002Fnum1,num2形参\n",[204,5291,5292,5294,5297,5299,5301,5305,5307,5309,5312],{"class":206,"line":126},[204,5293,218],{"class":210},[204,5295,5296],{"class":2049}," add",[204,5298,215],{"class":214},[204,5300,218],{"class":210},[204,5302,5304],{"class":5303},"s4XuR"," num1",[204,5306,591],{"class":214},[204,5308,218],{"class":210},[204,5310,5311],{"class":5303}," num2",[204,5313,221],{"class":214},[204,5315,5316],{"class":206,"line":131},[204,5317,1632],{"class":214},[204,5319,5320,5322,5325,5327,5330,5332],{"class":206,"line":1281},[204,5321,2071],{"class":210},[204,5323,5324],{"class":214}," sum",[204,5326,260],{"class":210},[204,5328,5329],{"class":214},"num1",[204,5331,694],{"class":210},[204,5333,5334],{"class":214},"num2;\n",[204,5336,5337,5339],{"class":206,"line":1287},[204,5338,4176],{"class":210},[204,5340,5341],{"class":214}," sum;\n",[204,5343,5344],{"class":206,"line":1301},[204,5345,1651],{"class":214},[14,5347,5349],{"id":5348},"_22函数调用","2.2函数调用",[19,5351,5352],{},"调用刚刚写的求和函数",[196,5354,5356],{"className":198,"code":5355,"language":200,"meta":125,"style":125},"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",[81,5357,5358,5366,5370,5375,5387,5399,5408,5413,5425],{"__ignoreMap":125},[204,5359,5360,5362,5364],{"class":206,"line":207},[204,5361,218],{"class":210},[204,5363,2059],{"class":2049},[204,5365,2062],{"class":214},[204,5367,5368],{"class":206,"line":126},[204,5369,1632],{"class":214},[204,5371,5372],{"class":206,"line":131},[204,5373,5374],{"class":273},"    \u002F\u002Fa,b实参\n",[204,5376,5377,5379,5381,5383,5385],{"class":206,"line":1281},[204,5378,2071],{"class":210},[204,5380,1485],{"class":214},[204,5382,260],{"class":210},[204,5384,405],{"class":263},[204,5386,1377],{"class":214},[204,5388,5389,5391,5393,5395,5397],{"class":206,"line":1287},[204,5390,2071],{"class":210},[204,5392,2919],{"class":214},[204,5394,260],{"class":210},[204,5396,405],{"class":263},[204,5398,1377],{"class":214},[204,5400,5401,5403,5405],{"class":206,"line":1301},[204,5402,2098],{"class":214},[204,5404,1516],{"class":210},[204,5406,5407],{"class":214},"a,b;\n",[204,5409,5410],{"class":206,"line":1307},[204,5411,5412],{"class":273},"    \u002F\u002F调用函数时，实参值传给了形参\n",[204,5414,5415,5417,5419,5422],{"class":206,"line":1398},[204,5416,1637],{"class":214},[204,5418,1256],{"class":210},[204,5420,5421],{"class":2049},"add",[204,5423,5424],{"class":214},"(a,b);\n",[204,5426,5427],{"class":206,"line":1404},[204,5428,1651],{"class":214},[14,5430,5432],{"id":5431},"_23值传递","2.3值传递",[19,5434,5435],{},"值传递就是函数调用时实参将数值传给形参",[19,5437,5438],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5440,5441],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[196,5443,5445],{"className":198,"code":5444,"language":200,"meta":125,"style":125},"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",[81,5446,5447,5469,5473,5486,5503,5521,5532,5541,5550,5563,5579,5595,5604,5608,5616,5620,5632,5644,5651],{"__ignoreMap":125},[204,5448,5449,5452,5455,5457,5459,5461,5463,5465,5467],{"class":206,"line":207},[204,5450,5451],{"class":210},"void",[204,5453,5454],{"class":2049}," swap",[204,5456,215],{"class":214},[204,5458,218],{"class":210},[204,5460,5304],{"class":5303},[204,5462,591],{"class":214},[204,5464,218],{"class":210},[204,5466,5311],{"class":5303},[204,5468,221],{"class":214},[204,5470,5471],{"class":206,"line":126},[204,5472,1632],{"class":214},[204,5474,5475,5477,5479,5482,5484],{"class":206,"line":131},[204,5476,1637],{"class":214},[204,5478,1256],{"class":210},[204,5480,5481],{"class":319},"\"交换前：\"",[204,5483,1256],{"class":210},[204,5485,1278],{"class":214},[204,5487,5488,5490,5492,5495,5497,5499,5501],{"class":206,"line":1281},[204,5489,1637],{"class":214},[204,5491,1256],{"class":210},[204,5493,5494],{"class":319},"\"num1=\"",[204,5496,1256],{"class":210},[204,5498,5329],{"class":214},[204,5500,1256],{"class":210},[204,5502,1278],{"class":214},[204,5504,5505,5507,5509,5512,5514,5517,5519],{"class":206,"line":1287},[204,5506,1637],{"class":214},[204,5508,1256],{"class":210},[204,5510,5511],{"class":319},"\"num2=\"",[204,5513,1256],{"class":210},[204,5515,5516],{"class":214},"num2",[204,5518,1256],{"class":210},[204,5520,1278],{"class":214},[204,5522,5523,5525,5527,5529],{"class":206,"line":1301},[204,5524,2071],{"class":210},[204,5526,4341],{"class":214},[204,5528,260],{"class":210},[204,5530,5531],{"class":214},"num1;\n",[204,5533,5534,5537,5539],{"class":206,"line":1307},[204,5535,5536],{"class":214},"    num1",[204,5538,260],{"class":210},[204,5540,5334],{"class":214},[204,5542,5543,5546,5548],{"class":206,"line":1398},[204,5544,5545],{"class":214},"    num2",[204,5547,260],{"class":210},[204,5549,4366],{"class":214},[204,5551,5552,5554,5556,5559,5561],{"class":206,"line":1404},[204,5553,1637],{"class":214},[204,5555,1256],{"class":210},[204,5557,5558],{"class":319},"\"交换后：\"",[204,5560,1256],{"class":210},[204,5562,1278],{"class":214},[204,5564,5565,5567,5569,5571,5573,5575,5577],{"class":206,"line":1416},[204,5566,1637],{"class":214},[204,5568,1256],{"class":210},[204,5570,5494],{"class":319},[204,5572,1256],{"class":210},[204,5574,5329],{"class":214},[204,5576,1256],{"class":210},[204,5578,1278],{"class":214},[204,5580,5581,5583,5585,5587,5589,5591,5593],{"class":206,"line":1698},[204,5582,1637],{"class":214},[204,5584,1256],{"class":210},[204,5586,5511],{"class":319},[204,5588,1256],{"class":210},[204,5590,5516],{"class":214},[204,5592,1256],{"class":210},[204,5594,1278],{"class":214},[204,5596,5597,5599,5601],{"class":206,"line":1703},[204,5598,4176],{"class":210},[204,5600,270],{"class":214},[204,5602,5603],{"class":273},"\u002F\u002F或者不写\n",[204,5605,5606],{"class":206,"line":1709},[204,5607,1651],{"class":214},[204,5609,5610,5612,5614],{"class":206,"line":1714},[204,5611,218],{"class":210},[204,5613,2059],{"class":2049},[204,5615,2062],{"class":214},[204,5617,5618],{"class":206,"line":1728},[204,5619,1632],{"class":214},[204,5621,5622,5624,5626,5628,5630],{"class":206,"line":1733},[204,5623,2071],{"class":210},[204,5625,1485],{"class":214},[204,5627,260],{"class":210},[204,5629,659],{"class":263},[204,5631,1377],{"class":214},[204,5633,5634,5636,5638,5640,5642],{"class":206,"line":1739},[204,5635,2071],{"class":210},[204,5637,2919],{"class":214},[204,5639,260],{"class":210},[204,5641,913],{"class":263},[204,5643,1377],{"class":214},[204,5645,5646,5649],{"class":206,"line":1760},[204,5647,5648],{"class":2049},"    swap",[204,5650,5424],{"class":214},[204,5652,5653],{"class":206,"line":1765},[204,5654,1651],{"class":214},[14,5656,5658],{"id":5657},"_24函数的常见形式","2.4函数的常见形式",[161,5660,5661],{},[71,5662,5663],{},"无参无返",[196,5665,5667],{"className":198,"code":5666,"language":200,"meta":125,"style":125},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[81,5668,5669,5678,5682,5695,5699,5707,5711,5716,5724],{"__ignoreMap":125},[204,5670,5671,5673,5676],{"class":206,"line":207},[204,5672,5451],{"class":210},[204,5674,5675],{"class":2049}," test01",[204,5677,2062],{"class":214},[204,5679,5680],{"class":206,"line":126},[204,5681,1632],{"class":214},[204,5683,5684,5686,5688,5691,5693],{"class":206,"line":131},[204,5685,1637],{"class":214},[204,5687,1256],{"class":210},[204,5689,5690],{"class":319},"\"你好\"",[204,5692,1256],{"class":210},[204,5694,1278],{"class":214},[204,5696,5697],{"class":206,"line":1281},[204,5698,1651],{"class":214},[204,5700,5701,5703,5705],{"class":206,"line":1287},[204,5702,218],{"class":210},[204,5704,2059],{"class":2049},[204,5706,2062],{"class":214},[204,5708,5709],{"class":206,"line":1301},[204,5710,1632],{"class":214},[204,5712,5713],{"class":206,"line":1307},[204,5714,5715],{"class":273},"    \u002F\u002F函数调用\n",[204,5717,5718,5721],{"class":206,"line":1398},[204,5719,5720],{"class":2049},"    test01",[204,5722,5723],{"class":214},"();\n",[204,5725,5726],{"class":206,"line":1404},[204,5727,1651],{"class":214},[161,5729,5730],{"start":126},[71,5731,5732],{},"有参无返",[196,5734,5736],{"className":198,"code":5735,"language":200,"meta":125,"style":125},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[81,5737,5738,5753,5757,5769,5773,5781,5785,5796],{"__ignoreMap":125},[204,5739,5740,5742,5745,5747,5749,5751],{"class":206,"line":207},[204,5741,5451],{"class":210},[204,5743,5744],{"class":2049}," test02",[204,5746,215],{"class":214},[204,5748,218],{"class":210},[204,5750,1485],{"class":5303},[204,5752,221],{"class":214},[204,5754,5755],{"class":206,"line":126},[204,5756,1632],{"class":214},[204,5758,5759,5761,5763,5765,5767],{"class":206,"line":131},[204,5760,1637],{"class":214},[204,5762,1256],{"class":210},[204,5764,5690],{"class":319},[204,5766,1256],{"class":210},[204,5768,1278],{"class":214},[204,5770,5771],{"class":206,"line":1281},[204,5772,1651],{"class":214},[204,5774,5775,5777,5779],{"class":206,"line":1287},[204,5776,218],{"class":210},[204,5778,2059],{"class":2049},[204,5780,2062],{"class":214},[204,5782,5783],{"class":206,"line":1301},[204,5784,1632],{"class":214},[204,5786,5787,5790,5792,5794],{"class":206,"line":1307},[204,5788,5789],{"class":2049},"    test02",[204,5791,215],{"class":214},[204,5793,524],{"class":263},[204,5795,2805],{"class":214},[204,5797,5798],{"class":206,"line":1398},[204,5799,1651],{"class":214},[161,5801,5802],{"start":131},[71,5803,5804],{},"无参有返",[196,5806,5808],{"className":198,"code":5807,"language":200,"meta":125,"style":125},"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",[81,5809,5810,5819,5823,5835,5844,5848,5856,5860,5873,5892],{"__ignoreMap":125},[204,5811,5812,5814,5817],{"class":206,"line":207},[204,5813,218],{"class":210},[204,5815,5816],{"class":2049}," test03",[204,5818,2062],{"class":214},[204,5820,5821],{"class":206,"line":126},[204,5822,1632],{"class":214},[204,5824,5825,5827,5829,5831,5833],{"class":206,"line":131},[204,5826,1637],{"class":214},[204,5828,1256],{"class":210},[204,5830,5690],{"class":319},[204,5832,1256],{"class":210},[204,5834,1278],{"class":214},[204,5836,5837,5839,5842],{"class":206,"line":1281},[204,5838,4176],{"class":210},[204,5840,5841],{"class":263}," 100",[204,5843,1377],{"class":214},[204,5845,5846],{"class":206,"line":1287},[204,5847,1651],{"class":214},[204,5849,5850,5852,5854],{"class":206,"line":1301},[204,5851,218],{"class":210},[204,5853,2059],{"class":2049},[204,5855,2062],{"class":214},[204,5857,5858],{"class":206,"line":1307},[204,5859,1632],{"class":214},[204,5861,5862,5864,5866,5868,5871],{"class":206,"line":1398},[204,5863,2071],{"class":210},[204,5865,5304],{"class":214},[204,5867,260],{"class":210},[204,5869,5870],{"class":2049},"test03",[204,5872,5723],{"class":214},[204,5874,5875,5877,5879,5881,5883,5885,5887,5889],{"class":206,"line":1404},[204,5876,1637],{"class":214},[204,5878,1256],{"class":210},[204,5880,5494],{"class":319},[204,5882,1256],{"class":210},[204,5884,5329],{"class":214},[204,5886,1256],{"class":210},[204,5888,1325],{"class":214},[204,5890,5891],{"class":273}," \u002F\u002F100\n",[204,5893,5894],{"class":206,"line":1416},[204,5895,1651],{"class":214},[19,5897,5898],{},"4.有参有返",[196,5900,5902],{"className":198,"code":5901,"language":200,"meta":125,"style":125},"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",[81,5903,5904,5919,5923,5936,5942,5946,5955,5959,5971,5985,6000],{"__ignoreMap":125},[204,5905,5906,5908,5911,5913,5915,5917],{"class":206,"line":207},[204,5907,218],{"class":210},[204,5909,5910],{"class":2049}," test04",[204,5912,215],{"class":214},[204,5914,218],{"class":210},[204,5916,1485],{"class":5303},[204,5918,221],{"class":214},[204,5920,5921],{"class":206,"line":126},[204,5922,1632],{"class":214},[204,5924,5925,5927,5929,5932,5934],{"class":206,"line":131},[204,5926,1637],{"class":214},[204,5928,1256],{"class":210},[204,5930,5931],{"class":319},"\"hello\"",[204,5933,1256],{"class":210},[204,5935,1278],{"class":214},[204,5937,5938,5940],{"class":206,"line":1281},[204,5939,4176],{"class":210},[204,5941,1519],{"class":214},[204,5943,5944],{"class":206,"line":1287},[204,5945,1651],{"class":214},[204,5947,5948,5950,5953],{"class":206,"line":1301},[204,5949,218],{"class":210},[204,5951,5952],{"class":2049}," mian",[204,5954,2062],{"class":214},[204,5956,5957],{"class":206,"line":1307},[204,5958,1632],{"class":214},[204,5960,5961,5963,5965,5967,5969],{"class":206,"line":1398},[204,5962,2071],{"class":210},[204,5964,2919],{"class":214},[204,5966,260],{"class":210},[204,5968,431],{"class":263},[204,5970,1377],{"class":214},[204,5972,5973,5975,5977,5979,5982],{"class":206,"line":1404},[204,5974,2071],{"class":210},[204,5976,2935],{"class":214},[204,5978,260],{"class":210},[204,5980,5981],{"class":2049},"test04",[204,5983,5984],{"class":214},"(b);\n",[204,5986,5987,5989,5991,5993,5995,5997],{"class":206,"line":1416},[204,5988,1637],{"class":214},[204,5990,1256],{"class":210},[204,5992,501],{"class":214},[204,5994,1256],{"class":210},[204,5996,1325],{"class":214},[204,5998,5999],{"class":273}," \u002F\u002F1\n",[204,6001,6002],{"class":206,"line":1698},[204,6003,1651],{"class":214},[14,6005,6007],{"id":6006},"_25函数的声明","2.5函数的声明",[19,6009,6010],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6012,6013,6014],{},"函数的",[30,6015,6016],{},"声明可以多次，但是函数的定义只能有一次",[196,6018,6020],{"className":198,"code":6019,"language":200,"meta":125,"style":125},"\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",[81,6021,6022,6027,6032,6057,6066,6070,6082,6094,6110,6114,6134,6138,6157],{"__ignoreMap":125},[204,6023,6024],{"class":206,"line":207},[204,6025,6026],{"class":273},"\u002F\u002F函数声明\n",[204,6028,6029],{"class":206,"line":126},[204,6030,6031],{"class":273},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[204,6033,6034,6036,6039,6041,6043,6045,6047,6049,6051,6054],{"class":206,"line":131},[204,6035,218],{"class":210},[204,6037,6038],{"class":2049}," max",[204,6040,215],{"class":214},[204,6042,218],{"class":210},[204,6044,1485],{"class":5303},[204,6046,591],{"class":214},[204,6048,218],{"class":210},[204,6050,2919],{"class":5303},[204,6052,6053],{"class":214},");",[204,6055,6056],{"class":273},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[204,6058,6059,6061,6063],{"class":206,"line":1281},[204,6060,218],{"class":210},[204,6062,2059],{"class":2049},[204,6064,6065],{"class":214},"() \n",[204,6067,6068],{"class":206,"line":1287},[204,6069,1632],{"class":214},[204,6071,6072,6074,6076,6078,6080],{"class":206,"line":1301},[204,6073,2071],{"class":210},[204,6075,1485],{"class":214},[204,6077,260],{"class":210},[204,6079,659],{"class":263},[204,6081,1377],{"class":214},[204,6083,6084,6086,6088,6090,6092],{"class":206,"line":1307},[204,6085,2071],{"class":210},[204,6087,2919],{"class":214},[204,6089,260],{"class":210},[204,6091,913],{"class":263},[204,6093,1377],{"class":214},[204,6095,6096,6098,6100,6103,6106,6108],{"class":206,"line":1398},[204,6097,1637],{"class":214},[204,6099,1256],{"class":210},[204,6101,6102],{"class":2049},"max",[204,6104,6105],{"class":214},"(a,b)",[204,6107,1256],{"class":210},[204,6109,1278],{"class":214},[204,6111,6112],{"class":206,"line":1404},[204,6113,1651],{"class":214},[204,6115,6116,6118,6120,6122,6124,6126,6128,6130,6132],{"class":206,"line":1416},[204,6117,218],{"class":210},[204,6119,6038],{"class":2049},[204,6121,215],{"class":214},[204,6123,218],{"class":210},[204,6125,1485],{"class":5303},[204,6127,591],{"class":214},[204,6129,218],{"class":210},[204,6131,2919],{"class":5303},[204,6133,221],{"class":214},[204,6135,6136],{"class":206,"line":1698},[204,6137,1632],{"class":214},[204,6139,6140,6142,6144,6146,6148,6150,6152,6154],{"class":206,"line":1703},[204,6141,4176],{"class":210},[204,6143,1485],{"class":214},[204,6145,1173],{"class":210},[204,6147,476],{"class":214},[204,6149,1199],{"class":210},[204,6151,62],{"class":214},[204,6153,1072],{"class":210},[204,6155,6156],{"class":214},"b;\n",[204,6158,6159],{"class":206,"line":1709},[204,6160,1651],{"class":214},[14,6162,6164],{"id":6163},"_26函数的分文件编写","2.6函数的分文件编写",[19,6166,6167],{},"4个步骤：",[68,6169,6170,6173,6176,6179],{},[71,6171,6172],{},"1.创建后缀名为.h的头文件",[71,6174,6175],{},"2.创建后缀名为.cpp的源文件",[71,6177,6178],{},"3.在头文件中写函数的定义",[71,6180,6181],{},"4.在源文件中写函数的定义\n示例：",[19,6183,6184],{},"头文件：swap.h",[196,6186,6188],{"className":198,"code":6187,"language":200,"meta":125,"style":125},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[81,6189,6190,6196,6206,6210],{"__ignoreMap":125},[204,6191,6192,6194],{"class":206,"line":207},[204,6193,2035],{"class":210},[204,6195,2038],{"class":319},[204,6197,6198,6200,6202,6204],{"class":206,"line":126},[204,6199,2043],{"class":210},[204,6201,2046],{"class":210},[204,6203,2050],{"class":2049},[204,6205,1377],{"class":214},[204,6207,6208],{"class":206,"line":131},[204,6209,6026],{"class":273},[204,6211,6212,6214,6216,6218,6220,6222,6224,6226,6228],{"class":206,"line":1281},[204,6213,5451],{"class":210},[204,6215,5454],{"class":2049},[204,6217,215],{"class":214},[204,6219,218],{"class":210},[204,6221,1485],{"class":5303},[204,6223,591],{"class":214},[204,6225,218],{"class":210},[204,6227,2919],{"class":5303},[204,6229,2805],{"class":214},[19,6231,6232],{},"源文件：swap.cpp",[196,6234,6236],{"className":198,"code":6235,"language":200,"meta":125,"style":125},"#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",[81,6237,6238,6245,6250,6270,6274,6285,6294,6303,6320,6337],{"__ignoreMap":125},[204,6239,6240,6242],{"class":206,"line":207},[204,6241,2035],{"class":210},[204,6243,6244],{"class":319}," \"swap.h\"\n",[204,6246,6247],{"class":206,"line":126},[204,6248,6249],{"class":273},"\u002F\u002F函数的定义\n",[204,6251,6252,6254,6256,6258,6260,6262,6264,6266,6268],{"class":206,"line":131},[204,6253,5451],{"class":210},[204,6255,5454],{"class":2049},[204,6257,215],{"class":214},[204,6259,218],{"class":210},[204,6261,1485],{"class":5303},[204,6263,591],{"class":214},[204,6265,218],{"class":210},[204,6267,2919],{"class":5303},[204,6269,221],{"class":214},[204,6271,6272],{"class":206,"line":1281},[204,6273,1632],{"class":214},[204,6275,6276,6278,6280,6282],{"class":206,"line":1287},[204,6277,2071],{"class":210},[204,6279,4341],{"class":214},[204,6281,260],{"class":210},[204,6283,6284],{"class":214},"a;\n",[204,6286,6287,6290,6292],{"class":206,"line":1301},[204,6288,6289],{"class":214},"    a",[204,6291,260],{"class":210},[204,6293,6156],{"class":214},[204,6295,6296,6299,6301],{"class":206,"line":1307},[204,6297,6298],{"class":214},"    b",[204,6300,260],{"class":210},[204,6302,4366],{"class":214},[204,6304,6305,6307,6309,6312,6314,6316,6318],{"class":206,"line":1398},[204,6306,1637],{"class":214},[204,6308,1256],{"class":210},[204,6310,6311],{"class":319},"\"a=\"",[204,6313,1256],{"class":210},[204,6315,62],{"class":214},[204,6317,1256],{"class":210},[204,6319,1278],{"class":214},[204,6321,6322,6324,6326,6329,6331,6333,6335],{"class":206,"line":1404},[204,6323,1637],{"class":214},[204,6325,1256],{"class":210},[204,6327,6328],{"class":319},"\"b=\"",[204,6330,1256],{"class":210},[204,6332,476],{"class":214},[204,6334,1256],{"class":210},[204,6336,1278],{"class":214},[204,6338,6339],{"class":206,"line":1416},[204,6340,1651],{"class":214},[5213,6342,6343],{},"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":125,"searchDepth":126,"depth":126,"links":6345},[6346,6347,6348,6349,6350,6351],{"id":5259,"depth":126,"text":5260},{"id":5348,"depth":126,"text":5349},{"id":5431,"depth":126,"text":5432},{"id":5657,"depth":126,"text":5658},{"id":6006,"depth":126,"text":6007},{"id":6163,"depth":126,"text":6164},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5251,"description":125},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6358,"title":6359,"body":6360,"description":6367,"extension":133,"meta":7772,"navigation":135,"path":7773,"seo":7774,"stem":7775,"__hash__":7776},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6361,"toc":7762},[6362,6365,6368,6372,6534,6538,6541,6544,6547,6550,6690,6694,6697,6700,6703,6768,6772,6777,6844,6847,6851,6854,6865,6870,6890,6893,6898,6917,6920,6924,6943,6946,6950,7185,7189,7192,7195,7198,7360,7363,7367,7370,7376,7759],[10,6363,6359],{"id":6364},"_3指针",[19,6366,6367],{},"通过指针保存一个地址，指针就是个地址",[14,6369,6371],{"id":6370},"_31定义指针","3.1定义指针",[196,6373,6375],{"className":198,"code":6374,"language":200,"meta":125,"style":125},"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",[81,6376,6377,6385,6389,6394,6406,6411,6419,6429,6447,6467,6471,6476,6481,6486,6500,6516,6530],{"__ignoreMap":125},[204,6378,6379,6381,6383],{"class":206,"line":207},[204,6380,218],{"class":210},[204,6382,2059],{"class":2049},[204,6384,2062],{"class":214},[204,6386,6387],{"class":206,"line":126},[204,6388,1632],{"class":214},[204,6390,6391],{"class":206,"line":131},[204,6392,6393],{"class":273},"    \u002F\u002F1.定义指针\n",[204,6395,6396,6398,6400,6402,6404],{"class":206,"line":1281},[204,6397,2071],{"class":210},[204,6399,1485],{"class":214},[204,6401,260],{"class":210},[204,6403,659],{"class":263},[204,6405,1377],{"class":214},[204,6407,6408],{"class":206,"line":1287},[204,6409,6410],{"class":273},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[204,6412,6413,6416],{"class":206,"line":1301},[204,6414,6415],{"class":210},"    int*",[204,6417,6418],{"class":214},"p;\n",[204,6420,6421,6424,6427],{"class":206,"line":1307},[204,6422,6423],{"class":214},"    p",[204,6425,6426],{"class":210},"=&",[204,6428,6284],{"class":214},[204,6430,6431,6433,6435,6438,6441,6443,6445],{"class":206,"line":1398},[204,6432,1637],{"class":214},[204,6434,1256],{"class":210},[204,6436,6437],{"class":319},"\"a的地址为：\"",[204,6439,6440],{"class":210},"\u003C\u003C&",[204,6442,62],{"class":214},[204,6444,1256],{"class":210},[204,6446,1278],{"class":214},[204,6448,6449,6451,6453,6456,6458,6460,6462,6464],{"class":206,"line":1404},[204,6450,1637],{"class":214},[204,6452,1256],{"class":210},[204,6454,6455],{"class":319},"\"指针p为：\"",[204,6457,1256],{"class":210},[204,6459,19],{"class":214},[204,6461,1256],{"class":210},[204,6463,1325],{"class":214},[204,6465,6466],{"class":273},"\u002F\u002F指针p表示的就是a的地址\n",[204,6468,6469],{"class":206,"line":1416},[204,6470,2486],{"emptyLinePlaceholder":135},[204,6472,6473],{"class":206,"line":1698},[204,6474,6475],{"class":273},"    \u002F\u002F2.使用指针\n",[204,6477,6478],{"class":206,"line":1703},[204,6479,6480],{"class":273},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[204,6482,6483],{"class":206,"line":1709},[204,6484,6485],{"class":273},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[204,6487,6488,6491,6493,6495,6498],{"class":206,"line":1714},[204,6489,6490],{"class":210},"    *",[204,6492,19],{"class":214},[204,6494,260],{"class":210},[204,6496,6497],{"class":263},"1000",[204,6499,1377],{"class":214},[204,6501,6502,6504,6507,6509,6511,6513],{"class":206,"line":1728},[204,6503,1637],{"class":214},[204,6505,6506],{"class":210},"\u003C\u003C*",[204,6508,19],{"class":214},[204,6510,1256],{"class":210},[204,6512,1325],{"class":214},[204,6514,6515],{"class":273},"\u002F\u002F1000\n",[204,6517,6518,6520,6522,6524,6526,6528],{"class":206,"line":1733},[204,6519,1637],{"class":214},[204,6521,1256],{"class":210},[204,6523,62],{"class":214},[204,6525,1256],{"class":210},[204,6527,1325],{"class":214},[204,6529,6515],{"class":273},[204,6531,6532],{"class":206,"line":1739},[204,6533,1651],{"class":214},[14,6535,6537],{"id":6536},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6539,6540],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6542,6543],{},"在32位操作系统下：占用4个字节空间",[19,6545,6546],{},"在64位操作系统下：占用8个字节空间",[19,6548,6549],{},"上方是不管啥数据类型的",[196,6551,6553],{"className":198,"code":6552,"language":200,"meta":125,"style":125},"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",[81,6554,6555,6563,6567,6572,6584,6589,6594,6599,6612,6634,6660,6686],{"__ignoreMap":125},[204,6556,6557,6559,6561],{"class":206,"line":207},[204,6558,218],{"class":210},[204,6560,2059],{"class":2049},[204,6562,2062],{"class":214},[204,6564,6565],{"class":206,"line":126},[204,6566,1632],{"class":214},[204,6568,6569],{"class":206,"line":131},[204,6570,6571],{"class":273},"    \u002F\u002F指针所占内存空间\n",[204,6573,6574,6576,6578,6580,6582],{"class":206,"line":1281},[204,6575,2071],{"class":210},[204,6577,1485],{"class":214},[204,6579,260],{"class":210},[204,6581,659],{"class":263},[204,6583,1377],{"class":214},[204,6585,6586],{"class":206,"line":1287},[204,6587,6588],{"class":273},"    \u002F\u002Fint *p;\n",[204,6590,6591],{"class":206,"line":1301},[204,6592,6593],{"class":273},"    \u002F\u002Fp=&a;\n",[204,6595,6596],{"class":206,"line":1307},[204,6597,6598],{"class":273},"    \u002F\u002F上述可以写为以下：\n",[204,6600,6601,6603,6606,6608,6610],{"class":206,"line":1398},[204,6602,2071],{"class":210},[204,6604,6605],{"class":210}," *",[204,6607,19],{"class":214},[204,6609,6426],{"class":210},[204,6611,6284],{"class":214},[204,6613,6614,6617,6619,6622,6624,6627,6629,6631],{"class":206,"line":1404},[204,6615,6616],{"class":214},"    cout ",[204,6618,1256],{"class":210},[204,6620,6621],{"class":319},"\"sizeof(int *)\"",[204,6623,1459],{"class":210},[204,6625,6626],{"class":214},"(p)",[204,6628,1256],{"class":210},[204,6630,1325],{"class":214},[204,6632,6633],{"class":273},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[204,6635,6636,6638,6640,6642,6644,6646,6648,6650,6652,6654,6657],{"class":206,"line":1416},[204,6637,6616],{"class":214},[204,6639,1256],{"class":210},[204,6641,6621],{"class":319},[204,6643,1459],{"class":210},[204,6645,215],{"class":214},[204,6647,218],{"class":210},[204,6649,6605],{"class":210},[204,6651,642],{"class":214},[204,6653,1256],{"class":210},[204,6655,6656],{"class":214},"endl",[204,6658,6659],{"class":273},"  \u002F\u002F4字节(32位的话)\n",[204,6661,6662,6664,6666,6669,6671,6673,6675,6677,6679,6681,6683],{"class":206,"line":1698},[204,6663,6616],{"class":214},[204,6665,1256],{"class":210},[204,6667,6668],{"class":319},"\"sizeof(char *)\"",[204,6670,1459],{"class":210},[204,6672,215],{"class":214},[204,6674,311],{"class":210},[204,6676,6605],{"class":210},[204,6678,642],{"class":214},[204,6680,1256],{"class":210},[204,6682,1325],{"class":214},[204,6684,6685],{"class":273}," \u002F\u002F4字节(32位的话)\n",[204,6687,6688],{"class":206,"line":1703},[204,6689,1651],{"class":214},[14,6691,6693],{"id":6692},"_33空指针","3.3空指针",[19,6695,6696],{},"空指针：指针变量指向内存中编号为0的空间",[19,6698,6699],{},"用途：初始化指针变量",[19,6701,6702],{},"注意：空指针指向的内存是不可以访问的",[196,6704,6706],{"className":198,"code":6705,"language":200,"meta":125,"style":125},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[81,6707,6708,6716,6720,6725,6739,6744,6759,6764],{"__ignoreMap":125},[204,6709,6710,6712,6714],{"class":206,"line":207},[204,6711,218],{"class":210},[204,6713,2059],{"class":2049},[204,6715,2062],{"class":214},[204,6717,6718],{"class":206,"line":126},[204,6719,1632],{"class":214},[204,6721,6722],{"class":206,"line":131},[204,6723,6724],{"class":273},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[204,6726,6727,6729,6731,6733,6735,6737],{"class":206,"line":1281},[204,6728,2071],{"class":210},[204,6730,6605],{"class":210},[204,6732,19],{"class":214},[204,6734,260],{"class":210},[204,6736,2478],{"class":263},[204,6738,1377],{"class":214},[204,6740,6741],{"class":206,"line":1287},[204,6742,6743],{"class":273},"    \u002F\u002F2.空指针不能进行访问\n",[204,6745,6746,6748,6750,6752,6754,6756],{"class":206,"line":1301},[204,6747,6490],{"class":210},[204,6749,19],{"class":214},[204,6751,260],{"class":210},[204,6753,524],{"class":263},[204,6755,270],{"class":214},[204,6757,6758],{"class":273},"\u002F\u002F直接报错，压根不能访问\n",[204,6760,6761],{"class":206,"line":1307},[204,6762,6763],{"class":273},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[204,6765,6766],{"class":206,"line":1398},[204,6767,1651],{"class":214},[14,6769,6771],{"id":6770},"_34野指针","3.4野指针",[19,6773,6774],{},[30,6775,6776],{},"指针变量指向非法的内存空间",[196,6778,6780],{"className":198,"code":6779,"language":200,"meta":125,"style":125},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[81,6781,6782,6790,6794,6823,6828,6840],{"__ignoreMap":125},[204,6783,6784,6786,6788],{"class":206,"line":207},[204,6785,218],{"class":210},[204,6787,2059],{"class":2049},[204,6789,2062],{"class":214},[204,6791,6792],{"class":206,"line":126},[204,6793,1632],{"class":214},[204,6795,6796,6798,6800,6802,6804,6806,6808,6810,6812,6815,6818,6820],{"class":206,"line":131},[204,6797,2071],{"class":210},[204,6799,6605],{"class":210},[204,6801,19],{"class":214},[204,6803,260],{"class":210},[204,6805,215],{"class":214},[204,6807,218],{"class":210},[204,6809,6605],{"class":210},[204,6811,642],{"class":214},[204,6813,6814],{"class":210},"0x",[204,6816,6817],{"class":263},"1100",[204,6819,270],{"class":214},[204,6821,6822],{"class":273}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[204,6824,6825],{"class":206,"line":1281},[204,6826,6827],{"class":273},"    \u002F\u002F访问野指针报错\n",[204,6829,6830,6832,6834,6836,6838],{"class":206,"line":1287},[204,6831,1637],{"class":214},[204,6833,6506],{"class":210},[204,6835,19],{"class":214},[204,6837,1256],{"class":210},[204,6839,1278],{"class":214},[204,6841,6842],{"class":206,"line":1301},[204,6843,1651],{"class":214},[19,6845,6846],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6848,6850],{"id":6849},"_35const修饰指针","3.5const修饰指针",[19,6852,6853],{},"三种情况：",[68,6855,6856,6859,6862],{},[71,6857,6858],{},"const修饰指针 常量指针",[71,6860,6861],{},"const修饰常量 指针常量",[71,6863,6864],{},"const即修饰指针，又修饰常量",[161,6866,6867],{},[71,6868,6869],{},"常量指针",[196,6871,6873],{"className":198,"code":6872,"language":200,"meta":125,"style":125},"const int *p=&a;\n",[81,6874,6875],{"__ignoreMap":125},[204,6876,6877,6880,6882,6884,6886,6888],{"class":206,"line":207},[204,6878,6879],{"class":210},"const",[204,6881,2468],{"class":210},[204,6883,6605],{"class":210},[204,6885,19],{"class":214},[204,6887,6426],{"class":210},[204,6889,6284],{"class":214},[19,6891,6892],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[161,6894,6895],{"start":126},[71,6896,6897],{},"指针常量",[196,6899,6901],{"className":198,"code":6900,"language":200,"meta":125,"style":125},"int *const p=&a;\n",[81,6902,6903],{"__ignoreMap":125},[204,6904,6905,6907,6910,6913,6915],{"class":206,"line":207},[204,6906,218],{"class":210},[204,6908,6909],{"class":210}," *const",[204,6911,6912],{"class":214}," p",[204,6914,6426],{"class":210},[204,6916,6284],{"class":214},[19,6918,6919],{},"指针的指向不可以改，指针指向的值可以改",[161,6921,6922],{"start":131},[71,6923,6864],{},[196,6925,6927],{"className":198,"code":6926,"language":200,"meta":125,"style":125},"const int *const p=&a;\n",[81,6928,6929],{"__ignoreMap":125},[204,6930,6931,6933,6935,6937,6939,6941],{"class":206,"line":207},[204,6932,6879],{"class":210},[204,6934,2468],{"class":210},[204,6936,6909],{"class":210},[204,6938,6912],{"class":214},[204,6940,6426],{"class":210},[204,6942,6284],{"class":214},[19,6944,6945],{},"指针的指向和指针指向的值都不可以改变",[14,6947,6949],{"id":6948},"_36指针和数组","3.6指针和数组",[196,6951,6953],{"className":198,"code":6952,"language":200,"meta":125,"style":125},"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",[81,6954,6955,6963,6967,6972,7026,7047,7063,7079,7090,7107,7112,7126,7152,7156,7168,7177,7181],{"__ignoreMap":125},[204,6956,6957,6959,6961],{"class":206,"line":207},[204,6958,218],{"class":210},[204,6960,2059],{"class":2049},[204,6962,2062],{"class":214},[204,6964,6965],{"class":206,"line":126},[204,6966,1632],{"class":214},[204,6968,6969],{"class":206,"line":131},[204,6970,6971],{"class":273},"    \u002F\u002F利用指针访问数组中的元素\n",[204,6973,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020,7022,7024],{"class":206,"line":1281},[204,6975,2071],{"class":210},[204,6977,4048],{"class":214},[204,6979,659],{"class":263},[204,6981,1153],{"class":214},[204,6983,260],{"class":210},[204,6985,1109],{"class":214},[204,6987,431],{"class":263},[204,6989,591],{"class":214},[204,6991,292],{"class":263},[204,6993,591],{"class":214},[204,6995,286],{"class":263},[204,6997,591],{"class":214},[204,6999,506],{"class":263},[204,7001,591],{"class":214},[204,7003,532],{"class":263},[204,7005,591],{"class":214},[204,7007,557],{"class":263},[204,7009,591],{"class":214},[204,7011,582],{"class":263},[204,7013,591],{"class":214},[204,7015,608],{"class":263},[204,7017,591],{"class":214},[204,7019,633],{"class":263},[204,7021,591],{"class":214},[204,7023,659],{"class":263},[204,7025,4081],{"class":214},[204,7027,7028,7030,7032,7035,7037,7039,7041,7043,7045],{"class":206,"line":1287},[204,7029,1637],{"class":214},[204,7031,1256],{"class":210},[204,7033,7034],{"class":319},"\"数组的第一个元素为：\"",[204,7036,1256],{"class":210},[204,7038,3992],{"class":214},[204,7040,405],{"class":263},[204,7042,1153],{"class":214},[204,7044,1256],{"class":210},[204,7046,1278],{"class":214},[204,7048,7049,7051,7053,7055,7057,7060],{"class":206,"line":1301},[204,7050,2071],{"class":210},[204,7052,6605],{"class":210},[204,7054,19],{"class":214},[204,7056,260],{"class":210},[204,7058,7059],{"class":214},"arr;",[204,7061,7062],{"class":273},"\u002F\u002F注意数才要加取地址符号&\n",[204,7064,7065,7067,7069,7071,7073,7075,7077],{"class":206,"line":1307},[204,7066,1637],{"class":214},[204,7068,1256],{"class":210},[204,7070,7034],{"class":319},[204,7072,6506],{"class":210},[204,7074,19],{"class":214},[204,7076,1256],{"class":210},[204,7078,1278],{"class":214},[204,7080,7081,7083,7085,7087],{"class":206,"line":1398},[204,7082,6423],{"class":214},[204,7084,2378],{"class":210},[204,7086,270],{"class":214},[204,7088,7089],{"class":273}," \u002F\u002F让指针向后偏移4个字节\n",[204,7091,7092,7094,7096,7099,7101,7103,7105],{"class":206,"line":1404},[204,7093,1637],{"class":214},[204,7095,1256],{"class":210},[204,7097,7098],{"class":319},"\"数组的第二个元素为：\"",[204,7100,6506],{"class":210},[204,7102,19],{"class":214},[204,7104,1256],{"class":210},[204,7106,1278],{"class":214},[204,7108,7109],{"class":206,"line":1416},[204,7110,7111],{"class":273},"    \u002F\u002F利用指针遍历数组\n",[204,7113,7114,7116,7118,7121,7123],{"class":206,"line":1698},[204,7115,2071],{"class":210},[204,7117,6605],{"class":210},[204,7119,7120],{"class":214},"p2",[204,7122,260],{"class":210},[204,7124,7125],{"class":214},"arr;\n",[204,7127,7128,7130,7132,7134,7136,7138,7140,7142,7144,7146,7148,7150],{"class":206,"line":1703},[204,7129,3287],{"class":210},[204,7131,1744],{"class":214},[204,7133,218],{"class":210},[204,7135,3118],{"class":214},[204,7137,260],{"class":210},[204,7139,405],{"class":263},[204,7141,3125],{"class":214},[204,7143,1123],{"class":210},[204,7145,659],{"class":263},[204,7147,3125],{"class":214},[204,7149,2378],{"class":210},[204,7151,221],{"class":214},[204,7153,7154],{"class":206,"line":1709},[204,7155,2116],{"class":214},[204,7157,7158,7160,7162,7164,7166],{"class":206,"line":1714},[204,7159,3537],{"class":214},[204,7161,6506],{"class":210},[204,7163,7120],{"class":214},[204,7165,1256],{"class":210},[204,7167,1278],{"class":214},[204,7169,7170,7173,7175],{"class":206,"line":1728},[204,7171,7172],{"class":214},"        p2",[204,7174,2378],{"class":210},[204,7176,1377],{"class":214},[204,7178,7179],{"class":206,"line":1733},[204,7180,2273],{"class":214},[204,7182,7183],{"class":206,"line":1739},[204,7184,1651],{"class":214},[14,7186,7188],{"id":7187},"_37指针和函数","3.7指针和函数",[19,7190,7191],{},"利用指针做函数参数，可以修改实参的值",[19,7193,7194],{},"值传递：只改变形参，不改变实参",[19,7196,7197],{},"地址传递：",[196,7199,7201],{"className":198,"code":7200,"language":200,"meta":125,"style":125},"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",[81,7202,7203,7228,7232,7244,7255,7265,7269,7277,7281,7293,7305,7310,7326,7341,7356],{"__ignoreMap":125},[204,7204,7205,7207,7209,7211,7213,7215,7218,7220,7222,7224,7226],{"class":206,"line":207},[204,7206,5451],{"class":210},[204,7208,5454],{"class":2049},[204,7210,215],{"class":214},[204,7212,218],{"class":210},[204,7214,6605],{"class":210},[204,7216,7217],{"class":5303},"p1",[204,7219,591],{"class":214},[204,7221,218],{"class":210},[204,7223,6605],{"class":210},[204,7225,7120],{"class":5303},[204,7227,221],{"class":214},[204,7229,7230],{"class":206,"line":126},[204,7231,1632],{"class":214},[204,7233,7234,7236,7238,7241],{"class":206,"line":131},[204,7235,2071],{"class":210},[204,7237,4341],{"class":214},[204,7239,7240],{"class":210},"=*",[204,7242,7243],{"class":214},"p1;\n",[204,7245,7246,7248,7250,7252],{"class":206,"line":1281},[204,7247,6490],{"class":210},[204,7249,7217],{"class":214},[204,7251,7240],{"class":210},[204,7253,7254],{"class":214},"p2;\n",[204,7256,7257,7259,7261,7263],{"class":206,"line":1287},[204,7258,6490],{"class":210},[204,7260,7120],{"class":214},[204,7262,260],{"class":210},[204,7264,4366],{"class":214},[204,7266,7267],{"class":206,"line":1301},[204,7268,1651],{"class":214},[204,7270,7271,7273,7275],{"class":206,"line":1307},[204,7272,218],{"class":210},[204,7274,2059],{"class":2049},[204,7276,2062],{"class":214},[204,7278,7279],{"class":206,"line":1398},[204,7280,1632],{"class":214},[204,7282,7283,7285,7287,7289,7291],{"class":206,"line":1404},[204,7284,2071],{"class":210},[204,7286,1485],{"class":214},[204,7288,260],{"class":210},[204,7290,659],{"class":263},[204,7292,1377],{"class":214},[204,7294,7295,7297,7299,7301,7303],{"class":206,"line":1416},[204,7296,2071],{"class":210},[204,7298,2919],{"class":214},[204,7300,260],{"class":210},[204,7302,913],{"class":263},[204,7304,1377],{"class":214},[204,7306,7307],{"class":206,"line":1698},[204,7308,7309],{"class":273},"    \u002F\u002F地址传递\n",[204,7311,7312,7314,7316,7318,7321,7323],{"class":206,"line":1703},[204,7313,5648],{"class":2049},[204,7315,215],{"class":214},[204,7317,566],{"class":210},[204,7319,7320],{"class":214},"a,",[204,7322,566],{"class":210},[204,7324,7325],{"class":214},"b);\n",[204,7327,7328,7330,7332,7334,7336,7338],{"class":206,"line":1709},[204,7329,1637],{"class":214},[204,7331,1256],{"class":210},[204,7333,62],{"class":214},[204,7335,1256],{"class":210},[204,7337,1325],{"class":214},[204,7339,7340],{"class":273},"\u002F\u002F20\n",[204,7342,7343,7345,7347,7349,7351,7353],{"class":206,"line":1714},[204,7344,1637],{"class":214},[204,7346,1256],{"class":210},[204,7348,476],{"class":214},[204,7350,1256],{"class":210},[204,7352,1325],{"class":214},[204,7354,7355],{"class":273},"\u002F\u002F10\n",[204,7357,7358],{"class":206,"line":1728},[204,7359,1651],{"class":214},[19,7361,7362],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7364,7366],{"id":7365},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7368,7369],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7371,7372,7373,7375],{},"例如数组：int arr",[204,7374,659],{},"={4,3,6,9,1,2,10,8,7,5}",[196,7377,7379],{"className":198,"code":7378,"language":200,"meta":125,"style":125},"#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",[81,7380,7381,7387,7397,7421,7425,7456,7460,7494,7498,7516,7520,7531,7546,7561,7565,7569,7573,7577,7581,7589,7593,7598,7652,7664,7676,7681,7689,7693,7698,7723,7727,7742,7751,7755],{"__ignoreMap":125},[204,7382,7383,7385],{"class":206,"line":207},[204,7384,2035],{"class":210},[204,7386,2038],{"class":319},[204,7388,7389,7391,7393,7395],{"class":206,"line":126},[204,7390,2043],{"class":210},[204,7392,2046],{"class":210},[204,7394,2050],{"class":2049},[204,7396,1377],{"class":214},[204,7398,7399,7401,7404,7406,7408,7410,7412,7414,7416,7419],{"class":206,"line":131},[204,7400,5451],{"class":210},[204,7402,7403],{"class":2049}," bubbleSort",[204,7405,215],{"class":214},[204,7407,218],{"class":210},[204,7409,6605],{"class":210},[204,7411,19],{"class":5303},[204,7413,591],{"class":214},[204,7415,218],{"class":210},[204,7417,7418],{"class":5303}," len",[204,7420,221],{"class":214},[204,7422,7423],{"class":206,"line":1281},[204,7424,1632],{"class":214},[204,7426,7427,7429,7431,7433,7435,7437,7439,7441,7443,7446,7448,7450,7452,7454],{"class":206,"line":1287},[204,7428,3287],{"class":210},[204,7430,215],{"class":214},[204,7432,218],{"class":210},[204,7434,3118],{"class":214},[204,7436,260],{"class":210},[204,7438,405],{"class":263},[204,7440,3125],{"class":214},[204,7442,1123],{"class":210},[204,7444,7445],{"class":214},"len",[204,7447,745],{"class":210},[204,7449,431],{"class":263},[204,7451,3125],{"class":214},[204,7453,2378],{"class":210},[204,7455,221],{"class":214},[204,7457,7458],{"class":206,"line":1301},[204,7459,2116],{"class":214},[204,7461,7462,7464,7466,7468,7470,7472,7474,7476,7478,7480,7482,7484,7486,7488,7490,7492],{"class":206,"line":1307},[204,7463,3489],{"class":210},[204,7465,215],{"class":214},[204,7467,218],{"class":210},[204,7469,3496],{"class":214},[204,7471,260],{"class":210},[204,7473,405],{"class":263},[204,7475,3503],{"class":214},[204,7477,1123],{"class":210},[204,7479,7445],{"class":214},[204,7481,745],{"class":210},[204,7483,654],{"class":214},[204,7485,745],{"class":210},[204,7487,431],{"class":263},[204,7489,3503],{"class":214},[204,7491,2378],{"class":210},[204,7493,221],{"class":214},[204,7495,7496],{"class":206,"line":1398},[204,7497,2596],{"class":214},[204,7499,7500,7502,7505,7507,7510,7512,7514],{"class":206,"line":1404},[204,7501,4728],{"class":210},[204,7503,7504],{"class":214},"(p[j]",[204,7506,1173],{"class":210},[204,7508,7509],{"class":214},"p[j",[204,7511,694],{"class":210},[204,7513,431],{"class":263},[204,7515,4743],{"class":214},[204,7517,7518],{"class":206,"line":1416},[204,7519,4748],{"class":214},[204,7521,7522,7524,7526,7528],{"class":206,"line":1698},[204,7523,4753],{"class":210},[204,7525,4341],{"class":214},[204,7527,260],{"class":210},[204,7529,7530],{"class":214},"p[j];\n",[204,7532,7533,7536,7538,7540,7542,7544],{"class":206,"line":1703},[204,7534,7535],{"class":214},"                p[j]",[204,7537,260],{"class":210},[204,7539,7509],{"class":214},[204,7541,694],{"class":210},[204,7543,431],{"class":263},[204,7545,4776],{"class":214},[204,7547,7548,7551,7553,7555,7557,7559],{"class":206,"line":1709},[204,7549,7550],{"class":214},"                p[j",[204,7552,694],{"class":210},[204,7554,431],{"class":263},[204,7556,1153],{"class":214},[204,7558,260],{"class":210},[204,7560,4366],{"class":214},[204,7562,7563],{"class":206,"line":1714},[204,7564,4796],{"class":214},[204,7566,7567],{"class":206,"line":1728},[204,7568,2615],{"class":214},[204,7570,7571],{"class":206,"line":1733},[204,7572,2273],{"class":214},[204,7574,7575],{"class":206,"line":1739},[204,7576,1651],{"class":214},[204,7578,7579],{"class":206,"line":1760},[204,7580,2486],{"emptyLinePlaceholder":135},[204,7582,7583,7585,7587],{"class":206,"line":1765},[204,7584,218],{"class":210},[204,7586,2059],{"class":2049},[204,7588,2062],{"class":214},[204,7590,7591],{"class":206,"line":1779},[204,7592,1632],{"class":214},[204,7594,7595],{"class":206,"line":1784},[204,7596,7597],{"class":273},"    \u002F\u002F 1.创建数组\n",[204,7599,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650],{"class":206,"line":1813},[204,7601,2071],{"class":210},[204,7603,4048],{"class":214},[204,7605,659],{"class":263},[204,7607,1153],{"class":214},[204,7609,260],{"class":210},[204,7611,1109],{"class":214},[204,7613,506],{"class":263},[204,7615,591],{"class":214},[204,7617,286],{"class":263},[204,7619,591],{"class":214},[204,7621,557],{"class":263},[204,7623,591],{"class":214},[204,7625,633],{"class":263},[204,7627,591],{"class":214},[204,7629,431],{"class":263},[204,7631,591],{"class":214},[204,7633,292],{"class":263},[204,7635,591],{"class":214},[204,7637,659],{"class":263},[204,7639,591],{"class":214},[204,7641,608],{"class":263},[204,7643,591],{"class":214},[204,7645,582],{"class":263},[204,7647,591],{"class":214},[204,7649,532],{"class":263},[204,7651,4081],{"class":214},[204,7653,7654,7656,7658,7660,7662],{"class":206,"line":1818},[204,7655,2071],{"class":210},[204,7657,7418],{"class":214},[204,7659,260],{"class":210},[204,7661,659],{"class":263},[204,7663,1377],{"class":214},[204,7665,7666,7668,7670,7672,7674],{"class":206,"line":1835},[204,7667,2071],{"class":210},[204,7669,6605],{"class":210},[204,7671,19],{"class":214},[204,7673,260],{"class":210},[204,7675,7125],{"class":214},[204,7677,7678],{"class":206,"line":1840},[204,7679,7680],{"class":273},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[204,7682,7683,7686],{"class":206,"line":1845},[204,7684,7685],{"class":2049},"    bubbleSort",[204,7687,7688],{"class":214},"(p,len);\n",[204,7690,7691],{"class":206,"line":1850},[204,7692,2486],{"emptyLinePlaceholder":135},[204,7694,7695],{"class":206,"line":1864},[204,7696,7697],{"class":273},"    \u002F\u002F 3.打印排序后的数组\n",[204,7699,7700,7702,7704,7706,7708,7710,7712,7714,7716,7719,7721],{"class":206,"line":1869},[204,7701,3287],{"class":210},[204,7703,1744],{"class":214},[204,7705,218],{"class":210},[204,7707,3118],{"class":214},[204,7709,260],{"class":210},[204,7711,405],{"class":263},[204,7713,3300],{"class":214},[204,7715,1123],{"class":210},[204,7717,7718],{"class":214},"len; i",[204,7720,2378],{"class":210},[204,7722,221],{"class":214},[204,7724,7725],{"class":206,"line":2663},[204,7726,2116],{"class":214},[204,7728,7729,7731,7733,7735,7737,7740],{"class":206,"line":2677},[204,7730,3537],{"class":214},[204,7732,6506],{"class":210},[204,7734,19],{"class":214},[204,7736,1256],{"class":210},[204,7738,7739],{"class":319},"\"\"",[204,7741,1377],{"class":214},[204,7743,7744,7747,7749],{"class":206,"line":2685},[204,7745,7746],{"class":214},"        p",[204,7748,2378],{"class":210},[204,7750,1377],{"class":214},[204,7752,7753],{"class":206,"line":2690},[204,7754,2273],{"class":214},[204,7756,7757],{"class":206,"line":2696},[204,7758,1651],{"class":214},[5213,7760,7761],{},"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":125,"searchDepth":126,"depth":126,"links":7763},[7764,7765,7766,7767,7768,7769,7770,7771],{"id":6370,"depth":126,"text":6371},{"id":6536,"depth":126,"text":6537},{"id":6692,"depth":126,"text":6693},{"id":6770,"depth":126,"text":6771},{"id":6849,"depth":126,"text":6850},{"id":6948,"depth":126,"text":6949},{"id":7187,"depth":126,"text":7188},{"id":7365,"depth":126,"text":7366},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6359,"description":6367},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7778,"title":7779,"body":7780,"description":7787,"extension":133,"meta":10761,"navigation":135,"path":10762,"seo":10763,"stem":10764,"__hash__":10765},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7781,"toc":10752},[7782,7785,7788,7792,7795,7798,7809,8147,8150,8154,8157,8164,8419,8423,8426,8429,8584,8588,8591,8594,8800,8804,8807,9110,9113,9121,9125,9128,9279,9281,9292,9349,9353,9358,10015,10023,10026,10120,10123,10743,10749],[10,7783,7779],{"id":7784},"_4结构体",[19,7786,7787],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7789,7791],{"id":7790},"_41结构体定义与使用","4.1结构体定义与使用",[19,7793,7794],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7796,7797],{},"通过结构体创建变量的方式：",[68,7799,7800,7803,7806],{},[71,7801,7802],{},"struct 结构体名 变量名",[71,7804,7805],{},"struct 结构体名 变量名={成员1值，成员2值...}",[71,7807,7808],{},"定义结构体时顺便创建变量",[196,7810,7812],{"className":198,"code":7811,"language":200,"meta":125,"style":125},"#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",[81,7813,7814,7820,7830,7837,7842,7850,7854,7859,7863,7868,7873,7878,7885,7890,7897,7901,7908,7912,7916,7920,7924,7928,7932,7938,7942,7948,7956,7964,7968,7973,7978,7989,7994,8006,8017,8028,8033,8057,8062,8068,8095,8100,8106,8118,8130,8142],{"__ignoreMap":125},[204,7815,7816,7818],{"class":206,"line":207},[204,7817,2035],{"class":210},[204,7819,2038],{"class":319},[204,7821,7822,7824,7826,7828],{"class":206,"line":126},[204,7823,2043],{"class":210},[204,7825,2046],{"class":210},[204,7827,2050],{"class":2049},[204,7829,1377],{"class":214},[204,7831,7832,7834],{"class":206,"line":131},[204,7833,2035],{"class":210},[204,7835,7836],{"class":319},"\u003Cstring>\n",[204,7838,7839],{"class":206,"line":1281},[204,7840,7841],{"class":273},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[204,7843,7844,7847],{"class":206,"line":1287},[204,7845,7846],{"class":210},"struct",[204,7848,7849],{"class":2049}," Student\n",[204,7851,7852],{"class":206,"line":1301},[204,7853,1632],{"class":214},[204,7855,7856],{"class":206,"line":1307},[204,7857,7858],{"class":273},"    \u002F\u002F成员列表\n",[204,7860,7861],{"class":206,"line":1398},[204,7862,2486],{"emptyLinePlaceholder":135},[204,7864,7865],{"class":206,"line":1404},[204,7866,7867],{"class":273},"    \u002F\u002F姓名\n",[204,7869,7870],{"class":206,"line":1416},[204,7871,7872],{"class":214},"    string name;\n",[204,7874,7875],{"class":206,"line":1698},[204,7876,7877],{"class":273},"    \u002F\u002F年龄\n",[204,7879,7880,7882],{"class":206,"line":1703},[204,7881,2071],{"class":210},[204,7883,7884],{"class":214}," age;\n",[204,7886,7887],{"class":206,"line":1709},[204,7888,7889],{"class":273},"    \u002F\u002F分数\n",[204,7891,7892,7894],{"class":206,"line":1714},[204,7893,2071],{"class":210},[204,7895,7896],{"class":214}," score;\n",[204,7898,7899],{"class":206,"line":1728},[204,7900,4081],{"class":214},[204,7902,7903,7905],{"class":206,"line":1733},[204,7904,7846],{"class":210},[204,7906,7907],{"class":2049}," School\n",[204,7909,7910],{"class":206,"line":1739},[204,7911,1632],{"class":214},[204,7913,7914],{"class":206,"line":1760},[204,7915,7858],{"class":273},[204,7917,7918],{"class":206,"line":1765},[204,7919,2486],{"emptyLinePlaceholder":135},[204,7921,7922],{"class":206,"line":1779},[204,7923,7867],{"class":273},[204,7925,7926],{"class":206,"line":1784},[204,7927,7872],{"class":214},[204,7929,7930],{"class":206,"line":1813},[204,7931,7877],{"class":273},[204,7933,7934,7936],{"class":206,"line":1818},[204,7935,2071],{"class":210},[204,7937,7884],{"class":214},[204,7939,7940],{"class":206,"line":1835},[204,7941,7889],{"class":273},[204,7943,7944,7946],{"class":206,"line":1840},[204,7945,2071],{"class":210},[204,7947,7896],{"class":214},[204,7949,7950,7953],{"class":206,"line":1845},[204,7951,7952],{"class":214},"} s3;",[204,7954,7955],{"class":273}," \u002F\u002F创建结构体时就创建了变量\n",[204,7957,7958,7960,7962],{"class":206,"line":1850},[204,7959,218],{"class":210},[204,7961,2059],{"class":2049},[204,7963,2062],{"class":214},[204,7965,7966],{"class":206,"line":1864},[204,7967,1632],{"class":214},[204,7969,7970],{"class":206,"line":1869},[204,7971,7972],{"class":273},"    \u002F\u002F2.通过学生类型创建具体学生\n",[204,7974,7975],{"class":206,"line":2663},[204,7976,7977],{"class":273},"    \u002F\u002F2.1 struct Student s1;\n",[204,7979,7980,7983,7986],{"class":206,"line":2677},[204,7981,7982],{"class":210},"    struct",[204,7984,7985],{"class":2049}," Student",[204,7987,7988],{"class":214}," s1;\n",[204,7990,7991],{"class":206,"line":2685},[204,7992,7993],{"class":273},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[204,7995,7996,7999,8001,8004],{"class":206,"line":2690},[204,7997,7998],{"class":214},"    s1.name",[204,8000,260],{"class":210},[204,8002,8003],{"class":319},"\"张三\"",[204,8005,1377],{"class":214},[204,8007,8008,8011,8013,8015],{"class":206,"line":2696},[204,8009,8010],{"class":214},"    s1.age",[204,8012,260],{"class":210},[204,8014,863],{"class":263},[204,8016,1377],{"class":214},[204,8018,8019,8022,8024,8026],{"class":206,"line":2702},[204,8020,8021],{"class":214},"    s1.score",[204,8023,260],{"class":210},[204,8025,467],{"class":263},[204,8027,1377],{"class":214},[204,8029,8030],{"class":206,"line":2707},[204,8031,8032],{"class":273},"    \u002F\u002F输出结果\n",[204,8034,8036,8038,8040,8043,8045,8048,8050,8053,8055],{"class":206,"line":8035},37,[204,8037,1637],{"class":214},[204,8039,1256],{"class":210},[204,8041,8042],{"class":214},"s1.name",[204,8044,1256],{"class":210},[204,8046,8047],{"class":214},"s1.age",[204,8049,1256],{"class":210},[204,8051,8052],{"class":214},"s1.score",[204,8054,1256],{"class":210},[204,8056,1278],{"class":214},[204,8058,8060],{"class":206,"line":8059},38,[204,8061,2486],{"emptyLinePlaceholder":135},[204,8063,8065],{"class":206,"line":8064},39,[204,8066,8067],{"class":273},"    \u002F\u002F2.2 struct Student s2={...}\n",[204,8069,8071,8073,8075,8078,8080,8082,8085,8087,8089,8091,8093],{"class":206,"line":8070},40,[204,8072,7982],{"class":210},[204,8074,7985],{"class":2049},[204,8076,8077],{"class":214}," s2",[204,8079,260],{"class":210},[204,8081,1109],{"class":214},[204,8083,8084],{"class":319},"\"王五\"",[204,8086,591],{"class":214},[204,8088,863],{"class":263},[204,8090,591],{"class":214},[204,8092,467],{"class":263},[204,8094,4081],{"class":214},[204,8096,8098],{"class":206,"line":8097},41,[204,8099,2486],{"emptyLinePlaceholder":135},[204,8101,8103],{"class":206,"line":8102},42,[204,8104,8105],{"class":273},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[204,8107,8109,8112,8114,8116],{"class":206,"line":8108},43,[204,8110,8111],{"class":214},"    s3.name",[204,8113,260],{"class":210},[204,8115,3764],{"class":319},[204,8117,1377],{"class":214},[204,8119,8121,8124,8126,8128],{"class":206,"line":8120},44,[204,8122,8123],{"class":214},"    s3.age",[204,8125,260],{"class":210},[204,8127,863],{"class":263},[204,8129,1377],{"class":214},[204,8131,8133,8136,8138,8140],{"class":206,"line":8132},45,[204,8134,8135],{"class":214},"    s3.score",[204,8137,260],{"class":210},[204,8139,913],{"class":263},[204,8141,1377],{"class":214},[204,8143,8145],{"class":206,"line":8144},46,[204,8146,1651],{"class":214},[19,8148,8149],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8151,8153],{"id":8152},"_42结构体数组","4.2结构体数组",[19,8155,8156],{},"将自定义的结构体放入到数组中方便维护",[19,8158,8159,8160,8163],{},"语法：struct 结构体名 数组名",[204,8161,8162],{},"元素个数","={ {}，{},...{} };",[196,8165,8167],{"className":198,"code":8166,"language":200,"meta":125,"style":125},"#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",[81,8168,8169,8175,8185,8191,8196,8202,8206,8210,8216,8222,8226,8230,8238,8242,8247,8262,8266,8282,8298,8302,8307,8323,8338,8353,8358,8384,8388,8411,8415],{"__ignoreMap":125},[204,8170,8171,8173],{"class":206,"line":207},[204,8172,2035],{"class":210},[204,8174,2038],{"class":319},[204,8176,8177,8179,8181,8183],{"class":206,"line":126},[204,8178,2043],{"class":210},[204,8180,2046],{"class":210},[204,8182,2050],{"class":2049},[204,8184,1377],{"class":214},[204,8186,8187,8189],{"class":206,"line":131},[204,8188,2035],{"class":210},[204,8190,7836],{"class":319},[204,8192,8193],{"class":206,"line":1281},[204,8194,8195],{"class":273},"\u002F\u002F1.定义结构体\n",[204,8197,8198,8200],{"class":206,"line":1287},[204,8199,7846],{"class":210},[204,8201,7849],{"class":2049},[204,8203,8204],{"class":206,"line":1301},[204,8205,1632],{"class":214},[204,8207,8208],{"class":206,"line":1307},[204,8209,7872],{"class":214},[204,8211,8212,8214],{"class":206,"line":1398},[204,8213,2071],{"class":210},[204,8215,7884],{"class":214},[204,8217,8218,8220],{"class":206,"line":1404},[204,8219,2071],{"class":210},[204,8221,7896],{"class":214},[204,8223,8224],{"class":206,"line":1416},[204,8225,2486],{"emptyLinePlaceholder":135},[204,8227,8228],{"class":206,"line":1698},[204,8229,4081],{"class":214},[204,8231,8232,8234,8236],{"class":206,"line":1703},[204,8233,218],{"class":210},[204,8235,2059],{"class":2049},[204,8237,2062],{"class":214},[204,8239,8240],{"class":206,"line":1709},[204,8241,1632],{"class":214},[204,8243,8244],{"class":206,"line":1714},[204,8245,8246],{"class":273},"    \u002F\u002F2.创建结构体数组\n",[204,8248,8249,8251,8253,8256,8258,8260],{"class":206,"line":1728},[204,8250,7982],{"class":210},[204,8252,7985],{"class":2049},[204,8254,8255],{"class":214}," stuArray[",[204,8257,292],{"class":263},[204,8259,1153],{"class":214},[204,8261,4994],{"class":210},[204,8263,8264],{"class":206,"line":1733},[204,8265,2116],{"class":214},[204,8267,8268,8270,8272,8274,8276,8278,8280],{"class":206,"line":1739},[204,8269,5003],{"class":214},[204,8271,8003],{"class":319},[204,8273,591],{"class":214},[204,8275,863],{"class":263},[204,8277,591],{"class":214},[204,8279,524],{"class":263},[204,8281,5016],{"class":214},[204,8283,8284,8286,8288,8290,8292,8294,8296],{"class":206,"line":1760},[204,8285,5003],{"class":214},[204,8287,3764],{"class":319},[204,8289,591],{"class":214},[204,8291,788],{"class":263},[204,8293,591],{"class":214},[204,8295,788],{"class":263},[204,8297,1651],{"class":214},[204,8299,8300],{"class":206,"line":1765},[204,8301,2273],{"class":214},[204,8303,8304],{"class":206,"line":1779},[204,8305,8306],{"class":273},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[204,8308,8309,8312,8314,8317,8319,8321],{"class":206,"line":1784},[204,8310,8311],{"class":214},"    stuArray[",[204,8313,431],{"class":263},[204,8315,8316],{"class":214},"].name",[204,8318,260],{"class":210},[204,8320,3787],{"class":319},[204,8322,1377],{"class":214},[204,8324,8325,8327,8329,8332,8334,8336],{"class":206,"line":1813},[204,8326,8311],{"class":214},[204,8328,431],{"class":263},[204,8330,8331],{"class":214},"].age",[204,8333,260],{"class":210},[204,8335,292],{"class":263},[204,8337,1377],{"class":214},[204,8339,8340,8342,8344,8347,8349,8351],{"class":206,"line":1818},[204,8341,8311],{"class":214},[204,8343,431],{"class":263},[204,8345,8346],{"class":214},"].score",[204,8348,260],{"class":210},[204,8350,292],{"class":263},[204,8352,1377],{"class":214},[204,8354,8355],{"class":206,"line":1835},[204,8356,8357],{"class":273},"    \u002F\u002F4.遍历结构体数组\n",[204,8359,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8380,8382],{"class":206,"line":1840},[204,8361,3287],{"class":210},[204,8363,1744],{"class":214},[204,8365,218],{"class":210},[204,8367,3118],{"class":214},[204,8369,260],{"class":210},[204,8371,405],{"class":263},[204,8373,3125],{"class":214},[204,8375,1123],{"class":210},[204,8377,292],{"class":263},[204,8379,3125],{"class":214},[204,8381,2378],{"class":210},[204,8383,221],{"class":214},[204,8385,8386],{"class":206,"line":1845},[204,8387,2116],{"class":214},[204,8389,8390,8392,8394,8397,8399,8402,8404,8407,8409],{"class":206,"line":1850},[204,8391,3537],{"class":214},[204,8393,1256],{"class":210},[204,8395,8396],{"class":214},"stuArray[i].name",[204,8398,1256],{"class":210},[204,8400,8401],{"class":214},"stuArray[i].age",[204,8403,1256],{"class":210},[204,8405,8406],{"class":214},"stuArray[i].score",[204,8408,1256],{"class":210},[204,8410,1278],{"class":214},[204,8412,8413],{"class":206,"line":1864},[204,8414,2273],{"class":214},[204,8416,8417],{"class":206,"line":1869},[204,8418,1651],{"class":214},[14,8420,8422],{"id":8421},"_43结构体指针","4.3结构体指针",[19,8424,8425],{},"作用：通过指针访问结构体中的成员",[19,8427,8428],{},"利用操作符->可以通过结构体指针访问结构体属性",[196,8430,8432],{"className":198,"code":8431,"language":200,"meta":125,"style":125},"#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",[81,8433,8434,8440,8450,8456,8460,8466,8470,8474,8480,8486,8490,8498,8502,8507,8532,8537,8552,8557,8580],{"__ignoreMap":125},[204,8435,8436,8438],{"class":206,"line":207},[204,8437,2035],{"class":210},[204,8439,2038],{"class":319},[204,8441,8442,8444,8446,8448],{"class":206,"line":126},[204,8443,2043],{"class":210},[204,8445,2046],{"class":210},[204,8447,2050],{"class":2049},[204,8449,1377],{"class":214},[204,8451,8452,8454],{"class":206,"line":131},[204,8453,2035],{"class":210},[204,8455,7836],{"class":319},[204,8457,8458],{"class":206,"line":1281},[204,8459,8195],{"class":273},[204,8461,8462,8464],{"class":206,"line":1287},[204,8463,7846],{"class":210},[204,8465,7849],{"class":2049},[204,8467,8468],{"class":206,"line":1301},[204,8469,1632],{"class":214},[204,8471,8472],{"class":206,"line":1307},[204,8473,7872],{"class":214},[204,8475,8476,8478],{"class":206,"line":1398},[204,8477,2071],{"class":210},[204,8479,7884],{"class":214},[204,8481,8482,8484],{"class":206,"line":1404},[204,8483,2071],{"class":210},[204,8485,7896],{"class":214},[204,8487,8488],{"class":206,"line":1416},[204,8489,4081],{"class":214},[204,8491,8492,8494,8496],{"class":206,"line":1698},[204,8493,218],{"class":210},[204,8495,2059],{"class":2049},[204,8497,2062],{"class":214},[204,8499,8500],{"class":206,"line":1703},[204,8501,1632],{"class":214},[204,8503,8504],{"class":206,"line":1709},[204,8505,8506],{"class":273},"    \u002F\u002F创建学生结构体变量\n",[204,8508,8509,8511,8513,8516,8518,8520,8522,8524,8526,8528,8530],{"class":206,"line":1714},[204,8510,7982],{"class":210},[204,8512,7985],{"class":2049},[204,8514,8515],{"class":214}," s",[204,8517,260],{"class":210},[204,8519,1109],{"class":214},[204,8521,8003],{"class":319},[204,8523,591],{"class":214},[204,8525,863],{"class":263},[204,8527,591],{"class":214},[204,8529,1808],{"class":263},[204,8531,4081],{"class":214},[204,8533,8534],{"class":206,"line":1728},[204,8535,8536],{"class":273},"    \u002F\u002F通过指针指向结构体变量\n",[204,8538,8539,8541,8543,8545,8547,8549],{"class":206,"line":1733},[204,8540,7982],{"class":210},[204,8542,7985],{"class":2049},[204,8544,6605],{"class":210},[204,8546,19],{"class":214},[204,8548,6426],{"class":210},[204,8550,8551],{"class":214},"s\n",[204,8553,8554],{"class":206,"line":1739},[204,8555,8556],{"class":273},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[204,8558,8559,8561,8563,8566,8568,8571,8573,8576,8578],{"class":206,"line":1760},[204,8560,1637],{"class":214},[204,8562,1256],{"class":210},[204,8564,8565],{"class":214},"p->name",[204,8567,1256],{"class":210},[204,8569,8570],{"class":214},"p->age",[204,8572,1256],{"class":210},[204,8574,8575],{"class":214},"p->score",[204,8577,1256],{"class":210},[204,8579,1278],{"class":214},[204,8581,8582],{"class":206,"line":1765},[204,8583,1651],{"class":214},[14,8585,8587],{"id":8586},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8589,8590],{},"作用：结构体中的成员可以是另一个结构体",[19,8592,8593],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[196,8595,8597],{"className":198,"code":8596,"language":200,"meta":125,"style":125},"#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",[81,8598,8599,8605,8615,8621,8626,8634,8638,8642,8648,8654,8658,8663,8670,8674,8681,8685,8691,8696,8700,8708,8712,8717,8722,8727,8738,8750,8761,8774,8785,8796],{"__ignoreMap":125},[204,8600,8601,8603],{"class":206,"line":207},[204,8602,2035],{"class":210},[204,8604,2038],{"class":319},[204,8606,8607,8609,8611,8613],{"class":206,"line":126},[204,8608,2043],{"class":210},[204,8610,2046],{"class":210},[204,8612,2050],{"class":2049},[204,8614,1377],{"class":214},[204,8616,8617,8619],{"class":206,"line":131},[204,8618,2035],{"class":210},[204,8620,7836],{"class":319},[204,8622,8623],{"class":206,"line":1281},[204,8624,8625],{"class":273},"\u002F\u002F定义学生结构体\n",[204,8627,8628,8630,8632],{"class":206,"line":1287},[204,8629,7846],{"class":210},[204,8631,7985],{"class":2049},[204,8633,2760],{"class":214},[204,8635,8636],{"class":206,"line":1301},[204,8637,1632],{"class":214},[204,8639,8640],{"class":206,"line":1307},[204,8641,7872],{"class":214},[204,8643,8644,8646],{"class":206,"line":1398},[204,8645,2071],{"class":210},[204,8647,7884],{"class":214},[204,8649,8650,8652],{"class":206,"line":1404},[204,8651,2071],{"class":210},[204,8653,7896],{"class":214},[204,8655,8656],{"class":206,"line":1416},[204,8657,1651],{"class":214},[204,8659,8660],{"class":206,"line":1698},[204,8661,8662],{"class":273},"\u002F\u002F定义老师结构体\n",[204,8664,8665,8667],{"class":206,"line":1703},[204,8666,7846],{"class":210},[204,8668,8669],{"class":2049}," Teacher\n",[204,8671,8672],{"class":206,"line":1709},[204,8673,1632],{"class":214},[204,8675,8676,8678],{"class":206,"line":1714},[204,8677,2071],{"class":210},[204,8679,8680],{"class":214}," id;\n",[204,8682,8683],{"class":206,"line":1728},[204,8684,7872],{"class":214},[204,8686,8687,8689],{"class":206,"line":1733},[204,8688,2071],{"class":210},[204,8690,7884],{"class":214},[204,8692,8693],{"class":206,"line":1739},[204,8694,8695],{"class":214},"    Student stu;\n",[204,8697,8698],{"class":206,"line":1760},[204,8699,1651],{"class":214},[204,8701,8702,8704,8706],{"class":206,"line":1765},[204,8703,218],{"class":210},[204,8705,2059],{"class":2049},[204,8707,6065],{"class":214},[204,8709,8710],{"class":206,"line":1779},[204,8711,1632],{"class":214},[204,8713,8714],{"class":206,"line":1784},[204,8715,8716],{"class":273},"    \u002F\u002F结构体嵌套结构体\n",[204,8718,8719],{"class":206,"line":1813},[204,8720,8721],{"class":273},"    \u002F\u002F创建老师\n",[204,8723,8724],{"class":206,"line":1818},[204,8725,8726],{"class":214},"    Teacher t;\n",[204,8728,8729,8732,8734,8736],{"class":206,"line":1835},[204,8730,8731],{"class":214},"    t.id",[204,8733,260],{"class":210},[204,8735,524],{"class":263},[204,8737,1377],{"class":214},[204,8739,8740,8743,8745,8748],{"class":206,"line":1840},[204,8741,8742],{"class":214},"    t.name",[204,8744,260],{"class":210},[204,8746,8747],{"class":319},"\"老王\"",[204,8749,1377],{"class":214},[204,8751,8752,8755,8757,8759],{"class":206,"line":1845},[204,8753,8754],{"class":214},"    t.age",[204,8756,260],{"class":210},[204,8758,863],{"class":263},[204,8760,1377],{"class":214},[204,8762,8763,8766,8768,8771],{"class":206,"line":1850},[204,8764,8765],{"class":214},"    t.stu.name",[204,8767,260],{"class":210},[204,8769,8770],{"class":319},"\"小王\"",[204,8772,8773],{"class":214},"；\n",[204,8775,8776,8779,8781,8783],{"class":206,"line":1864},[204,8777,8778],{"class":214},"    t.stu.age",[204,8780,260],{"class":210},[204,8782,913],{"class":263},[204,8784,1377],{"class":214},[204,8786,8787,8790,8792,8794],{"class":206,"line":1869},[204,8788,8789],{"class":214},"    t.stu.score",[204,8791,260],{"class":210},[204,8793,557],{"class":263},[204,8795,1377],{"class":214},[204,8797,8798],{"class":206,"line":2663},[204,8799,1651],{"class":214},[14,8801,8803],{"id":8802},"_45结构体做函数参数","4.5结构体做函数参数",[19,8805,8806],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[196,8808,8810],{"className":198,"code":8809,"language":200,"meta":125,"style":125},"#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",[81,8811,8812,8818,8828,8834,8840,8844,8848,8854,8860,8864,8869,8874,8891,8895,8928,8932,8937,8956,8960,8991,8995,9003,9007,9016,9028,9040,9052,9065,9073,9086,9098,9106],{"__ignoreMap":125},[204,8813,8814,8816],{"class":206,"line":207},[204,8815,2035],{"class":210},[204,8817,2038],{"class":319},[204,8819,8820,8822,8824,8826],{"class":206,"line":126},[204,8821,2043],{"class":210},[204,8823,2046],{"class":210},[204,8825,2050],{"class":2049},[204,8827,1377],{"class":214},[204,8829,8830,8832],{"class":206,"line":131},[204,8831,2035],{"class":210},[204,8833,7836],{"class":319},[204,8835,8836,8838],{"class":206,"line":1281},[204,8837,7846],{"class":210},[204,8839,7849],{"class":2049},[204,8841,8842],{"class":206,"line":1287},[204,8843,1632],{"class":214},[204,8845,8846],{"class":206,"line":1301},[204,8847,7872],{"class":214},[204,8849,8850,8852],{"class":206,"line":1307},[204,8851,2071],{"class":210},[204,8853,7884],{"class":214},[204,8855,8856,8858],{"class":206,"line":1398},[204,8857,2071],{"class":210},[204,8859,7896],{"class":214},[204,8861,8862],{"class":206,"line":1404},[204,8863,4081],{"class":214},[204,8865,8866],{"class":206,"line":1416},[204,8867,8868],{"class":273},"\u002F\u002F打印学生信息的函数\n",[204,8870,8871],{"class":206,"line":1698},[204,8872,8873],{"class":273},"\u002F\u002F值传递\n",[204,8875,8876,8878,8881,8883,8885,8887,8889],{"class":206,"line":1703},[204,8877,5451],{"class":210},[204,8879,8880],{"class":2049}," printStudent1",[204,8882,215],{"class":214},[204,8884,7846],{"class":210},[204,8886,7985],{"class":2049},[204,8888,8515],{"class":5303},[204,8890,221],{"class":214},[204,8892,8893],{"class":206,"line":1709},[204,8894,1632],{"class":214},[204,8896,8897,8899,8901,8904,8906,8909,8911,8914,8916,8918,8920,8923,8925],{"class":206,"line":1714},[204,8898,6616],{"class":214},[204,8900,1256],{"class":210},[204,8902,8903],{"class":214}," s.name ",[204,8905,1256],{"class":210},[204,8907,8908],{"class":319}," \" \"",[204,8910,1531],{"class":210},[204,8912,8913],{"class":214}," s.age ",[204,8915,1256],{"class":210},[204,8917,8908],{"class":319},[204,8919,1531],{"class":210},[204,8921,8922],{"class":214}," s.score ",[204,8924,1256],{"class":210},[204,8926,8927],{"class":214}," endl;\n",[204,8929,8930],{"class":206,"line":1728},[204,8931,1651],{"class":214},[204,8933,8934],{"class":206,"line":1733},[204,8935,8936],{"class":273},"\u002F\u002F地址传递\n",[204,8938,8939,8941,8944,8946,8948,8950,8952,8954],{"class":206,"line":1739},[204,8940,5451],{"class":210},[204,8942,8943],{"class":2049}," printStudent2",[204,8945,215],{"class":214},[204,8947,7846],{"class":210},[204,8949,7985],{"class":2049},[204,8951,6605],{"class":210},[204,8953,908],{"class":5303},[204,8955,221],{"class":214},[204,8957,8958],{"class":206,"line":1760},[204,8959,1632],{"class":214},[204,8961,8962,8964,8966,8969,8971,8973,8975,8978,8980,8982,8984,8987,8989],{"class":206,"line":1765},[204,8963,6616],{"class":214},[204,8965,1256],{"class":210},[204,8967,8968],{"class":214}," s->name ",[204,8970,1256],{"class":210},[204,8972,8908],{"class":319},[204,8974,1531],{"class":210},[204,8976,8977],{"class":214}," s->age ",[204,8979,1256],{"class":210},[204,8981,8908],{"class":319},[204,8983,1531],{"class":210},[204,8985,8986],{"class":214}," s->score ",[204,8988,1256],{"class":210},[204,8990,8927],{"class":214},[204,8992,8993],{"class":206,"line":1779},[204,8994,1651],{"class":214},[204,8996,8997,8999,9001],{"class":206,"line":1784},[204,8998,218],{"class":210},[204,9000,2059],{"class":2049},[204,9002,2062],{"class":214},[204,9004,9005],{"class":206,"line":1813},[204,9006,1632],{"class":214},[204,9008,9009,9011,9013],{"class":206,"line":1818},[204,9010,7982],{"class":210},[204,9012,7985],{"class":2049},[204,9014,9015],{"class":214}," s;\n",[204,9017,9018,9021,9023,9026],{"class":206,"line":1835},[204,9019,9020],{"class":214},"    s.name ",[204,9022,260],{"class":210},[204,9024,9025],{"class":319}," \"张三\"",[204,9027,1377],{"class":214},[204,9029,9030,9033,9035,9038],{"class":206,"line":1840},[204,9031,9032],{"class":214},"    s.age ",[204,9034,260],{"class":210},[204,9036,9037],{"class":263}," 20",[204,9039,1377],{"class":214},[204,9041,9042,9045,9047,9050],{"class":206,"line":1845},[204,9043,9044],{"class":214},"    s.score ",[204,9046,260],{"class":210},[204,9048,9049],{"class":263}," 85",[204,9051,1377],{"class":214},[204,9053,9054,9056,9058,9061,9063],{"class":206,"line":1850},[204,9055,1637],{"class":214},[204,9057,1256],{"class":210},[204,9059,9060],{"class":319},"\"值传递:\"",[204,9062,1256],{"class":210},[204,9064,1278],{"class":214},[204,9066,9067,9070],{"class":206,"line":1864},[204,9068,9069],{"class":2049},"    printStudent1",[204,9071,9072],{"class":214},"(s);\n",[204,9074,9075,9077,9079,9082,9084],{"class":206,"line":1869},[204,9076,1637],{"class":214},[204,9078,1256],{"class":210},[204,9080,9081],{"class":319},"\"地址传递:\"",[204,9083,1256],{"class":210},[204,9085,1278],{"class":214},[204,9087,9088,9091,9093,9095],{"class":206,"line":2663},[204,9089,9090],{"class":2049},"    printStudent2",[204,9092,215],{"class":214},[204,9094,566],{"class":210},[204,9096,9097],{"class":214},"s); \n",[204,9099,9100,9102,9104],{"class":206,"line":2677},[204,9101,4176],{"class":210},[204,9103,4179],{"class":263},[204,9105,1377],{"class":214},[204,9107,9108],{"class":206,"line":2685},[204,9109,1651],{"class":214},[19,9111,9112],{},"注意：",[68,9114,9115,9118],{},[71,9116,9117],{},"1.先定义结构体，不要在函数中写结构体的定义",[71,9119,9120],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9122,9124],{"id":9123},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9126,9127],{},"用const防止误操作",[196,9129,9131],{"className":198,"code":9130,"language":200,"meta":125,"style":125},"#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",[81,9132,9133,9139,9149,9155,9160,9164,9168,9174,9180,9184,9200,9204,9227,9231,9239,9243,9264,9271,9275],{"__ignoreMap":125},[204,9134,9135,9137],{"class":206,"line":207},[204,9136,2035],{"class":210},[204,9138,2038],{"class":319},[204,9140,9141,9143,9145,9147],{"class":206,"line":126},[204,9142,2043],{"class":210},[204,9144,2046],{"class":210},[204,9146,2050],{"class":2049},[204,9148,1377],{"class":214},[204,9150,9151,9153],{"class":206,"line":131},[204,9152,2035],{"class":210},[204,9154,7836],{"class":319},[204,9156,9157],{"class":206,"line":1281},[204,9158,9159],{"class":214},"sctuct Student\n",[204,9161,9162],{"class":206,"line":1287},[204,9163,1632],{"class":214},[204,9165,9166],{"class":206,"line":1301},[204,9167,7872],{"class":214},[204,9169,9170,9172],{"class":206,"line":1307},[204,9171,2071],{"class":210},[204,9173,7884],{"class":214},[204,9175,9176,9178],{"class":206,"line":1398},[204,9177,2071],{"class":210},[204,9179,7896],{"class":214},[204,9181,9182],{"class":206,"line":1404},[204,9183,4081],{"class":214},[204,9185,9186,9188,9191,9193,9196,9198],{"class":206,"line":1416},[204,9187,5451],{"class":210},[204,9189,9190],{"class":2049}," printStudents",[204,9192,215],{"class":214},[204,9194,9195],{"class":2049},"student",[204,9197,8515],{"class":5303},[204,9199,221],{"class":214},[204,9201,9202],{"class":206,"line":1698},[204,9203,1632],{"class":214},[204,9205,9206,9208,9210,9213,9215,9218,9220,9223,9225],{"class":206,"line":1703},[204,9207,1637],{"class":214},[204,9209,1256],{"class":210},[204,9211,9212],{"class":214},"s.name",[204,9214,1256],{"class":210},[204,9216,9217],{"class":214},"s.age",[204,9219,1256],{"class":210},[204,9221,9222],{"class":214},"s.score",[204,9224,1256],{"class":210},[204,9226,1278],{"class":214},[204,9228,9229],{"class":206,"line":1709},[204,9230,1651],{"class":214},[204,9232,9233,9235,9237],{"class":206,"line":1714},[204,9234,218],{"class":210},[204,9236,2059],{"class":2049},[204,9238,6065],{"class":214},[204,9240,9241],{"class":206,"line":1728},[204,9242,1632],{"class":214},[204,9244,9245,9248,9250,9252,9254,9256,9258,9260,9262],{"class":206,"line":1733},[204,9246,9247],{"class":214},"    Student s",[204,9249,260],{"class":210},[204,9251,1109],{"class":214},[204,9253,8003],{"class":319},[204,9255,591],{"class":214},[204,9257,863],{"class":263},[204,9259,591],{"class":214},[204,9261,863],{"class":263},[204,9263,4081],{"class":214},[204,9265,9266,9269],{"class":206,"line":1739},[204,9267,9268],{"class":2049},"    printStudent",[204,9270,9072],{"class":214},[204,9272,9273],{"class":206,"line":1760},[204,9274,2486],{"emptyLinePlaceholder":135},[204,9276,9277],{"class":206,"line":1765},[204,9278,1651],{"class":214},[19,9280,9112],{},[68,9282,9283,9286,9289],{},[71,9284,9285],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[71,9287,9288],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[71,9290,9291],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[196,9293,9295],{"className":198,"code":9294,"language":200,"meta":125,"style":125},"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",[81,9296,9297,9316,9320,9325,9345],{"__ignoreMap":125},[204,9298,9299,9301,9303,9305,9307,9310,9312,9314],{"class":206,"line":207},[204,9300,5451],{"class":210},[204,9302,9190],{"class":2049},[204,9304,215],{"class":214},[204,9306,6879],{"class":210},[204,9308,9309],{"class":2049}," student",[204,9311,6605],{"class":210},[204,9313,908],{"class":5303},[204,9315,221],{"class":214},[204,9317,9318],{"class":206,"line":126},[204,9319,1632],{"class":214},[204,9321,9322],{"class":206,"line":131},[204,9323,9324],{"class":273},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[204,9326,9327,9329,9331,9333,9335,9337,9339,9341,9343],{"class":206,"line":1281},[204,9328,1637],{"class":214},[204,9330,1256],{"class":210},[204,9332,9212],{"class":214},[204,9334,1256],{"class":210},[204,9336,9217],{"class":214},[204,9338,1256],{"class":210},[204,9340,9222],{"class":214},[204,9342,1256],{"class":210},[204,9344,1278],{"class":214},[204,9346,9347],{"class":206,"line":1287},[204,9348,1651],{"class":214},[14,9350,9352],{"id":9351},"_47案例","4.7案例",[161,9354,9355],{},[71,9356,9357],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[196,9359,9361],{"className":198,"code":9360,"language":200,"meta":125,"style":125},"#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",[81,9362,9363,9369,9379,9385,9392,9396,9402,9406,9411,9417,9423,9427,9431,9437,9441,9446,9451,9464,9468,9473,9499,9503,9515,9542,9546,9558,9568,9572,9577,9606,9610,9622,9631,9658,9669,9679,9683,9687,9691,9696,9720,9724,9748,9752,9771,9797,9801,9826,9849,9873,9878,9883,9888,9897,9902,9908,9929,9935,9949,9955,9982,9991,9997,10005,10010],{"__ignoreMap":125},[204,9364,9365,9367],{"class":206,"line":207},[204,9366,2035],{"class":210},[204,9368,2038],{"class":319},[204,9370,9371,9373,9375,9377],{"class":206,"line":126},[204,9372,2043],{"class":210},[204,9374,2046],{"class":210},[204,9376,2050],{"class":2049},[204,9378,1377],{"class":214},[204,9380,9381,9383],{"class":206,"line":131},[204,9382,2035],{"class":210},[204,9384,7836],{"class":319},[204,9386,9387,9389],{"class":206,"line":1281},[204,9388,2035],{"class":210},[204,9390,9391],{"class":319},"\u003Cctime>\n",[204,9393,9394],{"class":206,"line":1287},[204,9395,8625],{"class":273},[204,9397,9398,9400],{"class":206,"line":1301},[204,9399,7846],{"class":210},[204,9401,7849],{"class":2049},[204,9403,9404],{"class":206,"line":1307},[204,9405,1632],{"class":214},[204,9407,9408],{"class":206,"line":1398},[204,9409,9410],{"class":214},"    string sName;\n",[204,9412,9413,9415],{"class":206,"line":1404},[204,9414,2071],{"class":210},[204,9416,7884],{"class":214},[204,9418,9419,9421],{"class":206,"line":1416},[204,9420,2071],{"class":210},[204,9422,7896],{"class":214},[204,9424,9425],{"class":206,"line":1698},[204,9426,4081],{"class":214},[204,9428,9429],{"class":206,"line":1703},[204,9430,8662],{"class":273},[204,9432,9433,9435],{"class":206,"line":1709},[204,9434,7846],{"class":210},[204,9436,8669],{"class":2049},[204,9438,9439],{"class":206,"line":1714},[204,9440,1632],{"class":214},[204,9442,9443],{"class":206,"line":1728},[204,9444,9445],{"class":214},"    string tName;\n",[204,9447,9448],{"class":206,"line":1733},[204,9449,9450],{"class":273},"    \u002F\u002F学生数组\n",[204,9452,9453,9455,9457,9460,9462],{"class":206,"line":1739},[204,9454,7982],{"class":210},[204,9456,7985],{"class":2049},[204,9458,9459],{"class":214}," sArray[",[204,9461,532],{"class":263},[204,9463,4776],{"class":214},[204,9465,9466],{"class":206,"line":1760},[204,9467,4081],{"class":214},[204,9469,9470],{"class":206,"line":1765},[204,9471,9472],{"class":273},"\u002F\u002F给老师和学生赋值的函数\n",[204,9474,9475,9477,9480,9482,9484,9487,9490,9493,9495,9497],{"class":206,"line":1779},[204,9476,5451],{"class":210},[204,9478,9479],{"class":2049}," allocateSpace",[204,9481,215],{"class":214},[204,9483,7846],{"class":210},[204,9485,9486],{"class":2049}," Teacher",[204,9488,9489],{"class":5303}," tArray",[204,9491,9492],{"class":214},"[],",[204,9494,218],{"class":210},[204,9496,7418],{"class":5303},[204,9498,221],{"class":214},[204,9500,9501],{"class":206,"line":1784},[204,9502,1632],{"class":214},[204,9504,9505,9508,9510,9513],{"class":206,"line":1813},[204,9506,9507],{"class":214},"    string nameSeed",[204,9509,260],{"class":210},[204,9511,9512],{"class":319},"\"ABCDE\"",[204,9514,1377],{"class":214},[204,9516,9517,9519,9521,9523,9526,9528,9530,9533,9535,9538,9540],{"class":206,"line":1818},[204,9518,3287],{"class":210},[204,9520,1744],{"class":214},[204,9522,218],{"class":210},[204,9524,9525],{"class":214}," i ",[204,9527,260],{"class":210},[204,9529,4179],{"class":263},[204,9531,9532],{"class":214},"; i ",[204,9534,1123],{"class":210},[204,9536,9537],{"class":214}," len; i",[204,9539,2378],{"class":210},[204,9541,221],{"class":214},[204,9543,9544],{"class":206,"line":1835},[204,9545,2116],{"class":214},[204,9547,9548,9551,9553,9556],{"class":206,"line":1840},[204,9549,9550],{"class":214},"        tArray[i].tName ",[204,9552,260],{"class":210},[204,9554,9555],{"class":319}," \"Teacher_\"",[204,9557,1377],{"class":214},[204,9559,9560,9562,9565],{"class":206,"line":1845},[204,9561,9550],{"class":214},[204,9563,9564],{"class":210},"+=",[204,9566,9567],{"class":214},"nameSeed[i];\n",[204,9569,9570],{"class":206,"line":1850},[204,9571,2486],{"emptyLinePlaceholder":135},[204,9573,9574],{"class":206,"line":1864},[204,9575,9576],{"class":273},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[204,9578,9579,9581,9583,9585,9588,9590,9592,9595,9597,9599,9602,9604],{"class":206,"line":1869},[204,9580,3489],{"class":210},[204,9582,1744],{"class":214},[204,9584,218],{"class":210},[204,9586,9587],{"class":214}," j ",[204,9589,260],{"class":210},[204,9591,4179],{"class":263},[204,9593,9594],{"class":214},"; j ",[204,9596,1123],{"class":210},[204,9598,2234],{"class":263},[204,9600,9601],{"class":214},"; j",[204,9603,2378],{"class":210},[204,9605,221],{"class":214},[204,9607,9608],{"class":206,"line":2663},[204,9609,2596],{"class":214},[204,9611,9612,9615,9617,9620],{"class":206,"line":2677},[204,9613,9614],{"class":214},"            tArray[i].sArray[j].sName ",[204,9616,260],{"class":210},[204,9618,9619],{"class":319}," \"Student_\"",[204,9621,1377],{"class":214},[204,9623,9624,9626,9628],{"class":206,"line":2685},[204,9625,9614],{"class":214},[204,9627,9564],{"class":210},[204,9629,9630],{"class":214}," nameSeed[j];\n",[204,9632,9633,9636,9639,9641,9643,9645,9647,9649,9651,9653,9655],{"class":206,"line":2690},[204,9634,9635],{"class":210},"            int",[204,9637,9638],{"class":214}," random",[204,9640,260],{"class":210},[204,9642,2510],{"class":2049},[204,9644,2513],{"class":214},[204,9646,541],{"class":210},[204,9648,1120],{"class":263},[204,9650,694],{"class":210},[204,9652,614],{"class":263},[204,9654,270],{"class":214},[204,9656,9657],{"class":273},"\u002F\u002F40~99\n",[204,9659,9660,9663,9665,9667],{"class":206,"line":2696},[204,9661,9662],{"class":214},"            tArray[i].sArray[j].age ",[204,9664,260],{"class":210},[204,9666,9037],{"class":263},[204,9668,1377],{"class":214},[204,9670,9671,9674,9676],{"class":206,"line":2702},[204,9672,9673],{"class":214},"            tArray[i].sArray[j].score ",[204,9675,260],{"class":210},[204,9677,9678],{"class":214}," random;\n",[204,9680,9681],{"class":206,"line":2707},[204,9682,2615],{"class":214},[204,9684,9685],{"class":206,"line":8035},[204,9686,2273],{"class":214},[204,9688,9689],{"class":206,"line":8059},[204,9690,1651],{"class":214},[204,9692,9693],{"class":206,"line":8064},[204,9694,9695],{"class":273},"\u002F\u002F打印所有信息的函数\n",[204,9697,9698,9700,9703,9705,9707,9709,9711,9714,9716,9718],{"class":206,"line":8070},[204,9699,5451],{"class":210},[204,9701,9702],{"class":2049}," printInfo",[204,9704,215],{"class":214},[204,9706,7846],{"class":210},[204,9708,9486],{"class":2049},[204,9710,9489],{"class":5303},[204,9712,9713],{"class":214},"[], ",[204,9715,218],{"class":210},[204,9717,7418],{"class":5303},[204,9719,221],{"class":214},[204,9721,9722],{"class":206,"line":8097},[204,9723,1632],{"class":214},[204,9725,9726,9728,9730,9732,9734,9736,9738,9740,9742,9744,9746],{"class":206,"line":8102},[204,9727,3287],{"class":210},[204,9729,1744],{"class":214},[204,9731,218],{"class":210},[204,9733,9525],{"class":214},[204,9735,260],{"class":210},[204,9737,4179],{"class":263},[204,9739,9532],{"class":214},[204,9741,1123],{"class":210},[204,9743,9537],{"class":214},[204,9745,2378],{"class":210},[204,9747,221],{"class":214},[204,9749,9750],{"class":206,"line":8108},[204,9751,2116],{"class":214},[204,9753,9754,9757,9759,9762,9764,9767,9769],{"class":206,"line":8120},[204,9755,9756],{"class":214},"        cout ",[204,9758,1256],{"class":210},[204,9760,9761],{"class":319}," \"Teacher: \"",[204,9763,1531],{"class":210},[204,9765,9766],{"class":214}," tArray[i].tName ",[204,9768,1256],{"class":210},[204,9770,8927],{"class":214},[204,9772,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795],{"class":206,"line":8132},[204,9774,3489],{"class":210},[204,9776,1744],{"class":214},[204,9778,218],{"class":210},[204,9780,9587],{"class":214},[204,9782,260],{"class":210},[204,9784,4179],{"class":263},[204,9786,9594],{"class":214},[204,9788,1123],{"class":210},[204,9790,2234],{"class":263},[204,9792,9601],{"class":214},[204,9794,2378],{"class":210},[204,9796,221],{"class":214},[204,9798,9799],{"class":206,"line":8144},[204,9800,2596],{"class":214},[204,9802,9804,9807,9809,9812,9814,9817,9819,9822,9824],{"class":206,"line":9803},47,[204,9805,9806],{"class":214},"            cout ",[204,9808,1256],{"class":210},[204,9810,9811],{"class":319}," \"",[204,9813,1317],{"class":263},[204,9815,9816],{"class":319},"Student: \"",[204,9818,1531],{"class":210},[204,9820,9821],{"class":214}," tArray[i].sArray[j].sName",[204,9823,1256],{"class":210},[204,9825,1278],{"class":214},[204,9827,9829,9831,9833,9835,9837,9840,9842,9845,9847],{"class":206,"line":9828},48,[204,9830,9806],{"class":214},[204,9832,1256],{"class":210},[204,9834,9811],{"class":319},[204,9836,1317],{"class":263},[204,9838,9839],{"class":319},"Age: \"",[204,9841,1531],{"class":210},[204,9843,9844],{"class":214}," tArray[i].sArray[j].age ",[204,9846,1256],{"class":210},[204,9848,8927],{"class":214},[204,9850,9852,9854,9856,9858,9860,9863,9865,9868,9870],{"class":206,"line":9851},49,[204,9853,9806],{"class":214},[204,9855,1256],{"class":210},[204,9857,9811],{"class":319},[204,9859,1317],{"class":263},[204,9861,9862],{"class":319},"Score: \"",[204,9864,1531],{"class":210},[204,9866,9867],{"class":214}," tArray[i].sArray[j].score ",[204,9869,1256],{"class":210},[204,9871,9872],{"class":214}," endl;   \n",[204,9874,9876],{"class":206,"line":9875},50,[204,9877,2615],{"class":214},[204,9879,9881],{"class":206,"line":9880},51,[204,9882,2273],{"class":214},[204,9884,9886],{"class":206,"line":9885},52,[204,9887,1651],{"class":214},[204,9889,9891,9893,9895],{"class":206,"line":9890},53,[204,9892,218],{"class":210},[204,9894,2059],{"class":2049},[204,9896,2062],{"class":214},[204,9898,9900],{"class":206,"line":9899},54,[204,9901,1632],{"class":214},[204,9903,9905],{"class":206,"line":9904},55,[204,9906,9907],{"class":273},"    \u002F\u002F随机数种子\n",[204,9909,9911,9913,9915,9917,9919,9921,9923,9925,9927],{"class":206,"line":9910},56,[204,9912,2459],{"class":2049},[204,9914,2462],{"class":214},[204,9916,2465],{"class":210},[204,9918,2468],{"class":210},[204,9920,642],{"class":214},[204,9922,2473],{"class":2049},[204,9924,215],{"class":214},[204,9926,2478],{"class":263},[204,9928,2481],{"class":214},[204,9930,9932],{"class":206,"line":9931},57,[204,9933,9934],{"class":273},"    \u002F\u002F1.创建3名老师的数组\n",[204,9936,9938,9940,9942,9945,9947],{"class":206,"line":9937},58,[204,9939,7982],{"class":210},[204,9941,9486],{"class":2049},[204,9943,9944],{"class":214}," tArray[",[204,9946,286],{"class":263},[204,9948,4776],{"class":214},[204,9950,9952],{"class":206,"line":9951},59,[204,9953,9954],{"class":273},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[204,9956,9958,9960,9963,9965,9968,9971,9973,9975,9978,9980],{"class":206,"line":9957},60,[204,9959,2071],{"class":210},[204,9961,9962],{"class":214}," len ",[204,9964,260],{"class":210},[204,9966,9967],{"class":210}," sizeof",[204,9969,9970],{"class":214},"(tArray) ",[204,9972,797],{"class":210},[204,9974,9967],{"class":210},[204,9976,9977],{"class":214},"(tArray[",[204,9979,405],{"class":263},[204,9981,3942],{"class":214},[204,9983,9985,9988],{"class":206,"line":9984},61,[204,9986,9987],{"class":2049},"    allocateSpace",[204,9989,9990],{"class":214},"(tArray, len);\n",[204,9992,9994],{"class":206,"line":9993},62,[204,9995,9996],{"class":273},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[204,9998,10000,10003],{"class":206,"line":9999},63,[204,10001,10002],{"class":2049},"    printInfo",[204,10004,9990],{"class":214},[204,10006,10008],{"class":206,"line":10007},64,[204,10009,2486],{"emptyLinePlaceholder":135},[204,10011,10013],{"class":206,"line":10012},65,[204,10014,1651],{"class":214},[161,10016,10017],{"start":126},[71,10018,10019,10022],{},[30,10020,10021],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10024,10025],{},"五名英雄信息如下：",[196,10027,10031],{"className":10028,"code":10029,"language":10030,"meta":125,"style":125},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[81,10032,10033,10051,10068,10085,10102],{"__ignoreMap":125},[204,10034,10035,10037,10040,10042,10044,10046,10049],{"class":206,"line":207},[204,10036,5003],{"class":214},[204,10038,10039],{"class":319},"\"刘备\"",[204,10041,591],{"class":214},[204,10043,988],{"class":263},[204,10045,591],{"class":214},[204,10047,10048],{"class":319},"\"男\"",[204,10050,5016],{"class":214},[204,10052,10053,10055,10058,10060,10062,10064,10066],{"class":206,"line":126},[204,10054,5003],{"class":214},[204,10056,10057],{"class":319},"\"关羽\"",[204,10059,591],{"class":214},[204,10061,963],{"class":263},[204,10063,591],{"class":214},[204,10065,10048],{"class":319},[204,10067,5016],{"class":214},[204,10069,10070,10072,10075,10077,10079,10081,10083],{"class":206,"line":131},[204,10071,5003],{"class":214},[204,10073,10074],{"class":319},"\"张飞\"",[204,10076,591],{"class":214},[204,10078,913],{"class":263},[204,10080,591],{"class":214},[204,10082,10048],{"class":319},[204,10084,5016],{"class":214},[204,10086,10087,10089,10092,10094,10096,10098,10100],{"class":206,"line":1281},[204,10088,5003],{"class":214},[204,10090,10091],{"class":319},"\"赵云\"",[204,10093,591],{"class":214},[204,10095,938],{"class":263},[204,10097,591],{"class":214},[204,10099,10048],{"class":319},[204,10101,5016],{"class":214},[204,10103,10104,10106,10109,10111,10113,10115,10118],{"class":206,"line":1287},[204,10105,5003],{"class":214},[204,10107,10108],{"class":319},"\"貂蝉\"",[204,10110,591],{"class":214},[204,10112,888],{"class":263},[204,10114,591],{"class":214},[204,10116,10117],{"class":319},"\"女\"",[204,10119,5016],{"class":214},[19,10121,10122],{},"代码：",[196,10124,10126],{"className":198,"code":10125,"language":200,"meta":125,"style":125},"#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",[81,10127,10128,10134,10144,10150,10157,10161,10165,10171,10176,10180,10185,10208,10212,10237,10241,10274,10279,10308,10313,10328,10354,10374,10379,10384,10388,10392,10397,10419,10423,10447,10451,10513,10517,10521,10529,10533,10538,10549,10553,10569,10585,10601,10617,10633,10637,10657,10679,10684,10697,10704,10709,10715,10720,10733,10739],{"__ignoreMap":125},[204,10129,10130,10132],{"class":206,"line":207},[204,10131,2035],{"class":210},[204,10133,2038],{"class":319},[204,10135,10136,10138,10140,10142],{"class":206,"line":126},[204,10137,2043],{"class":210},[204,10139,2046],{"class":210},[204,10141,2050],{"class":2049},[204,10143,1377],{"class":214},[204,10145,10146,10148],{"class":206,"line":131},[204,10147,2035],{"class":210},[204,10149,7836],{"class":319},[204,10151,10152,10154],{"class":206,"line":1281},[204,10153,7846],{"class":210},[204,10155,10156],{"class":2049}," Sanguo\n",[204,10158,10159],{"class":206,"line":1287},[204,10160,1632],{"class":214},[204,10162,10163],{"class":206,"line":1301},[204,10164,7872],{"class":214},[204,10166,10167,10169],{"class":206,"line":1307},[204,10168,2071],{"class":210},[204,10170,7884],{"class":214},[204,10172,10173],{"class":206,"line":1398},[204,10174,10175],{"class":214},"    string gender;\n",[204,10177,10178],{"class":206,"line":1404},[204,10179,4081],{"class":214},[204,10181,10182],{"class":206,"line":1416},[204,10183,10184],{"class":273},"\u002F\u002F定义排序函数\n",[204,10186,10187,10189,10191,10193,10196,10198,10200,10202,10204,10206],{"class":206,"line":1698},[204,10188,5451],{"class":210},[204,10190,7403],{"class":2049},[204,10192,215],{"class":214},[204,10194,10195],{"class":2049},"Sanguo",[204,10197,6605],{"class":210},[204,10199,908],{"class":5303},[204,10201,591],{"class":214},[204,10203,218],{"class":210},[204,10205,7418],{"class":5303},[204,10207,221],{"class":214},[204,10209,10210],{"class":206,"line":1703},[204,10211,1632],{"class":214},[204,10213,10214,10216,10218,10220,10222,10224,10226,10228,10230,10233,10235],{"class":206,"line":1709},[204,10215,3287],{"class":210},[204,10217,215],{"class":214},[204,10219,218],{"class":210},[204,10221,3118],{"class":214},[204,10223,260],{"class":210},[204,10225,405],{"class":263},[204,10227,3125],{"class":214},[204,10229,1123],{"class":210},[204,10231,10232],{"class":214},"len;i",[204,10234,2378],{"class":210},[204,10236,221],{"class":214},[204,10238,10239],{"class":206,"line":1714},[204,10240,2116],{"class":214},[204,10242,10243,10246,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272],{"class":206,"line":1728},[204,10244,10245],{"class":210},"     for",[204,10247,1744],{"class":214},[204,10249,218],{"class":210},[204,10251,3496],{"class":214},[204,10253,260],{"class":210},[204,10255,405],{"class":263},[204,10257,3503],{"class":214},[204,10259,1123],{"class":210},[204,10261,7445],{"class":214},[204,10263,745],{"class":210},[204,10265,431],{"class":263},[204,10267,745],{"class":210},[204,10269,3636],{"class":214},[204,10271,2378],{"class":210},[204,10273,221],{"class":214},[204,10275,10276],{"class":206,"line":1733},[204,10277,10278],{"class":214},"     {\n",[204,10280,10281,10284,10287,10289,10292,10294,10297,10299,10301,10303,10305],{"class":206,"line":1739},[204,10282,10283],{"class":210},"         if",[204,10285,10286],{"class":214}," ((s",[204,10288,694],{"class":210},[204,10290,10291],{"class":214},"j)->age ",[204,10293,1173],{"class":210},[204,10295,10296],{"class":214}," (s",[204,10298,694],{"class":210},[204,10300,680],{"class":214},[204,10302,694],{"class":210},[204,10304,431],{"class":263},[204,10306,10307],{"class":214},")->age)\n",[204,10309,10310],{"class":206,"line":1760},[204,10311,10312],{"class":214},"         {\n",[204,10314,10315,10318,10320,10323,10325],{"class":206,"line":1765},[204,10316,10317],{"class":214},"             Sanguo temp",[204,10319,7240],{"class":210},[204,10321,10322],{"class":214},"(s",[204,10324,694],{"class":210},[204,10326,10327],{"class":214},"j);\n",[204,10329,10330,10333,10335,10337,10340,10342,10344,10346,10348,10350,10352],{"class":206,"line":1779},[204,10331,10332],{"class":210},"             *",[204,10334,10322],{"class":214},[204,10336,694],{"class":210},[204,10338,10339],{"class":214},"j)",[204,10341,7240],{"class":210},[204,10343,10322],{"class":214},[204,10345,694],{"class":210},[204,10347,680],{"class":214},[204,10349,694],{"class":210},[204,10351,431],{"class":263},[204,10353,2805],{"class":214},[204,10355,10356,10358,10360,10362,10364,10366,10368,10370,10372],{"class":206,"line":1784},[204,10357,10332],{"class":210},[204,10359,10322],{"class":214},[204,10361,694],{"class":210},[204,10363,680],{"class":214},[204,10365,694],{"class":210},[204,10367,431],{"class":263},[204,10369,642],{"class":214},[204,10371,260],{"class":210},[204,10373,4366],{"class":214},[204,10375,10376],{"class":206,"line":1813},[204,10377,10378],{"class":214},"         }\n",[204,10380,10381],{"class":206,"line":1818},[204,10382,10383],{"class":214},"     }\n",[204,10385,10386],{"class":206,"line":1835},[204,10387,2273],{"class":214},[204,10389,10390],{"class":206,"line":1840},[204,10391,1651],{"class":214},[204,10393,10394],{"class":206,"line":1845},[204,10395,10396],{"class":273},"\u002F\u002F定义打印函数\n",[204,10398,10399,10401,10403,10405,10407,10409,10411,10413,10415,10417],{"class":206,"line":1850},[204,10400,5451],{"class":210},[204,10402,9702],{"class":2049},[204,10404,215],{"class":214},[204,10406,10195],{"class":2049},[204,10408,6605],{"class":210},[204,10410,908],{"class":5303},[204,10412,591],{"class":214},[204,10414,218],{"class":210},[204,10416,7418],{"class":5303},[204,10418,221],{"class":214},[204,10420,10421],{"class":206,"line":1864},[204,10422,1632],{"class":214},[204,10424,10425,10427,10429,10431,10433,10435,10437,10439,10441,10443,10445],{"class":206,"line":1869},[204,10426,3287],{"class":210},[204,10428,1744],{"class":214},[204,10430,218],{"class":210},[204,10432,3118],{"class":214},[204,10434,260],{"class":210},[204,10436,405],{"class":263},[204,10438,3125],{"class":214},[204,10440,1123],{"class":210},[204,10442,10232],{"class":214},[204,10444,2378],{"class":210},[204,10446,221],{"class":214},[204,10448,10449],{"class":206,"line":2663},[204,10450,2116],{"class":214},[204,10452,10453,10455,10457,10459,10461,10464,10466,10468,10470,10473,10475,10477,10479,10482,10484,10486,10488,10491,10493,10495,10497,10500,10502,10504,10506,10509,10511],{"class":206,"line":2677},[204,10454,3537],{"class":214},[204,10456,1256],{"class":210},[204,10458,464],{"class":319},[204,10460,1317],{"class":263},[204,10462,10463],{"class":319},"姓名：\"",[204,10465,1256],{"class":210},[204,10467,10322],{"class":214},[204,10469,694],{"class":210},[204,10471,10472],{"class":214},"i)->name",[204,10474,1256],{"class":210},[204,10476,464],{"class":319},[204,10478,1317],{"class":263},[204,10480,10481],{"class":319},"年龄：\"",[204,10483,1256],{"class":210},[204,10485,10322],{"class":214},[204,10487,694],{"class":210},[204,10489,10490],{"class":214},"i)->age",[204,10492,1256],{"class":210},[204,10494,464],{"class":319},[204,10496,1317],{"class":263},[204,10498,10499],{"class":319},"性别：\"",[204,10501,1256],{"class":210},[204,10503,10322],{"class":214},[204,10505,694],{"class":210},[204,10507,10508],{"class":214},"i)->gender",[204,10510,1256],{"class":210},[204,10512,1278],{"class":214},[204,10514,10515],{"class":206,"line":2685},[204,10516,2273],{"class":214},[204,10518,10519],{"class":206,"line":2690},[204,10520,1651],{"class":214},[204,10522,10523,10525,10527],{"class":206,"line":2696},[204,10524,218],{"class":210},[204,10526,2059],{"class":2049},[204,10528,2062],{"class":214},[204,10530,10531],{"class":206,"line":2702},[204,10532,1632],{"class":214},[204,10534,10535],{"class":206,"line":2707},[204,10536,10537],{"class":273},"    \u002F\u002F定义结构体变量\n",[204,10539,10540,10543,10545,10547],{"class":206,"line":8035},[204,10541,10542],{"class":214},"    Sanguo s1[",[204,10544,532],{"class":263},[204,10546,1153],{"class":214},[204,10548,4994],{"class":210},[204,10550,10551],{"class":206,"line":8059},[204,10552,2116],{"class":214},[204,10554,10555,10557,10559,10561,10563,10565,10567],{"class":206,"line":8064},[204,10556,5003],{"class":214},[204,10558,10039],{"class":319},[204,10560,591],{"class":214},[204,10562,988],{"class":263},[204,10564,591],{"class":214},[204,10566,10048],{"class":319},[204,10568,5016],{"class":214},[204,10570,10571,10573,10575,10577,10579,10581,10583],{"class":206,"line":8070},[204,10572,5003],{"class":214},[204,10574,10057],{"class":319},[204,10576,591],{"class":214},[204,10578,963],{"class":263},[204,10580,591],{"class":214},[204,10582,10048],{"class":319},[204,10584,5016],{"class":214},[204,10586,10587,10589,10591,10593,10595,10597,10599],{"class":206,"line":8097},[204,10588,5003],{"class":214},[204,10590,10074],{"class":319},[204,10592,591],{"class":214},[204,10594,913],{"class":263},[204,10596,591],{"class":214},[204,10598,10048],{"class":319},[204,10600,5016],{"class":214},[204,10602,10603,10605,10607,10609,10611,10613,10615],{"class":206,"line":8102},[204,10604,5003],{"class":214},[204,10606,10091],{"class":319},[204,10608,591],{"class":214},[204,10610,938],{"class":263},[204,10612,591],{"class":214},[204,10614,10048],{"class":319},[204,10616,5016],{"class":214},[204,10618,10619,10621,10623,10625,10627,10629,10631],{"class":206,"line":8108},[204,10620,5003],{"class":214},[204,10622,10108],{"class":319},[204,10624,591],{"class":214},[204,10626,888],{"class":263},[204,10628,591],{"class":214},[204,10630,10117],{"class":319},[204,10632,5016],{"class":214},[204,10634,10635],{"class":206,"line":8120},[204,10636,5037],{"class":214},[204,10638,10639,10641,10643,10645,10648,10650,10653,10655],{"class":206,"line":8132},[204,10640,2071],{"class":210},[204,10642,7418],{"class":214},[204,10644,4289],{"class":210},[204,10646,10647],{"class":214},"(s1)",[204,10649,4295],{"class":210},[204,10651,10652],{"class":214},"(s1[",[204,10654,405],{"class":263},[204,10656,3942],{"class":214},[204,10658,10659,10662,10664,10667,10669,10672,10675,10677],{"class":206,"line":8144},[204,10660,10661],{"class":214},"    Sanguo ",[204,10663,668],{"class":210},[204,10665,10666],{"class":214},"s ",[204,10668,260],{"class":210},[204,10670,10671],{"class":210}," &",[204,10673,10674],{"class":214},"s1[",[204,10676,405],{"class":263},[204,10678,4776],{"class":214},[204,10680,10681],{"class":206,"line":9803},[204,10682,10683],{"class":273},"    \u002F\u002F排序前：\n",[204,10685,10686,10688,10690,10693,10695],{"class":206,"line":9828},[204,10687,6616],{"class":214},[204,10689,1256],{"class":210},[204,10691,10692],{"class":319}," \"排序前：\"",[204,10694,1531],{"class":210},[204,10696,8927],{"class":214},[204,10698,10699,10701],{"class":206,"line":9851},[204,10700,10002],{"class":2049},[204,10702,10703],{"class":214},"(s,len);\n",[204,10705,10706],{"class":206,"line":9875},[204,10707,10708],{"class":273},"    \u002F\u002F调用排序函数\n",[204,10710,10711,10713],{"class":206,"line":9880},[204,10712,7685],{"class":2049},[204,10714,10703],{"class":214},[204,10716,10717],{"class":206,"line":9885},[204,10718,10719],{"class":273},"    \u002F\u002F排序后\n",[204,10721,10722,10724,10726,10729,10731],{"class":206,"line":9890},[204,10723,6616],{"class":214},[204,10725,1256],{"class":210},[204,10727,10728],{"class":319}," \"排序后：\"",[204,10730,1531],{"class":210},[204,10732,8927],{"class":214},[204,10734,10735,10737],{"class":206,"line":9899},[204,10736,10002],{"class":2049},[204,10738,10703],{"class":214},[204,10740,10741],{"class":206,"line":9904},[204,10742,1651],{"class":214},[19,10744,10745,10746,10748],{},"注意：使用指针时直接用传首地址**&s",[204,10747,405],{},"**",[5213,10750,10751],{},"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":125,"searchDepth":126,"depth":126,"links":10753},[10754,10755,10756,10757,10758,10759,10760],{"id":7790,"depth":126,"text":7791},{"id":8152,"depth":126,"text":8153},{"id":8421,"depth":126,"text":8422},{"id":8586,"depth":126,"text":8587},{"id":8802,"depth":126,"text":8803},{"id":9123,"depth":126,"text":9124},{"id":9351,"depth":126,"text":9352},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7779,"description":7787},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10767,"title":10768,"body":10769,"description":125,"extension":133,"meta":12112,"navigation":135,"path":12113,"seo":12114,"stem":12115,"__hash__":12116},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10770,"toc":12106},[10771,10774,10778,10784,10798,10803,10806,10810,10817,10823,10826,10833,10839,10844,10847,10850,10853,11417,11420,11434,11438,11443,11459,11599,11602,11608,11611,11616,11624,11732,11735,11740,11743,11748,11751,11757,11760,12103],[10,10772,10768],{"id":10773},"_5程序内存模型",[14,10775,10777],{"id":10776},"_51内存分区模型","5.1内存分区模型",[19,10779,10780,10781],{},"C++程序在执行时，将内存大方向划分为",[30,10782,10783],{},"4个区域",[68,10785,10786,10789,10792,10795],{},[71,10787,10788],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[71,10790,10791],{},"全局区：存放全局变量和静态变量以及常量",[71,10793,10794],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[71,10796,10797],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10799,10800],{},[30,10801,10802],{},"内存四区意义：",[19,10804,10805],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[49,10807,10809],{"id":10808},"_511程序运行前","5.1.1程序运行前",[19,10811,10812,10813,10816],{},"​\t在程序编译后，生成了exe可执行程序，",[30,10814,10815],{},"未执行该程序前","分为两个区域",[19,10818,10819,10820],{},"​\t",[30,10821,10822],{},"代码区：",[19,10824,10825],{},"​\t\t存放 CPU 执行的机器指令",[19,10827,10828,10829,10832],{},"​\t\t代码区是",[30,10830,10831],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10834,10828,10835,10838],{},[30,10836,10837],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10840,10819,10841],{},[30,10842,10843],{},"全局区：",[19,10845,10846],{},"​\t\t全局变量和静态变量存放在此.",[19,10848,10849],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10851,10852],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[196,10854,10856],{"className":198,"code":10855,"language":200,"meta":125,"style":125},"\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",[81,10857,10858,10863,10876,10889,10893,10898,10913,10928,10932,10941,10945,10950,10963,10976,10980,10985,11011,11037,11041,11068,11094,11098,11103,11119,11134,11138,11164,11190,11194,11219,11244,11248,11274,11300,11304,11320,11335,11361,11387,11391,11401,11405,11413],{"__ignoreMap":125},[204,10859,10860],{"class":206,"line":207},[204,10861,10862],{"class":273},"\u002F\u002F全局变量\n",[204,10864,10865,10867,10870,10872,10874],{"class":206,"line":126},[204,10866,218],{"class":210},[204,10868,10869],{"class":214}," g_a ",[204,10871,260],{"class":210},[204,10873,2124],{"class":263},[204,10875,1377],{"class":214},[204,10877,10878,10880,10883,10885,10887],{"class":206,"line":131},[204,10879,218],{"class":210},[204,10881,10882],{"class":214}," g_b ",[204,10884,260],{"class":210},[204,10886,2124],{"class":263},[204,10888,1377],{"class":214},[204,10890,10891],{"class":206,"line":1281},[204,10892,2486],{"emptyLinePlaceholder":135},[204,10894,10895],{"class":206,"line":1287},[204,10896,10897],{"class":273},"\u002F\u002F全局常量\n",[204,10899,10900,10902,10904,10907,10909,10911],{"class":206,"line":1301},[204,10901,6879],{"class":210},[204,10903,2468],{"class":210},[204,10905,10906],{"class":214}," c_g_a ",[204,10908,260],{"class":210},[204,10910,2124],{"class":263},[204,10912,1377],{"class":214},[204,10914,10915,10917,10919,10922,10924,10926],{"class":206,"line":1307},[204,10916,6879],{"class":210},[204,10918,2468],{"class":210},[204,10920,10921],{"class":214}," c_g_b ",[204,10923,260],{"class":210},[204,10925,2124],{"class":263},[204,10927,1377],{"class":214},[204,10929,10930],{"class":206,"line":1398},[204,10931,2486],{"emptyLinePlaceholder":135},[204,10933,10934,10936,10938],{"class":206,"line":1404},[204,10935,218],{"class":210},[204,10937,2059],{"class":2049},[204,10939,10940],{"class":214},"() {\n",[204,10942,10943],{"class":206,"line":1416},[204,10944,2486],{"emptyLinePlaceholder":135},[204,10946,10947],{"class":206,"line":1698},[204,10948,10949],{"class":273},"    \u002F\u002F局部变量\n",[204,10951,10952,10954,10957,10959,10961],{"class":206,"line":1703},[204,10953,2071],{"class":210},[204,10955,10956],{"class":214}," a ",[204,10958,260],{"class":210},[204,10960,2124],{"class":263},[204,10962,1377],{"class":214},[204,10964,10965,10967,10970,10972,10974],{"class":206,"line":1709},[204,10966,2071],{"class":210},[204,10968,10969],{"class":214}," b ",[204,10971,260],{"class":210},[204,10973,2124],{"class":263},[204,10975,1377],{"class":214},[204,10977,10978],{"class":206,"line":1714},[204,10979,2486],{"emptyLinePlaceholder":135},[204,10981,10982],{"class":206,"line":1728},[204,10983,10984],{"class":273},"    \u002F\u002F打印地址\n",[204,10986,10987,10989,10991,10994,10996,10998,11000,11002,11004,11007,11009],{"class":206,"line":1733},[204,10988,6616],{"class":214},[204,10990,1256],{"class":210},[204,10992,10993],{"class":319}," \"局部变量a地址为： \"",[204,10995,1531],{"class":210},[204,10997,1744],{"class":214},[204,10999,218],{"class":210},[204,11001,642],{"class":214},[204,11003,566],{"class":210},[204,11005,11006],{"class":214},"a ",[204,11008,1256],{"class":210},[204,11010,8927],{"class":214},[204,11012,11013,11015,11017,11020,11022,11024,11026,11028,11030,11033,11035],{"class":206,"line":1739},[204,11014,6616],{"class":214},[204,11016,1256],{"class":210},[204,11018,11019],{"class":319}," \"局部变量b地址为： \"",[204,11021,1531],{"class":210},[204,11023,1744],{"class":214},[204,11025,218],{"class":210},[204,11027,642],{"class":214},[204,11029,566],{"class":210},[204,11031,11032],{"class":214},"b ",[204,11034,1256],{"class":210},[204,11036,8927],{"class":214},[204,11038,11039],{"class":206,"line":1760},[204,11040,2486],{"emptyLinePlaceholder":135},[204,11042,11043,11045,11047,11050,11052,11055,11057,11059,11061,11064,11066],{"class":206,"line":1765},[204,11044,6616],{"class":214},[204,11046,1256],{"class":210},[204,11048,11049],{"class":319}," \"全局变量g_a地址为： \"",[204,11051,1531],{"class":210},[204,11053,11054],{"class":214},"  (",[204,11056,218],{"class":210},[204,11058,642],{"class":214},[204,11060,566],{"class":210},[204,11062,11063],{"class":214},"g_a ",[204,11065,1256],{"class":210},[204,11067,8927],{"class":214},[204,11069,11070,11072,11074,11077,11079,11081,11083,11085,11087,11090,11092],{"class":206,"line":1779},[204,11071,6616],{"class":214},[204,11073,1256],{"class":210},[204,11075,11076],{"class":319}," \"全局变量g_b地址为： \"",[204,11078,1531],{"class":210},[204,11080,11054],{"class":214},[204,11082,218],{"class":210},[204,11084,642],{"class":214},[204,11086,566],{"class":210},[204,11088,11089],{"class":214},"g_b ",[204,11091,1256],{"class":210},[204,11093,8927],{"class":214},[204,11095,11096],{"class":206,"line":1784},[204,11097,2486],{"emptyLinePlaceholder":135},[204,11099,11100],{"class":206,"line":1813},[204,11101,11102],{"class":273},"    \u002F\u002F静态变量\n",[204,11104,11105,11108,11110,11113,11115,11117],{"class":206,"line":1818},[204,11106,11107],{"class":210},"    static",[204,11109,2468],{"class":210},[204,11111,11112],{"class":214}," s_a ",[204,11114,260],{"class":210},[204,11116,2124],{"class":263},[204,11118,1377],{"class":214},[204,11120,11121,11123,11125,11128,11130,11132],{"class":206,"line":1835},[204,11122,11107],{"class":210},[204,11124,2468],{"class":210},[204,11126,11127],{"class":214}," s_b ",[204,11129,260],{"class":210},[204,11131,2124],{"class":263},[204,11133,1377],{"class":214},[204,11135,11136],{"class":206,"line":1840},[204,11137,2486],{"emptyLinePlaceholder":135},[204,11139,11140,11142,11144,11147,11149,11151,11153,11155,11157,11160,11162],{"class":206,"line":1845},[204,11141,6616],{"class":214},[204,11143,1256],{"class":210},[204,11145,11146],{"class":319}," \"静态变量s_a地址为： \"",[204,11148,1531],{"class":210},[204,11150,1744],{"class":214},[204,11152,218],{"class":210},[204,11154,642],{"class":214},[204,11156,566],{"class":210},[204,11158,11159],{"class":214},"s_a ",[204,11161,1256],{"class":210},[204,11163,8927],{"class":214},[204,11165,11166,11168,11170,11173,11175,11177,11179,11181,11183,11186,11188],{"class":206,"line":1850},[204,11167,6616],{"class":214},[204,11169,1256],{"class":210},[204,11171,11172],{"class":319}," \"静态变量s_b地址为： \"",[204,11174,1531],{"class":210},[204,11176,1744],{"class":214},[204,11178,218],{"class":210},[204,11180,642],{"class":214},[204,11182,566],{"class":210},[204,11184,11185],{"class":214},"s_b ",[204,11187,1256],{"class":210},[204,11189,8927],{"class":214},[204,11191,11192],{"class":206,"line":1864},[204,11193,2486],{"emptyLinePlaceholder":135},[204,11195,11196,11198,11200,11203,11205,11207,11209,11211,11213,11215,11217],{"class":206,"line":1869},[204,11197,6616],{"class":214},[204,11199,1256],{"class":210},[204,11201,11202],{"class":319}," \"字符串常量地址为： \"",[204,11204,1531],{"class":210},[204,11206,1744],{"class":214},[204,11208,218],{"class":210},[204,11210,642],{"class":214},[204,11212,566],{"class":210},[204,11214,1273],{"class":319},[204,11216,1531],{"class":210},[204,11218,8927],{"class":214},[204,11220,11221,11223,11225,11227,11229,11231,11233,11235,11237,11240,11242],{"class":206,"line":2663},[204,11222,6616],{"class":214},[204,11224,1256],{"class":210},[204,11226,11202],{"class":319},[204,11228,1531],{"class":210},[204,11230,1744],{"class":214},[204,11232,218],{"class":210},[204,11234,642],{"class":214},[204,11236,566],{"class":210},[204,11238,11239],{"class":319},"\"hello world1\"",[204,11241,1531],{"class":210},[204,11243,8927],{"class":214},[204,11245,11246],{"class":206,"line":2677},[204,11247,2486],{"emptyLinePlaceholder":135},[204,11249,11250,11252,11254,11257,11259,11261,11263,11265,11267,11270,11272],{"class":206,"line":2685},[204,11251,6616],{"class":214},[204,11253,1256],{"class":210},[204,11255,11256],{"class":319}," \"全局常量c_g_a地址为： \"",[204,11258,1531],{"class":210},[204,11260,1744],{"class":214},[204,11262,218],{"class":210},[204,11264,642],{"class":214},[204,11266,566],{"class":210},[204,11268,11269],{"class":214},"c_g_a ",[204,11271,1256],{"class":210},[204,11273,8927],{"class":214},[204,11275,11276,11278,11280,11283,11285,11287,11289,11291,11293,11296,11298],{"class":206,"line":2690},[204,11277,6616],{"class":214},[204,11279,1256],{"class":210},[204,11281,11282],{"class":319}," \"全局常量c_g_b地址为： \"",[204,11284,1531],{"class":210},[204,11286,1744],{"class":214},[204,11288,218],{"class":210},[204,11290,642],{"class":214},[204,11292,566],{"class":210},[204,11294,11295],{"class":214},"c_g_b ",[204,11297,1256],{"class":210},[204,11299,8927],{"class":214},[204,11301,11302],{"class":206,"line":2696},[204,11303,2486],{"emptyLinePlaceholder":135},[204,11305,11306,11309,11311,11314,11316,11318],{"class":206,"line":2702},[204,11307,11308],{"class":210},"    const",[204,11310,2468],{"class":210},[204,11312,11313],{"class":214}," c_l_a ",[204,11315,260],{"class":210},[204,11317,2124],{"class":263},[204,11319,1377],{"class":214},[204,11321,11322,11324,11326,11329,11331,11333],{"class":206,"line":2707},[204,11323,11308],{"class":210},[204,11325,2468],{"class":210},[204,11327,11328],{"class":214}," c_l_b ",[204,11330,260],{"class":210},[204,11332,2124],{"class":263},[204,11334,1377],{"class":214},[204,11336,11337,11339,11341,11344,11346,11348,11350,11352,11354,11357,11359],{"class":206,"line":8035},[204,11338,6616],{"class":214},[204,11340,1256],{"class":210},[204,11342,11343],{"class":319}," \"局部常量c_l_a地址为： \"",[204,11345,1531],{"class":210},[204,11347,1744],{"class":214},[204,11349,218],{"class":210},[204,11351,642],{"class":214},[204,11353,566],{"class":210},[204,11355,11356],{"class":214},"c_l_a ",[204,11358,1256],{"class":210},[204,11360,8927],{"class":214},[204,11362,11363,11365,11367,11370,11372,11374,11376,11378,11380,11383,11385],{"class":206,"line":8059},[204,11364,6616],{"class":214},[204,11366,1256],{"class":210},[204,11368,11369],{"class":319}," \"局部常量c_l_b地址为： \"",[204,11371,1531],{"class":210},[204,11373,1744],{"class":214},[204,11375,218],{"class":210},[204,11377,642],{"class":214},[204,11379,566],{"class":210},[204,11381,11382],{"class":214},"c_l_b ",[204,11384,1256],{"class":210},[204,11386,8927],{"class":214},[204,11388,11389],{"class":206,"line":8064},[204,11390,2486],{"emptyLinePlaceholder":135},[204,11392,11393,11395,11397,11399],{"class":206,"line":8070},[204,11394,2389],{"class":2049},[204,11396,215],{"class":214},[204,11398,2394],{"class":319},[204,11400,2805],{"class":214},[204,11402,11403],{"class":206,"line":8097},[204,11404,2486],{"emptyLinePlaceholder":135},[204,11406,11407,11409,11411],{"class":206,"line":8102},[204,11408,4176],{"class":210},[204,11410,4179],{"class":263},[204,11412,1377],{"class":214},[204,11414,11415],{"class":206,"line":8108},[204,11416,1651],{"class":214},[19,11418,11419],{},"总结：",[68,11421,11422,11425,11428,11431],{},[71,11423,11424],{},"c++中程序运行前分为全局区和代码区",[71,11426,11427],{},"代码区特点是共享和只读",[71,11429,11430],{},"全局区中存放全局变量、静态变量、常量",[71,11432,11433],{},"常量区中存放const修饰的全局常量和字符串常量",[49,11435,11437],{"id":11436},"_512程序运行后","5.1.2程序运行后",[161,11439,11440],{},[71,11441,11442],{},"栈区：",[68,11444,11445,11452],{},[71,11446,11447,11448,11451],{},"由编译器自动分配释放, 存放",[30,11449,11450],{},"函数的参数值,局部变量","等",[71,11453,11454,11455,11458],{},"注意事项：",[30,11456,11457],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[196,11460,11462],{"className":198,"code":11461,"language":200,"meta":125,"style":125},"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",[81,11463,11464,11475,11479,11494,11506,11510,11514,11522,11527,11542,11560,11577,11587,11595],{"__ignoreMap":125},[204,11465,11466,11468,11470,11473],{"class":206,"line":207},[204,11467,218],{"class":210},[204,11469,6605],{"class":210},[204,11471,11472],{"class":2049}," func",[204,11474,2062],{"class":214},[204,11476,11477],{"class":206,"line":126},[204,11478,1632],{"class":214},[204,11480,11481,11483,11485,11487,11489,11491],{"class":206,"line":131},[204,11482,2071],{"class":210},[204,11484,10956],{"class":214},[204,11486,260],{"class":210},[204,11488,2124],{"class":263},[204,11490,270],{"class":214},[204,11492,11493],{"class":273}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[204,11495,11496,11498,11500,11503],{"class":206,"line":1281},[204,11497,4176],{"class":210},[204,11499,10671],{"class":210},[204,11501,11502],{"class":214},"a;",[204,11504,11505],{"class":273}," \u002F\u002F放回局部变量的地址\n",[204,11507,11508],{"class":206,"line":1287},[204,11509,1651],{"class":214},[204,11511,11512],{"class":206,"line":1301},[204,11513,2486],{"emptyLinePlaceholder":135},[204,11515,11516,11518,11520],{"class":206,"line":1307},[204,11517,218],{"class":210},[204,11519,2059],{"class":2049},[204,11521,10940],{"class":214},[204,11523,11524],{"class":206,"line":1398},[204,11525,11526],{"class":273},"    \u002F\u002F接受func的返回值\n",[204,11528,11529,11531,11533,11536,11538,11540],{"class":206,"line":1404},[204,11530,2071],{"class":210},[204,11532,6605],{"class":210},[204,11534,11535],{"class":214},"p ",[204,11537,260],{"class":210},[204,11539,11472],{"class":2049},[204,11541,5723],{"class":214},[204,11543,11544,11546,11548,11550,11552,11554,11557],{"class":206,"line":1416},[204,11545,6616],{"class":214},[204,11547,1256],{"class":210},[204,11549,6605],{"class":210},[204,11551,11535],{"class":214},[204,11553,1256],{"class":210},[204,11555,11556],{"class":214}," endl;",[204,11558,11559],{"class":273}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[204,11561,11562,11564,11566,11568,11570,11572,11574],{"class":206,"line":1698},[204,11563,6616],{"class":214},[204,11565,1256],{"class":210},[204,11567,6605],{"class":210},[204,11569,11535],{"class":214},[204,11571,1256],{"class":210},[204,11573,11556],{"class":214},[204,11575,11576],{"class":273}," \u002F\u002F第二次这个数据不再保留\n",[204,11578,11579,11581,11583,11585],{"class":206,"line":1703},[204,11580,2389],{"class":2049},[204,11582,215],{"class":214},[204,11584,2394],{"class":319},[204,11586,2805],{"class":214},[204,11588,11589,11591,11593],{"class":206,"line":1709},[204,11590,4176],{"class":210},[204,11592,4179],{"class":263},[204,11594,1377],{"class":214},[204,11596,11597],{"class":206,"line":1714},[204,11598,1651],{"class":214},[19,11600,11601],{},"输出结果：",[19,11603,11604],{},[23,11605],{"alt":11606,"src":11607},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11609,11610],{},"总结：不要返回局部变量的地址",[161,11612,11613],{"start":126},[71,11614,11615],{},"堆区",[68,11617,11618,11621],{},[71,11619,11620],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[71,11622,11623],{},"在c++中主要利用new在堆区开辟内存",[196,11625,11627],{"className":198,"code":11626,"language":200,"meta":125,"style":125},"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",[81,11628,11629,11644,11648,11653,11674,11681,11685,11693,11697,11702,11716,11728],{"__ignoreMap":125},[204,11630,11631,11633,11636,11639,11641],{"class":206,"line":207},[204,11632,218],{"class":210},[204,11634,11635],{"class":210},"  *",[204,11637,11638],{"class":2049},"func",[204,11640,2513],{"class":214},[204,11642,11643],{"class":273},"  \u002F\u002F函数返回指针\n",[204,11645,11646],{"class":206,"line":126},[204,11647,1632],{"class":214},[204,11649,11650],{"class":206,"line":131},[204,11651,11652],{"class":273},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[204,11654,11655,11657,11659,11661,11663,11666,11668,11670,11672],{"class":206,"line":1281},[204,11656,4233],{"class":210},[204,11658,6605],{"class":210},[204,11660,19],{"class":214},[204,11662,260],{"class":210},[204,11664,11665],{"class":210}," new",[204,11667,2468],{"class":210},[204,11669,215],{"class":214},[204,11671,659],{"class":263},[204,11673,2805],{"class":214},[204,11675,11676,11678],{"class":206,"line":1287},[204,11677,4467],{"class":210},[204,11679,11680],{"class":214}," p;\n",[204,11682,11683],{"class":206,"line":1301},[204,11684,1651],{"class":214},[204,11686,11687,11689,11691],{"class":206,"line":1307},[204,11688,218],{"class":210},[204,11690,2059],{"class":2049},[204,11692,2062],{"class":214},[204,11694,11695],{"class":206,"line":1398},[204,11696,1632],{"class":214},[204,11698,11699],{"class":206,"line":1404},[204,11700,11701],{"class":273},"    \u002F\u002F在堆区开辟数据\n",[204,11703,11704,11706,11708,11710,11712,11714],{"class":206,"line":1416},[204,11705,2071],{"class":210},[204,11707,6605],{"class":210},[204,11709,19],{"class":214},[204,11711,260],{"class":210},[204,11713,11638],{"class":2049},[204,11715,5723],{"class":214},[204,11717,11718,11720,11722,11724,11726],{"class":206,"line":1698},[204,11719,1637],{"class":214},[204,11721,6506],{"class":210},[204,11723,19],{"class":214},[204,11725,1256],{"class":210},[204,11727,1278],{"class":214},[204,11729,11730],{"class":206,"line":1703},[204,11731,1651],{"class":214},[19,11733,11734],{},"图片展示：",[19,11736,11737],{},[23,11738],{"alt":11606,"src":11739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11741,11742],{},"堆区内存由程序员管生死！！！",[161,11744,11745],{"start":131},[71,11746,11747],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11749,11750],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11752,11753,11754],{},"​语法：",[81,11755,11756],{}," new 数据类型",[19,11758,11759],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[196,11761,11763],{"className":198,"code":11762,"language":200,"meta":125,"style":125},"\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",[81,11764,11765,11770,11780,11784,11789,11794,11816,11820,11828,11832,11846,11858,11870,11882,11887,11892,11903,11907,11912,11920,11924,11929,11951,11977,11981,11999,12003,12029,12033,12045,12049,12054,12059,12067,12071,12075,12083,12087,12093,12099],{"__ignoreMap":125},[204,11766,11767],{"class":206,"line":207},[204,11768,11769],{"class":273},"\u002F\u002F1.new的基本语法\n",[204,11771,11772,11774,11776,11778],{"class":206,"line":126},[204,11773,218],{"class":210},[204,11775,6605],{"class":210},[204,11777,11638],{"class":2049},[204,11779,2062],{"class":214},[204,11781,11782],{"class":206,"line":131},[204,11783,1632],{"class":214},[204,11785,11786],{"class":206,"line":1281},[204,11787,11788],{"class":273},"    \u002F\u002F在堆区创建整型数据\n",[204,11790,11791],{"class":206,"line":1287},[204,11792,11793],{"class":273},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[204,11795,11796,11798,11800,11802,11805,11807,11809,11811,11813],{"class":206,"line":1301},[204,11797,2071],{"class":210},[204,11799,6605],{"class":210},[204,11801,19],{"class":214},[204,11803,11804],{"class":210},"=new",[204,11806,2468],{"class":210},[204,11808,215],{"class":214},[204,11810,659],{"class":263},[204,11812,6053],{"class":214},[204,11814,11815],{"class":273},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[204,11817,11818],{"class":206,"line":1307},[204,11819,1651],{"class":214},[204,11821,11822,11824,11826],{"class":206,"line":1398},[204,11823,5451],{"class":210},[204,11825,5675],{"class":2049},[204,11827,2062],{"class":214},[204,11829,11830],{"class":206,"line":1404},[204,11831,1632],{"class":214},[204,11833,11834,11836,11838,11840,11842,11844],{"class":206,"line":1416},[204,11835,2071],{"class":210},[204,11837,6605],{"class":210},[204,11839,19],{"class":214},[204,11841,260],{"class":210},[204,11843,11638],{"class":2049},[204,11845,5723],{"class":214},[204,11847,11848,11850,11852,11854,11856],{"class":206,"line":1698},[204,11849,1637],{"class":214},[204,11851,6506],{"class":210},[204,11853,19],{"class":214},[204,11855,1256],{"class":210},[204,11857,1278],{"class":214},[204,11859,11860,11862,11864,11866,11868],{"class":206,"line":1703},[204,11861,1637],{"class":214},[204,11863,6506],{"class":210},[204,11865,19],{"class":214},[204,11867,1256],{"class":210},[204,11869,1278],{"class":214},[204,11871,11872,11874,11876,11878,11880],{"class":206,"line":1709},[204,11873,1637],{"class":214},[204,11875,6506],{"class":210},[204,11877,19],{"class":214},[204,11879,1256],{"class":210},[204,11881,1278],{"class":214},[204,11883,11884],{"class":206,"line":1714},[204,11885,11886],{"class":273},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[204,11888,11889],{"class":206,"line":1728},[204,11890,11891],{"class":273},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[204,11893,11894,11897,11900],{"class":206,"line":1733},[204,11895,11896],{"class":210},"    delete",[204,11898,11899],{"class":214}," p;",[204,11901,11902],{"class":273},"\u002F\u002F删除这块地址\n",[204,11904,11905],{"class":206,"line":1739},[204,11906,1651],{"class":214},[204,11908,11909],{"class":206,"line":1760},[204,11910,11911],{"class":273},"\u002F\u002F2.在堆区利用new开辟数组\n",[204,11913,11914,11916,11918],{"class":206,"line":1765},[204,11915,5451],{"class":210},[204,11917,5744],{"class":2049},[204,11919,2062],{"class":214},[204,11921,11922],{"class":206,"line":1779},[204,11923,1632],{"class":214},[204,11925,11926],{"class":206,"line":1784},[204,11927,11928],{"class":273},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[204,11930,11931,11933,11935,11937,11939,11941,11943,11945,11948],{"class":206,"line":1813},[204,11932,2071],{"class":210},[204,11934,6605],{"class":210},[204,11936,3966],{"class":214},[204,11938,11804],{"class":210},[204,11940,2468],{"class":210},[204,11942,1103],{"class":214},[204,11944,659],{"class":263},[204,11946,11947],{"class":214},"];",[204,11949,11950],{"class":273},"\u002F\u002F10代表数组有10个元素\n",[204,11952,11953,11955,11957,11959,11961,11963,11965,11967,11969,11971,11973,11975],{"class":206,"line":1818},[204,11954,3287],{"class":210},[204,11956,1744],{"class":214},[204,11958,218],{"class":210},[204,11960,3118],{"class":214},[204,11962,260],{"class":210},[204,11964,405],{"class":263},[204,11966,3125],{"class":214},[204,11968,1123],{"class":210},[204,11970,659],{"class":263},[204,11972,3125],{"class":214},[204,11974,2378],{"class":210},[204,11976,221],{"class":214},[204,11978,11979],{"class":206,"line":1835},[204,11980,2116],{"class":214},[204,11982,11983,11986,11988,11990,11992,11994,11996],{"class":206,"line":1840},[204,11984,11985],{"class":214},"        arr[i]",[204,11987,260],{"class":210},[204,11989,654],{"class":214},[204,11991,694],{"class":210},[204,11993,524],{"class":263},[204,11995,270],{"class":214},[204,11997,11998],{"class":273},"\u002F\u002F给10个元素赋值100～109\n",[204,12000,12001],{"class":206,"line":1845},[204,12002,2273],{"class":214},[204,12004,12005,12007,12009,12011,12013,12015,12017,12019,12021,12023,12025,12027],{"class":206,"line":1850},[204,12006,3287],{"class":210},[204,12008,1744],{"class":214},[204,12010,218],{"class":210},[204,12012,3118],{"class":214},[204,12014,260],{"class":210},[204,12016,405],{"class":263},[204,12018,3125],{"class":214},[204,12020,1123],{"class":210},[204,12022,659],{"class":263},[204,12024,3125],{"class":214},[204,12026,2378],{"class":210},[204,12028,221],{"class":214},[204,12030,12031],{"class":206,"line":1864},[204,12032,2116],{"class":214},[204,12034,12035,12037,12039,12041,12043],{"class":206,"line":1869},[204,12036,3537],{"class":214},[204,12038,1256],{"class":210},[204,12040,4440],{"class":214},[204,12042,1256],{"class":210},[204,12044,1278],{"class":214},[204,12046,12047],{"class":206,"line":2663},[204,12048,2273],{"class":214},[204,12050,12051],{"class":206,"line":2677},[204,12052,12053],{"class":273},"    \u002F\u002F释放堆区数组\n",[204,12055,12056],{"class":206,"line":2685},[204,12057,12058],{"class":273},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[204,12060,12061,12064],{"class":206,"line":2690},[204,12062,12063],{"class":210},"    delete[]",[204,12065,12066],{"class":214}," arr;\n",[204,12068,12069],{"class":206,"line":2696},[204,12070,1651],{"class":214},[204,12072,12073],{"class":206,"line":2702},[204,12074,2486],{"emptyLinePlaceholder":135},[204,12076,12077,12079,12081],{"class":206,"line":2707},[204,12078,218],{"class":210},[204,12080,2059],{"class":2049},[204,12082,2062],{"class":214},[204,12084,12085],{"class":206,"line":8035},[204,12086,1632],{"class":214},[204,12088,12089,12091],{"class":206,"line":8059},[204,12090,5720],{"class":2049},[204,12092,5723],{"class":214},[204,12094,12095,12097],{"class":206,"line":8064},[204,12096,5789],{"class":2049},[204,12098,5723],{"class":214},[204,12100,12101],{"class":206,"line":8070},[204,12102,1651],{"class":214},[5213,12104,12105],{},"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":125,"searchDepth":126,"depth":126,"links":12107},[12108],{"id":10776,"depth":126,"text":10777,"children":12109},[12110,12111],{"id":10808,"depth":131,"text":10809},{"id":11436,"depth":131,"text":11437},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10768,"description":125},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12118,"title":12119,"body":12120,"description":125,"extension":133,"meta":13601,"navigation":135,"path":13602,"seo":13603,"stem":13604,"__hash__":13605},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12121,"toc":13593},[12122,12125,12129,12132,12135,12304,12308,12313,12330,12335,12487,12491,12494,12497,12891,12895,12898,12903,12906,13218,13222,13228,13388,13390,13398,13402,13405,13412,13590],[10,12123,12119],{"id":12124},"_6引用",[14,12126,12128],{"id":12127},"_61引用基本用法","6.1引用基本用法",[19,12130,12131],{},"引用的本质：给变量起别名",[19,12133,12134],{},"语法：数据类型 &别名=原名",[196,12136,12138],{"className":198,"code":12137,"language":200,"meta":125,"style":125},"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",[81,12139,12140,12148,12152,12164,12176,12180,12199,12218,12222,12233,12237,12256,12274,12278,12288,12292,12300],{"__ignoreMap":125},[204,12141,12142,12144,12146],{"class":206,"line":207},[204,12143,218],{"class":210},[204,12145,2059],{"class":2049},[204,12147,10940],{"class":214},[204,12149,12150],{"class":206,"line":126},[204,12151,2486],{"emptyLinePlaceholder":135},[204,12153,12154,12156,12158,12160,12162],{"class":206,"line":131},[204,12155,2071],{"class":210},[204,12157,10956],{"class":214},[204,12159,260],{"class":210},[204,12161,2124],{"class":263},[204,12163,1377],{"class":214},[204,12165,12166,12168,12170,12172,12174],{"class":206,"line":1281},[204,12167,2071],{"class":210},[204,12169,10671],{"class":210},[204,12171,11032],{"class":214},[204,12173,260],{"class":210},[204,12175,1519],{"class":214},[204,12177,12178],{"class":206,"line":1287},[204,12179,2486],{"emptyLinePlaceholder":135},[204,12181,12182,12184,12186,12189,12191,12193,12195,12197],{"class":206,"line":1301},[204,12183,6616],{"class":214},[204,12185,1256],{"class":210},[204,12187,12188],{"class":319}," \"a = \"",[204,12190,1531],{"class":210},[204,12192,10956],{"class":214},[204,12194,1256],{"class":210},[204,12196,11556],{"class":214},[204,12198,7355],{"class":273},[204,12200,12201,12203,12205,12208,12210,12212,12214,12216],{"class":206,"line":1307},[204,12202,6616],{"class":214},[204,12204,1256],{"class":210},[204,12206,12207],{"class":319}," \"b = \"",[204,12209,1531],{"class":210},[204,12211,10969],{"class":214},[204,12213,1256],{"class":210},[204,12215,11556],{"class":214},[204,12217,7355],{"class":273},[204,12219,12220],{"class":206,"line":1398},[204,12221,2486],{"emptyLinePlaceholder":135},[204,12223,12224,12227,12229,12231],{"class":206,"line":1404},[204,12225,12226],{"class":214},"    b ",[204,12228,260],{"class":210},[204,12230,5841],{"class":263},[204,12232,1377],{"class":214},[204,12234,12235],{"class":206,"line":1416},[204,12236,2486],{"emptyLinePlaceholder":135},[204,12238,12239,12241,12243,12245,12247,12249,12251,12253],{"class":206,"line":1698},[204,12240,6616],{"class":214},[204,12242,1256],{"class":210},[204,12244,12188],{"class":319},[204,12246,1531],{"class":210},[204,12248,10956],{"class":214},[204,12250,1256],{"class":210},[204,12252,11556],{"class":214},[204,12254,12255],{"class":273},"\u002F\u002F100\n",[204,12257,12258,12260,12262,12264,12266,12268,12270,12272],{"class":206,"line":1703},[204,12259,6616],{"class":214},[204,12261,1256],{"class":210},[204,12263,12207],{"class":319},[204,12265,1531],{"class":210},[204,12267,10969],{"class":214},[204,12269,1256],{"class":210},[204,12271,11556],{"class":214},[204,12273,12255],{"class":273},[204,12275,12276],{"class":206,"line":1709},[204,12277,2486],{"emptyLinePlaceholder":135},[204,12279,12280,12282,12284,12286],{"class":206,"line":1714},[204,12281,2389],{"class":2049},[204,12283,215],{"class":214},[204,12285,2394],{"class":319},[204,12287,2805],{"class":214},[204,12289,12290],{"class":206,"line":1728},[204,12291,2486],{"emptyLinePlaceholder":135},[204,12293,12294,12296,12298],{"class":206,"line":1733},[204,12295,4176],{"class":210},[204,12297,4179],{"class":263},[204,12299,1377],{"class":214},[204,12301,12302],{"class":206,"line":1739},[204,12303,1651],{"class":214},[14,12305,12307],{"id":12306},"_62引用的注意事项","6.2引用的注意事项",[161,12309,12310],{},[71,12311,12312],{},"引用必须要初始化",[196,12314,12316],{"className":198,"code":12315,"language":200,"meta":125,"style":125},"int &b;\u002F\u002F非常错误！\n",[81,12317,12318],{"__ignoreMap":125},[204,12319,12320,12322,12324,12327],{"class":206,"line":207},[204,12321,218],{"class":210},[204,12323,10671],{"class":210},[204,12325,12326],{"class":214},"b;",[204,12328,12329],{"class":273},"\u002F\u002F非常错误！\n",[161,12331,12332],{"start":126},[71,12333,12334],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[196,12336,12338],{"className":198,"code":12337,"language":200,"meta":125,"style":125},"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",[81,12339,12340,12348,12360,12372,12380,12396,12409,12427,12445,12465,12475,12483],{"__ignoreMap":125},[204,12341,12342,12344,12346],{"class":206,"line":207},[204,12343,218],{"class":210},[204,12345,2059],{"class":2049},[204,12347,10940],{"class":214},[204,12349,12350,12352,12354,12356,12358],{"class":206,"line":126},[204,12351,2071],{"class":210},[204,12353,10956],{"class":214},[204,12355,260],{"class":210},[204,12357,2124],{"class":263},[204,12359,1377],{"class":214},[204,12361,12362,12364,12366,12368,12370],{"class":206,"line":131},[204,12363,2071],{"class":210},[204,12365,10969],{"class":214},[204,12367,260],{"class":210},[204,12369,9037],{"class":263},[204,12371,1377],{"class":214},[204,12373,12374,12377],{"class":206,"line":1281},[204,12375,12376],{"class":273},"    \u002F\u002Fint &c;",[204,12378,12379],{"class":273}," \u002F\u002F错误，引用必须初始化\n",[204,12381,12382,12384,12386,12388,12390,12393],{"class":206,"line":1287},[204,12383,2071],{"class":210},[204,12385,10671],{"class":210},[204,12387,3032],{"class":214},[204,12389,260],{"class":210},[204,12391,12392],{"class":214}," a;",[204,12394,12395],{"class":273}," \u002F\u002F一旦初始化后，就不可以更改\n",[204,12397,12398,12401,12403,12406],{"class":206,"line":1301},[204,12399,12400],{"class":214},"    c ",[204,12402,260],{"class":210},[204,12404,12405],{"class":214}," b;",[204,12407,12408],{"class":273}," \u002F\u002F这是赋值操作，不是更改引用\n",[204,12410,12411,12413,12415,12417,12419,12421,12423,12425],{"class":206,"line":1307},[204,12412,6616],{"class":214},[204,12414,1256],{"class":210},[204,12416,12188],{"class":319},[204,12418,1531],{"class":210},[204,12420,10956],{"class":214},[204,12422,1256],{"class":210},[204,12424,11556],{"class":214},[204,12426,7340],{"class":273},[204,12428,12429,12431,12433,12435,12437,12439,12441,12443],{"class":206,"line":1398},[204,12430,6616],{"class":214},[204,12432,1256],{"class":210},[204,12434,12207],{"class":319},[204,12436,1531],{"class":210},[204,12438,10969],{"class":214},[204,12440,1256],{"class":210},[204,12442,11556],{"class":214},[204,12444,7340],{"class":273},[204,12446,12447,12449,12451,12454,12456,12459,12461,12463],{"class":206,"line":1404},[204,12448,6616],{"class":214},[204,12450,1256],{"class":210},[204,12452,12453],{"class":319}," \"c = \"",[204,12455,1531],{"class":210},[204,12457,12458],{"class":214}," c ",[204,12460,1256],{"class":210},[204,12462,11556],{"class":214},[204,12464,7340],{"class":273},[204,12466,12467,12469,12471,12473],{"class":206,"line":1416},[204,12468,2389],{"class":2049},[204,12470,215],{"class":214},[204,12472,2394],{"class":319},[204,12474,2805],{"class":214},[204,12476,12477,12479,12481],{"class":206,"line":1698},[204,12478,4176],{"class":210},[204,12480,4179],{"class":263},[204,12482,1377],{"class":214},[204,12484,12485],{"class":206,"line":1703},[204,12486,1651],{"class":214},[14,12488,12490],{"id":12489},"_63引用做函数参数","6.3引用做函数参数",[19,12492,12493],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12495,12496],{},"优点：可以简化指针修改实参",[196,12498,12500],{"className":198,"code":12499,"language":200,"meta":125,"style":125},"\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",[81,12501,12502,12507,12530,12541,12551,12560,12564,12568,12573,12595,12607,12619,12629,12633,12637,12642,12664,12674,12682,12690,12694,12698,12706,12710,12722,12734,12738,12749,12775,12779,12799,12823,12827,12837,12861,12865,12875,12879,12887],{"__ignoreMap":125},[204,12503,12504],{"class":206,"line":207},[204,12505,12506],{"class":273},"\u002F\u002F1. 值传递\n",[204,12508,12509,12511,12514,12516,12518,12520,12523,12525,12527],{"class":206,"line":126},[204,12510,5451],{"class":210},[204,12512,12513],{"class":2049}," mySwap01",[204,12515,215],{"class":214},[204,12517,218],{"class":210},[204,12519,1485],{"class":5303},[204,12521,12522],{"class":214},", ",[204,12524,218],{"class":210},[204,12526,2919],{"class":5303},[204,12528,12529],{"class":214},") {\n",[204,12531,12532,12534,12537,12539],{"class":206,"line":131},[204,12533,2071],{"class":210},[204,12535,12536],{"class":214}," temp ",[204,12538,260],{"class":210},[204,12540,1519],{"class":214},[204,12542,12543,12546,12548],{"class":206,"line":1281},[204,12544,12545],{"class":214},"    a ",[204,12547,260],{"class":210},[204,12549,12550],{"class":214}," b;\n",[204,12552,12553,12555,12557],{"class":206,"line":1287},[204,12554,12226],{"class":214},[204,12556,260],{"class":210},[204,12558,12559],{"class":214}," temp;\n",[204,12561,12562],{"class":206,"line":1301},[204,12563,1651],{"class":214},[204,12565,12566],{"class":206,"line":1307},[204,12567,2486],{"emptyLinePlaceholder":135},[204,12569,12570],{"class":206,"line":1398},[204,12571,12572],{"class":273},"\u002F\u002F2. 地址传递\n",[204,12574,12575,12577,12580,12582,12585,12587,12589,12591,12593],{"class":206,"line":1404},[204,12576,5451],{"class":210},[204,12578,12579],{"class":2049}," mySwap02",[204,12581,215],{"class":214},[204,12583,12584],{"class":210},"int*",[204,12586,1485],{"class":5303},[204,12588,12522],{"class":214},[204,12590,12584],{"class":210},[204,12592,2919],{"class":5303},[204,12594,12529],{"class":214},[204,12596,12597,12599,12601,12603,12605],{"class":206,"line":1416},[204,12598,2071],{"class":210},[204,12600,12536],{"class":214},[204,12602,260],{"class":210},[204,12604,6605],{"class":210},[204,12606,6284],{"class":214},[204,12608,12609,12611,12613,12615,12617],{"class":206,"line":1698},[204,12610,6490],{"class":210},[204,12612,11006],{"class":214},[204,12614,260],{"class":210},[204,12616,6605],{"class":210},[204,12618,6156],{"class":214},[204,12620,12621,12623,12625,12627],{"class":206,"line":1703},[204,12622,6490],{"class":210},[204,12624,11032],{"class":214},[204,12626,260],{"class":210},[204,12628,12559],{"class":214},[204,12630,12631],{"class":206,"line":1709},[204,12632,1651],{"class":214},[204,12634,12635],{"class":206,"line":1714},[204,12636,2486],{"emptyLinePlaceholder":135},[204,12638,12639],{"class":206,"line":1728},[204,12640,12641],{"class":273},"\u002F\u002F3. 引用传递\n",[204,12643,12644,12646,12649,12651,12654,12656,12658,12660,12662],{"class":206,"line":1733},[204,12645,5451],{"class":210},[204,12647,12648],{"class":2049}," mySwap03",[204,12650,215],{"class":214},[204,12652,12653],{"class":210},"int&",[204,12655,1485],{"class":5303},[204,12657,12522],{"class":214},[204,12659,12653],{"class":210},[204,12661,2919],{"class":5303},[204,12663,12529],{"class":214},[204,12665,12666,12668,12670,12672],{"class":206,"line":1739},[204,12667,2071],{"class":210},[204,12669,12536],{"class":214},[204,12671,260],{"class":210},[204,12673,1519],{"class":214},[204,12675,12676,12678,12680],{"class":206,"line":1760},[204,12677,12545],{"class":214},[204,12679,260],{"class":210},[204,12681,12550],{"class":214},[204,12683,12684,12686,12688],{"class":206,"line":1765},[204,12685,12226],{"class":214},[204,12687,260],{"class":210},[204,12689,12559],{"class":214},[204,12691,12692],{"class":206,"line":1779},[204,12693,1651],{"class":214},[204,12695,12696],{"class":206,"line":1784},[204,12697,2486],{"emptyLinePlaceholder":135},[204,12699,12700,12702,12704],{"class":206,"line":1813},[204,12701,218],{"class":210},[204,12703,2059],{"class":2049},[204,12705,10940],{"class":214},[204,12707,12708],{"class":206,"line":1818},[204,12709,2486],{"emptyLinePlaceholder":135},[204,12711,12712,12714,12716,12718,12720],{"class":206,"line":1835},[204,12713,2071],{"class":210},[204,12715,10956],{"class":214},[204,12717,260],{"class":210},[204,12719,2124],{"class":263},[204,12721,1377],{"class":214},[204,12723,12724,12726,12728,12730,12732],{"class":206,"line":1840},[204,12725,2071],{"class":210},[204,12727,10969],{"class":214},[204,12729,260],{"class":210},[204,12731,9037],{"class":263},[204,12733,1377],{"class":214},[204,12735,12736],{"class":206,"line":1845},[204,12737,2486],{"emptyLinePlaceholder":135},[204,12739,12740,12743,12746],{"class":206,"line":1850},[204,12741,12742],{"class":2049},"    mySwap01",[204,12744,12745],{"class":214},"(a, b);",[204,12747,12748],{"class":273},"\u002F\u002F值传递，形参不会修饰实参\n",[204,12750,12751,12753,12755,12758,12760,12762,12764,12767,12769,12771,12773],{"class":206,"line":1864},[204,12752,6616],{"class":214},[204,12754,1256],{"class":210},[204,12756,12757],{"class":319}," \"a:\"",[204,12759,1531],{"class":210},[204,12761,10956],{"class":214},[204,12763,1256],{"class":210},[204,12765,12766],{"class":319}," \" b:\"",[204,12768,1531],{"class":210},[204,12770,10969],{"class":214},[204,12772,1256],{"class":210},[204,12774,8927],{"class":214},[204,12776,12777],{"class":206,"line":1869},[204,12778,2486],{"emptyLinePlaceholder":135},[204,12780,12781,12784,12786,12788,12791,12793,12796],{"class":206,"line":2663},[204,12782,12783],{"class":2049},"    mySwap02",[204,12785,215],{"class":214},[204,12787,566],{"class":210},[204,12789,12790],{"class":214},"a, ",[204,12792,566],{"class":210},[204,12794,12795],{"class":214},"b);",[204,12797,12798],{"class":273},"\u002F\u002F地址传递，形参会修饰实参\n",[204,12800,12801,12803,12805,12807,12809,12811,12813,12815,12817,12819,12821],{"class":206,"line":2677},[204,12802,6616],{"class":214},[204,12804,1256],{"class":210},[204,12806,12757],{"class":319},[204,12808,1531],{"class":210},[204,12810,10956],{"class":214},[204,12812,1256],{"class":210},[204,12814,12766],{"class":319},[204,12816,1531],{"class":210},[204,12818,10969],{"class":214},[204,12820,1256],{"class":210},[204,12822,8927],{"class":214},[204,12824,12825],{"class":206,"line":2685},[204,12826,2486],{"emptyLinePlaceholder":135},[204,12828,12829,12832,12834],{"class":206,"line":2690},[204,12830,12831],{"class":2049},"    mySwap03",[204,12833,12745],{"class":214},[204,12835,12836],{"class":273},"\u002F\u002F引用传递，形参会修饰实参\n",[204,12838,12839,12841,12843,12845,12847,12849,12851,12853,12855,12857,12859],{"class":206,"line":2696},[204,12840,6616],{"class":214},[204,12842,1256],{"class":210},[204,12844,12757],{"class":319},[204,12846,1531],{"class":210},[204,12848,10956],{"class":214},[204,12850,1256],{"class":210},[204,12852,12766],{"class":319},[204,12854,1531],{"class":210},[204,12856,10969],{"class":214},[204,12858,1256],{"class":210},[204,12860,8927],{"class":214},[204,12862,12863],{"class":206,"line":2702},[204,12864,2486],{"emptyLinePlaceholder":135},[204,12866,12867,12869,12871,12873],{"class":206,"line":2707},[204,12868,2389],{"class":2049},[204,12870,215],{"class":214},[204,12872,2394],{"class":319},[204,12874,2805],{"class":214},[204,12876,12877],{"class":206,"line":8035},[204,12878,2486],{"emptyLinePlaceholder":135},[204,12880,12881,12883,12885],{"class":206,"line":8059},[204,12882,4176],{"class":210},[204,12884,4179],{"class":263},[204,12886,1377],{"class":214},[204,12888,12889],{"class":206,"line":8064},[204,12890,1651],{"class":214},[14,12892,12894],{"id":12893},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,12896,12897],{},"作用：引用是可以作为函数的返回值存在的",[19,12899,9112,12900],{},[30,12901,12902],{},"不要返回局部变量引用",[19,12904,12905],{},"用法：函数调用作为左值",[196,12907,12909],{"className":10028,"code":12908,"language":10030,"meta":125,"style":125},"\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",[81,12910,12911,12916,12924,12939,12945,12949,12953,12958,12966,12983,12989,12993,12997,13005,13009,13014,13028,13048,13067,13071,13076,13089,13109,13127,13131,13147,13151,13170,13188,13192,13202,13206,13214],{"__ignoreMap":125},[204,12912,12913],{"class":206,"line":207},[204,12914,12915],{"class":273},"\u002F\u002F返回局部变量引用\n",[204,12917,12918,12920,12922],{"class":206,"line":126},[204,12919,12653],{"class":210},[204,12921,5675],{"class":2049},[204,12923,10940],{"class":214},[204,12925,12926,12928,12930,12932,12934,12936],{"class":206,"line":131},[204,12927,2071],{"class":210},[204,12929,10956],{"class":214},[204,12931,260],{"class":210},[204,12933,2124],{"class":263},[204,12935,270],{"class":214},[204,12937,12938],{"class":273}," \u002F\u002F局部变量\n",[204,12940,12941,12943],{"class":206,"line":1281},[204,12942,4176],{"class":210},[204,12944,1519],{"class":214},[204,12946,12947],{"class":206,"line":1287},[204,12948,1651],{"class":214},[204,12950,12951],{"class":206,"line":1301},[204,12952,2486],{"emptyLinePlaceholder":135},[204,12954,12955],{"class":206,"line":1307},[204,12956,12957],{"class":273},"\u002F\u002F返回静态变量引用\n",[204,12959,12960,12962,12964],{"class":206,"line":1398},[204,12961,12653],{"class":210},[204,12963,5744],{"class":2049},[204,12965,10940],{"class":214},[204,12967,12968,12970,12972,12974,12976,12978,12980],{"class":206,"line":1404},[204,12969,11107],{"class":210},[204,12971,2468],{"class":210},[204,12973,10956],{"class":214},[204,12975,260],{"class":210},[204,12977,9037],{"class":263},[204,12979,270],{"class":214},[204,12981,12982],{"class":273},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[204,12984,12985,12987],{"class":206,"line":1416},[204,12986,4176],{"class":210},[204,12988,1519],{"class":214},[204,12990,12991],{"class":206,"line":1698},[204,12992,1651],{"class":214},[204,12994,12995],{"class":206,"line":1703},[204,12996,2486],{"emptyLinePlaceholder":135},[204,12998,12999,13001,13003],{"class":206,"line":1709},[204,13000,218],{"class":210},[204,13002,2059],{"class":2049},[204,13004,10940],{"class":214},[204,13006,13007],{"class":206,"line":1714},[204,13008,2486],{"emptyLinePlaceholder":135},[204,13010,13011],{"class":206,"line":1728},[204,13012,13013],{"class":273},"    \u002F\u002F不能返回局部变量的引用\n",[204,13015,13016,13019,13022,13024,13026],{"class":206,"line":1733},[204,13017,13018],{"class":210},"    int&",[204,13020,13021],{"class":214}," ref ",[204,13023,260],{"class":210},[204,13025,5675],{"class":2049},[204,13027,5723],{"class":214},[204,13029,13030,13032,13034,13037,13039,13041,13043,13045],{"class":206,"line":1739},[204,13031,6616],{"class":214},[204,13033,1256],{"class":210},[204,13035,13036],{"class":319}," \"ref = \"",[204,13038,1531],{"class":210},[204,13040,13021],{"class":214},[204,13042,1256],{"class":210},[204,13044,11556],{"class":214},[204,13046,13047],{"class":273},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[204,13049,13050,13052,13054,13056,13058,13060,13062,13064],{"class":206,"line":1760},[204,13051,6616],{"class":214},[204,13053,1256],{"class":210},[204,13055,13036],{"class":319},[204,13057,1531],{"class":210},[204,13059,13021],{"class":214},[204,13061,1256],{"class":210},[204,13063,11556],{"class":214},[204,13065,13066],{"class":273},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[204,13068,13069],{"class":206,"line":1765},[204,13070,2486],{"emptyLinePlaceholder":135},[204,13072,13073],{"class":206,"line":1779},[204,13074,13075],{"class":273},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[204,13077,13078,13080,13083,13085,13087],{"class":206,"line":1784},[204,13079,13018],{"class":210},[204,13081,13082],{"class":214}," ref2 ",[204,13084,260],{"class":210},[204,13086,5744],{"class":2049},[204,13088,5723],{"class":214},[204,13090,13091,13093,13095,13098,13100,13102,13104,13106],{"class":206,"line":1813},[204,13092,6616],{"class":214},[204,13094,1256],{"class":210},[204,13096,13097],{"class":319}," \"ref2 = \"",[204,13099,1531],{"class":210},[204,13101,13082],{"class":214},[204,13103,1256],{"class":210},[204,13105,11556],{"class":214},[204,13107,13108],{"class":273}," \u002F\u002F20\n",[204,13110,13111,13113,13115,13117,13119,13121,13123,13125],{"class":206,"line":1818},[204,13112,6616],{"class":214},[204,13114,1256],{"class":210},[204,13116,13097],{"class":319},[204,13118,1531],{"class":210},[204,13120,13082],{"class":214},[204,13122,1256],{"class":210},[204,13124,11556],{"class":214},[204,13126,13108],{"class":273},[204,13128,13129],{"class":206,"line":1835},[204,13130,2486],{"emptyLinePlaceholder":135},[204,13132,13133,13135,13138,13140,13142,13144],{"class":206,"line":1840},[204,13134,5789],{"class":2049},[204,13136,13137],{"class":214},"() ",[204,13139,260],{"class":210},[204,13141,3085],{"class":263},[204,13143,270],{"class":214},[204,13145,13146],{"class":273},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[204,13148,13149],{"class":206,"line":1845},[204,13150,2486],{"emptyLinePlaceholder":135},[204,13152,13153,13155,13157,13159,13161,13163,13165,13167],{"class":206,"line":1850},[204,13154,6616],{"class":214},[204,13156,1256],{"class":210},[204,13158,13097],{"class":319},[204,13160,1531],{"class":210},[204,13162,13082],{"class":214},[204,13164,1256],{"class":210},[204,13166,11556],{"class":214},[204,13168,13169],{"class":273}," \u002F\u002F1000\n",[204,13171,13172,13174,13176,13178,13180,13182,13184,13186],{"class":206,"line":1864},[204,13173,6616],{"class":214},[204,13175,1256],{"class":210},[204,13177,13097],{"class":319},[204,13179,1531],{"class":210},[204,13181,13082],{"class":214},[204,13183,1256],{"class":210},[204,13185,11556],{"class":214},[204,13187,13169],{"class":273},[204,13189,13190],{"class":206,"line":1869},[204,13191,2486],{"emptyLinePlaceholder":135},[204,13193,13194,13196,13198,13200],{"class":206,"line":2663},[204,13195,2389],{"class":2049},[204,13197,215],{"class":214},[204,13199,2394],{"class":319},[204,13201,2805],{"class":214},[204,13203,13204],{"class":206,"line":2677},[204,13205,2486],{"emptyLinePlaceholder":135},[204,13207,13208,13210,13212],{"class":206,"line":2685},[204,13209,4176],{"class":210},[204,13211,4179],{"class":263},[204,13213,1377],{"class":214},[204,13215,13216],{"class":206,"line":2690},[204,13217,1651],{"class":214},[14,13219,13221],{"id":13220},"_65引用的本质","6.5引用的本质",[19,13223,13224,13225],{},"本质：",[30,13226,13227],{},"引用的本质在c++内部实现是一个指针常量.",[196,13229,13231],{"className":198,"code":13230,"language":200,"meta":125,"style":125},"\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",[81,13232,13233,13238,13254,13268,13272,13281,13293,13298,13303,13314,13327,13331,13347,13364,13368,13376,13384],{"__ignoreMap":125},[204,13234,13235],{"class":206,"line":207},[204,13236,13237],{"class":273},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[204,13239,13240,13242,13244,13246,13248,13251],{"class":206,"line":126},[204,13241,5451],{"class":210},[204,13243,11472],{"class":2049},[204,13245,215],{"class":214},[204,13247,12653],{"class":210},[204,13249,13250],{"class":5303}," ref",[204,13252,13253],{"class":214},"){\n",[204,13255,13256,13259,13261,13263,13265],{"class":206,"line":131},[204,13257,13258],{"class":214},"    ref ",[204,13260,260],{"class":210},[204,13262,5841],{"class":263},[204,13264,270],{"class":214},[204,13266,13267],{"class":273}," \u002F\u002F ref是引用，转换为*ref = 100\n",[204,13269,13270],{"class":206,"line":1281},[204,13271,1651],{"class":214},[204,13273,13274,13276,13278],{"class":206,"line":1287},[204,13275,218],{"class":210},[204,13277,2059],{"class":2049},[204,13279,13280],{"class":214},"(){\n",[204,13282,13283,13285,13287,13289,13291],{"class":206,"line":1301},[204,13284,2071],{"class":210},[204,13286,10956],{"class":214},[204,13288,260],{"class":210},[204,13290,2124],{"class":263},[204,13292,1377],{"class":214},[204,13294,13295],{"class":206,"line":1307},[204,13296,13297],{"class":214},"    \n",[204,13299,13300],{"class":206,"line":1398},[204,13301,13302],{"class":273},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[204,13304,13305,13307,13309,13311],{"class":206,"line":1404},[204,13306,13018],{"class":210},[204,13308,13021],{"class":214},[204,13310,260],{"class":210},[204,13312,13313],{"class":214}," a; \n",[204,13315,13316,13318,13320,13322,13324],{"class":206,"line":1416},[204,13317,13258],{"class":214},[204,13319,260],{"class":210},[204,13321,9037],{"class":263},[204,13323,270],{"class":214},[204,13325,13326],{"class":273}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[204,13328,13329],{"class":206,"line":1698},[204,13330,13297],{"class":214},[204,13332,13333,13335,13337,13339,13341,13343,13345],{"class":206,"line":1703},[204,13334,6616],{"class":214},[204,13336,1256],{"class":210},[204,13338,12757],{"class":319},[204,13340,1531],{"class":210},[204,13342,10956],{"class":214},[204,13344,1256],{"class":210},[204,13346,8927],{"class":214},[204,13348,13349,13351,13353,13356,13358,13360,13362],{"class":206,"line":1709},[204,13350,6616],{"class":214},[204,13352,1256],{"class":210},[204,13354,13355],{"class":319}," \"ref:\"",[204,13357,1531],{"class":210},[204,13359,13021],{"class":214},[204,13361,1256],{"class":210},[204,13363,8927],{"class":214},[204,13365,13366],{"class":206,"line":1714},[204,13367,13297],{"class":214},[204,13369,13370,13373],{"class":206,"line":1728},[204,13371,13372],{"class":2049},"    func",[204,13374,13375],{"class":214},"(a);\n",[204,13377,13378,13380,13382],{"class":206,"line":1733},[204,13379,4176],{"class":210},[204,13381,4179],{"class":263},[204,13383,1377],{"class":214},[204,13385,13386],{"class":206,"line":1739},[204,13387,1651],{"class":214},[19,13389,11419],{},[161,13391,13392,13395],{},[71,13393,13394],{},"引用的本质，就是一个指针常量",[71,13396,13397],{},"引用一旦初始化，就不可以发生改变",[14,13399,13401],{"id":13400},"_66常量引用","6.6常量引用",[19,13403,13404],{},"作用：常量引用主要用来修饰形参",[19,13406,13407,13408,13411],{},"在函数形参列表中，可以加",[30,13409,13410],{},"const修饰形参","，防止形参改变实参",[196,13413,13415],{"className":198,"code":13414,"language":200,"meta":125,"style":125},"\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",[81,13416,13417,13422,13427,13446,13451,13464,13468,13472,13480,13484,13489,13494,13508,13512,13520,13532,13536,13541,13553,13560,13564,13574,13578,13586],{"__ignoreMap":125},[204,13418,13419],{"class":206,"line":207},[204,13420,13421],{"class":273},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[204,13423,13424],{"class":206,"line":126},[204,13425,13426],{"class":273},"\u002F\u002F加上const就不能修改实参的\n",[204,13428,13429,13431,13434,13436,13438,13441,13444],{"class":206,"line":131},[204,13430,5451],{"class":210},[204,13432,13433],{"class":2049}," showValue",[204,13435,215],{"class":214},[204,13437,6879],{"class":210},[204,13439,13440],{"class":210}," int&",[204,13442,13443],{"class":5303}," v",[204,13445,12529],{"class":214},[204,13447,13448],{"class":206,"line":1281},[204,13449,13450],{"class":273},"    \u002F\u002Fv += 100;\n",[204,13452,13453,13455,13457,13460,13462],{"class":206,"line":1287},[204,13454,6616],{"class":214},[204,13456,1256],{"class":210},[204,13458,13459],{"class":214}," v ",[204,13461,1256],{"class":210},[204,13463,8927],{"class":214},[204,13465,13466],{"class":206,"line":1301},[204,13467,1651],{"class":214},[204,13469,13470],{"class":206,"line":1307},[204,13471,2486],{"emptyLinePlaceholder":135},[204,13473,13474,13476,13478],{"class":206,"line":1398},[204,13475,218],{"class":210},[204,13477,2059],{"class":2049},[204,13479,10940],{"class":214},[204,13481,13482],{"class":206,"line":1404},[204,13483,2486],{"emptyLinePlaceholder":135},[204,13485,13486],{"class":206,"line":1416},[204,13487,13488],{"class":273},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[204,13490,13491],{"class":206,"line":1698},[204,13492,13493],{"class":273},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[204,13495,13496,13498,13500,13502,13504,13506],{"class":206,"line":1703},[204,13497,11308],{"class":210},[204,13499,13440],{"class":210},[204,13501,13021],{"class":214},[204,13503,260],{"class":210},[204,13505,2124],{"class":263},[204,13507,1377],{"class":214},[204,13509,13510],{"class":206,"line":1709},[204,13511,2486],{"emptyLinePlaceholder":135},[204,13513,13514,13517],{"class":206,"line":1714},[204,13515,13516],{"class":273},"    \u002F\u002Fref = 100;",[204,13518,13519],{"class":273},"  \u002F\u002F加入const后不可以修改变量\n",[204,13521,13522,13524,13526,13528,13530],{"class":206,"line":1728},[204,13523,6616],{"class":214},[204,13525,1256],{"class":210},[204,13527,13021],{"class":214},[204,13529,1256],{"class":210},[204,13531,8927],{"class":214},[204,13533,13534],{"class":206,"line":1733},[204,13535,2486],{"emptyLinePlaceholder":135},[204,13537,13538],{"class":206,"line":1739},[204,13539,13540],{"class":273},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[204,13542,13543,13545,13547,13549,13551],{"class":206,"line":1760},[204,13544,2071],{"class":210},[204,13546,10956],{"class":214},[204,13548,260],{"class":210},[204,13550,2124],{"class":263},[204,13552,1377],{"class":214},[204,13554,13555,13558],{"class":206,"line":1765},[204,13556,13557],{"class":2049},"    showValue",[204,13559,13375],{"class":214},[204,13561,13562],{"class":206,"line":1779},[204,13563,2486],{"emptyLinePlaceholder":135},[204,13565,13566,13568,13570,13572],{"class":206,"line":1784},[204,13567,2389],{"class":2049},[204,13569,215],{"class":214},[204,13571,2394],{"class":319},[204,13573,2805],{"class":214},[204,13575,13576],{"class":206,"line":1813},[204,13577,2486],{"emptyLinePlaceholder":135},[204,13579,13580,13582,13584],{"class":206,"line":1818},[204,13581,4176],{"class":210},[204,13583,4179],{"class":263},[204,13585,1377],{"class":214},[204,13587,13588],{"class":206,"line":1835},[204,13589,1651],{"class":214},[5213,13591,13592],{},"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":125,"searchDepth":126,"depth":126,"links":13594},[13595,13596,13597,13598,13599,13600],{"id":12127,"depth":126,"text":12128},{"id":12306,"depth":126,"text":12307},{"id":12489,"depth":126,"text":12490},{"id":12893,"depth":126,"text":12894},{"id":13220,"depth":126,"text":13221},{"id":13400,"depth":126,"text":13401},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12119,"description":125},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13607,"title":13608,"body":13609,"description":125,"extension":133,"meta":14690,"navigation":135,"path":14691,"seo":14692,"stem":14693,"__hash__":14694},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13610,"toc":14682},[13611,13614,13618,13621,13626,13858,13860,13871,13875,13878,13886,13990,13993,13997,14000,14004,14007,14012,14034,14040,14367,14370,14374,14382,14679],[10,13612,13608],{"id":13613},"_7函数高级部分",[14,13615,13617],{"id":13616},"_71函数默认参数","7.1函数默认参数",[19,13619,13620],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13622,5268,13623],{},[81,13624,13625],{}," 返回值类型  函数名 （参数= 默认值）{}",[196,13627,13629],{"className":198,"code":13628,"language":200,"meta":125,"style":125},"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",[81,13630,13631,13666,13681,13685,13689,13694,13699,13728,13748,13758,13762,13766,13774,13778,13806,13828,13832,13842,13846,13854],{"__ignoreMap":125},[204,13632,13633,13635,13637,13639,13641,13643,13645,13647,13649,13652,13654,13656,13658,13660,13662,13664],{"class":206,"line":207},[204,13634,218],{"class":210},[204,13636,11472],{"class":2049},[204,13638,215],{"class":214},[204,13640,218],{"class":210},[204,13642,1485],{"class":5303},[204,13644,12522],{"class":214},[204,13646,218],{"class":210},[204,13648,2919],{"class":5303},[204,13650,13651],{"class":210}," =",[204,13653,2124],{"class":263},[204,13655,12522],{"class":214},[204,13657,218],{"class":210},[204,13659,2935],{"class":5303},[204,13661,13651],{"class":210},[204,13663,2124],{"class":263},[204,13665,12529],{"class":214},[204,13667,13668,13670,13672,13674,13676,13678],{"class":206,"line":126},[204,13669,4176],{"class":210},[204,13671,10956],{"class":214},[204,13673,694],{"class":210},[204,13675,10969],{"class":214},[204,13677,694],{"class":210},[204,13679,13680],{"class":214}," c;\n",[204,13682,13683],{"class":206,"line":131},[204,13684,1651],{"class":214},[204,13686,13687],{"class":206,"line":1281},[204,13688,2486],{"emptyLinePlaceholder":135},[204,13690,13691],{"class":206,"line":1287},[204,13692,13693],{"class":273},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[204,13695,13696],{"class":206,"line":1301},[204,13697,13698],{"class":273},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[204,13700,13701,13703,13706,13708,13710,13712,13714,13716,13718,13720,13722,13724,13726],{"class":206,"line":1307},[204,13702,218],{"class":210},[204,13704,13705],{"class":2049}," func2",[204,13707,215],{"class":214},[204,13709,218],{"class":210},[204,13711,1485],{"class":5303},[204,13713,13651],{"class":210},[204,13715,2124],{"class":263},[204,13717,12522],{"class":214},[204,13719,218],{"class":210},[204,13721,2919],{"class":5303},[204,13723,13651],{"class":210},[204,13725,2124],{"class":263},[204,13727,2805],{"class":214},[204,13729,13730,13732,13734,13736,13738,13740,13742,13744,13746],{"class":206,"line":1398},[204,13731,218],{"class":210},[204,13733,13705],{"class":2049},[204,13735,215],{"class":214},[204,13737,218],{"class":210},[204,13739,1485],{"class":5303},[204,13741,12522],{"class":214},[204,13743,218],{"class":210},[204,13745,2919],{"class":5303},[204,13747,12529],{"class":214},[204,13749,13750,13752,13754,13756],{"class":206,"line":1404},[204,13751,4176],{"class":210},[204,13753,10956],{"class":214},[204,13755,694],{"class":210},[204,13757,12550],{"class":214},[204,13759,13760],{"class":206,"line":1416},[204,13761,1651],{"class":214},[204,13763,13764],{"class":206,"line":1698},[204,13765,2486],{"emptyLinePlaceholder":135},[204,13767,13768,13770,13772],{"class":206,"line":1703},[204,13769,218],{"class":210},[204,13771,2059],{"class":2049},[204,13773,10940],{"class":214},[204,13775,13776],{"class":206,"line":1709},[204,13777,2486],{"emptyLinePlaceholder":135},[204,13779,13780,13782,13784,13787,13789,13791,13793,13795,13797,13799,13802,13804],{"class":206,"line":1714},[204,13781,6616],{"class":214},[204,13783,1256],{"class":210},[204,13785,13786],{"class":319}," \"ret = \"",[204,13788,1531],{"class":210},[204,13790,11472],{"class":2049},[204,13792,215],{"class":214},[204,13794,913],{"class":263},[204,13796,12522],{"class":214},[204,13798,913],{"class":263},[204,13800,13801],{"class":214},") ",[204,13803,1256],{"class":210},[204,13805,8927],{"class":214},[204,13807,13808,13810,13812,13814,13816,13818,13820,13822,13824,13826],{"class":206,"line":1728},[204,13809,6616],{"class":214},[204,13811,1256],{"class":210},[204,13813,13786],{"class":319},[204,13815,1531],{"class":210},[204,13817,11472],{"class":2049},[204,13819,215],{"class":214},[204,13821,524],{"class":263},[204,13823,13801],{"class":214},[204,13825,1256],{"class":210},[204,13827,8927],{"class":214},[204,13829,13830],{"class":206,"line":1733},[204,13831,2486],{"emptyLinePlaceholder":135},[204,13833,13834,13836,13838,13840],{"class":206,"line":1739},[204,13835,2389],{"class":2049},[204,13837,215],{"class":214},[204,13839,2394],{"class":319},[204,13841,2805],{"class":214},[204,13843,13844],{"class":206,"line":1760},[204,13845,2486],{"emptyLinePlaceholder":135},[204,13847,13848,13850,13852],{"class":206,"line":1765},[204,13849,4176],{"class":210},[204,13851,4179],{"class":263},[204,13853,1377],{"class":214},[204,13855,13856],{"class":206,"line":1779},[204,13857,1651],{"class":214},[19,13859,11419],{},[161,13861,13862,13865,13868],{},[71,13863,13864],{},"我传就用我；没传就用你",[71,13866,13867],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[71,13869,13870],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13872,13874],{"id":13873},"_72函数的占位参数","7.2函数的占位参数",[19,13876,13877],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13879,13880,13882,13883],{},[30,13881,5268],{}," ",[81,13884,13885],{},"返回值类型 函数名 (数据类型){}",[196,13887,13889],{"className":198,"code":13888,"language":200,"meta":125,"style":125},"\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",[81,13890,13891,13896,13914,13927,13931,13939,13943,13960,13964,13974,13978,13986],{"__ignoreMap":125},[204,13892,13893],{"class":206,"line":207},[204,13894,13895],{"class":273},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[204,13897,13898,13900,13902,13904,13906,13908,13910,13912],{"class":206,"line":126},[204,13899,5451],{"class":210},[204,13901,11472],{"class":2049},[204,13903,215],{"class":214},[204,13905,218],{"class":210},[204,13907,1485],{"class":5303},[204,13909,12522],{"class":214},[204,13911,218],{"class":210},[204,13913,12529],{"class":214},[204,13915,13916,13918,13920,13923,13925],{"class":206,"line":131},[204,13917,6616],{"class":214},[204,13919,1256],{"class":210},[204,13921,13922],{"class":319}," \"this is func\"",[204,13924,1531],{"class":210},[204,13926,8927],{"class":214},[204,13928,13929],{"class":206,"line":1281},[204,13930,1651],{"class":214},[204,13932,13933,13935,13937],{"class":206,"line":1287},[204,13934,218],{"class":210},[204,13936,2059],{"class":2049},[204,13938,10940],{"class":214},[204,13940,13941],{"class":206,"line":1301},[204,13942,2486],{"emptyLinePlaceholder":135},[204,13944,13945,13947,13949,13951,13953,13955,13957],{"class":206,"line":1307},[204,13946,13372],{"class":2049},[204,13948,215],{"class":214},[204,13950,659],{"class":263},[204,13952,591],{"class":214},[204,13954,659],{"class":263},[204,13956,6053],{"class":214},[204,13958,13959],{"class":273}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[204,13961,13962],{"class":206,"line":1398},[204,13963,2486],{"emptyLinePlaceholder":135},[204,13965,13966,13968,13970,13972],{"class":206,"line":1404},[204,13967,2389],{"class":2049},[204,13969,215],{"class":214},[204,13971,2394],{"class":319},[204,13973,2805],{"class":214},[204,13975,13976],{"class":206,"line":1416},[204,13977,2486],{"emptyLinePlaceholder":135},[204,13979,13980,13982,13984],{"class":206,"line":1698},[204,13981,4176],{"class":210},[204,13983,4179],{"class":263},[204,13985,1377],{"class":214},[204,13987,13988],{"class":206,"line":1703},[204,13989,1651],{"class":214},[19,13991,13992],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,13994,13996],{"id":13995},"_73函数重载","7.3函数重载",[19,13998,13999],{},"意思是函数名是可以相同的",[49,14001,14003],{"id":14002},"_731基本语法","7.3.1基本语法",[19,14005,14006],{},"作用：函数名可以相同，提高复用性",[19,14008,14009],{},[30,14010,14011],{},"函数重载满足条件：",[68,14013,14014,14017,14020],{},[71,14015,14016],{},"同一个作用域下",[71,14018,14019],{},"函数名称相同",[71,14021,14022,14023,14026,14027,14030,14031],{},"函数参数",[30,14024,14025],{},"类型不同","  或者 ",[30,14028,14029],{},"个数不同"," 或者 ",[30,14032,14033],{},"顺序不同",[19,14035,14036,14039],{},[30,14037,14038],{},"注意:","  函数的返回值不可以作为函数重载的条件",[196,14041,14043],{"className":10028,"code":14042,"language":10030,"meta":125,"style":125},"\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",[81,14044,14045,14050,14058,14062,14075,14079,14093,14097,14110,14114,14129,14133,14146,14150,14171,14175,14188,14192,14212,14216,14229,14233,14237,14242,14247,14252,14257,14262,14266,14270,14278,14282,14288,14298,14308,14322,14337,14341,14351,14355,14363],{"__ignoreMap":125},[204,14046,14047],{"class":206,"line":207},[204,14048,14049],{"class":273},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[204,14051,14052,14054,14056],{"class":206,"line":126},[204,14053,5451],{"class":210},[204,14055,11472],{"class":2049},[204,14057,2062],{"class":214},[204,14059,14060],{"class":206,"line":131},[204,14061,1632],{"class":214},[204,14063,14064,14066,14068,14071,14073],{"class":206,"line":1281},[204,14065,6616],{"class":214},[204,14067,1256],{"class":210},[204,14069,14070],{"class":319}," \"func 的调用！\"",[204,14072,1531],{"class":210},[204,14074,8927],{"class":214},[204,14076,14077],{"class":206,"line":1287},[204,14078,1651],{"class":214},[204,14080,14081,14083,14085,14087,14089,14091],{"class":206,"line":1301},[204,14082,5451],{"class":210},[204,14084,11472],{"class":2049},[204,14086,215],{"class":214},[204,14088,218],{"class":210},[204,14090,1485],{"class":5303},[204,14092,221],{"class":214},[204,14094,14095],{"class":206,"line":1307},[204,14096,1632],{"class":214},[204,14098,14099,14101,14103,14106,14108],{"class":206,"line":1398},[204,14100,6616],{"class":214},[204,14102,1256],{"class":210},[204,14104,14105],{"class":319}," \"func (int a) 的调用！\"",[204,14107,1531],{"class":210},[204,14109,8927],{"class":214},[204,14111,14112],{"class":206,"line":1404},[204,14113,1651],{"class":214},[204,14115,14116,14118,14120,14122,14125,14127],{"class":206,"line":1416},[204,14117,5451],{"class":210},[204,14119,11472],{"class":2049},[204,14121,215],{"class":214},[204,14123,14124],{"class":210},"double",[204,14126,1485],{"class":5303},[204,14128,221],{"class":214},[204,14130,14131],{"class":206,"line":1698},[204,14132,1632],{"class":214},[204,14134,14135,14137,14139,14142,14144],{"class":206,"line":1703},[204,14136,6616],{"class":214},[204,14138,1256],{"class":210},[204,14140,14141],{"class":319}," \"func (double a)的调用！\"",[204,14143,1531],{"class":210},[204,14145,8927],{"class":214},[204,14147,14148],{"class":206,"line":1709},[204,14149,1651],{"class":214},[204,14151,14152,14154,14156,14158,14160,14162,14165,14167,14169],{"class":206,"line":1714},[204,14153,5451],{"class":210},[204,14155,11472],{"class":2049},[204,14157,215],{"class":214},[204,14159,218],{"class":210},[204,14161,1485],{"class":5303},[204,14163,14164],{"class":214}," ,",[204,14166,14124],{"class":210},[204,14168,2919],{"class":5303},[204,14170,221],{"class":214},[204,14172,14173],{"class":206,"line":1728},[204,14174,1632],{"class":214},[204,14176,14177,14179,14181,14184,14186],{"class":206,"line":1733},[204,14178,6616],{"class":214},[204,14180,1256],{"class":210},[204,14182,14183],{"class":319}," \"func (int a ,double b) 的调用！\"",[204,14185,1531],{"class":210},[204,14187,8927],{"class":214},[204,14189,14190],{"class":206,"line":1739},[204,14191,1651],{"class":214},[204,14193,14194,14196,14198,14200,14202,14204,14206,14208,14210],{"class":206,"line":1760},[204,14195,5451],{"class":210},[204,14197,11472],{"class":2049},[204,14199,215],{"class":214},[204,14201,14124],{"class":210},[204,14203,1485],{"class":5303},[204,14205,14164],{"class":214},[204,14207,218],{"class":210},[204,14209,2919],{"class":5303},[204,14211,221],{"class":214},[204,14213,14214],{"class":206,"line":1765},[204,14215,1632],{"class":214},[204,14217,14218,14220,14222,14225,14227],{"class":206,"line":1779},[204,14219,6616],{"class":214},[204,14221,1256],{"class":210},[204,14223,14224],{"class":319}," \"func (double a ,int b)的调用！\"",[204,14226,1531],{"class":210},[204,14228,8927],{"class":214},[204,14230,14231],{"class":206,"line":1784},[204,14232,1651],{"class":214},[204,14234,14235],{"class":206,"line":1813},[204,14236,2486],{"emptyLinePlaceholder":135},[204,14238,14239],{"class":206,"line":1818},[204,14240,14241],{"class":273},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[204,14243,14244],{"class":206,"line":1835},[204,14245,14246],{"class":273},"\u002F\u002Fint func(double a, int b)\n",[204,14248,14249],{"class":206,"line":1840},[204,14250,14251],{"class":273},"\u002F\u002F{\n",[204,14253,14254],{"class":206,"line":1845},[204,14255,14256],{"class":273},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[204,14258,14259],{"class":206,"line":1850},[204,14260,14261],{"class":273},"\u002F\u002F}\n",[204,14263,14264],{"class":206,"line":1864},[204,14265,2486],{"emptyLinePlaceholder":135},[204,14267,14268],{"class":206,"line":1869},[204,14269,2486],{"emptyLinePlaceholder":135},[204,14271,14272,14274,14276],{"class":206,"line":2663},[204,14273,218],{"class":210},[204,14275,2059],{"class":2049},[204,14277,10940],{"class":214},[204,14279,14280],{"class":206,"line":2677},[204,14281,2486],{"emptyLinePlaceholder":135},[204,14283,14284,14286],{"class":206,"line":2685},[204,14285,13372],{"class":2049},[204,14287,5723],{"class":214},[204,14289,14290,14292,14294,14296],{"class":206,"line":2690},[204,14291,13372],{"class":2049},[204,14293,215],{"class":214},[204,14295,659],{"class":263},[204,14297,2805],{"class":214},[204,14299,14300,14302,14304,14306],{"class":206,"line":2696},[204,14301,13372],{"class":2049},[204,14303,215],{"class":214},[204,14305,264],{"class":263},[204,14307,2805],{"class":214},[204,14309,14310,14312,14314,14316,14318,14320],{"class":206,"line":2702},[204,14311,13372],{"class":2049},[204,14313,215],{"class":214},[204,14315,659],{"class":263},[204,14317,591],{"class":214},[204,14319,264],{"class":263},[204,14321,2805],{"class":214},[204,14323,14324,14326,14328,14330,14333,14335],{"class":206,"line":2707},[204,14325,13372],{"class":2049},[204,14327,215],{"class":214},[204,14329,264],{"class":263},[204,14331,14332],{"class":214}," , ",[204,14334,659],{"class":263},[204,14336,2805],{"class":214},[204,14338,14339],{"class":206,"line":8035},[204,14340,13297],{"class":214},[204,14342,14343,14345,14347,14349],{"class":206,"line":8059},[204,14344,2389],{"class":2049},[204,14346,215],{"class":214},[204,14348,2394],{"class":319},[204,14350,2805],{"class":214},[204,14352,14353],{"class":206,"line":8064},[204,14354,2486],{"emptyLinePlaceholder":135},[204,14356,14357,14359,14361],{"class":206,"line":8070},[204,14358,4176],{"class":210},[204,14360,4179],{"class":263},[204,14362,1377],{"class":214},[204,14364,14365],{"class":206,"line":8097},[204,14366,1651],{"class":214},[19,14368,14369],{},"重点：函数返回值不可以作为函数重载条件！",[49,14371,14373],{"id":14372},"_732注意事项","7.3.2注意事项",[68,14375,14376,14379],{},[71,14377,14378],{},"引用作为重载条件!!!",[71,14380,14381],{},"函数重载碰到函数默认参数",[196,14383,14385],{"className":198,"code":14384,"language":200,"meta":125,"style":125},"\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",[81,14386,14387,14392,14397,14401,14417,14421,14434,14438,14442,14460,14464,14477,14481,14485,14489,14494,14498,14522,14526,14539,14543,14547,14561,14565,14578,14582,14586,14594,14598,14610,14620,14633,14637,14641,14649,14653,14663,14667,14675],{"__ignoreMap":125},[204,14388,14389],{"class":206,"line":207},[204,14390,14391],{"class":273},"\u002F\u002F函数重载注意事项\n",[204,14393,14394],{"class":206,"line":126},[204,14395,14396],{"class":273},"\u002F\u002F1、引用作为重载条件\n",[204,14398,14399],{"class":206,"line":131},[204,14400,2486],{"emptyLinePlaceholder":135},[204,14402,14403,14405,14407,14409,14411,14413,14415],{"class":206,"line":1281},[204,14404,5451],{"class":210},[204,14406,11472],{"class":2049},[204,14408,215],{"class":214},[204,14410,218],{"class":210},[204,14412,10671],{"class":210},[204,14414,62],{"class":5303},[204,14416,221],{"class":214},[204,14418,14419],{"class":206,"line":1287},[204,14420,1632],{"class":214},[204,14422,14423,14425,14427,14430,14432],{"class":206,"line":1301},[204,14424,6616],{"class":214},[204,14426,1256],{"class":210},[204,14428,14429],{"class":319}," \"func (int &a) 调用 \"",[204,14431,1531],{"class":210},[204,14433,8927],{"class":214},[204,14435,14436],{"class":206,"line":1307},[204,14437,1651],{"class":214},[204,14439,14440],{"class":206,"line":1398},[204,14441,2486],{"emptyLinePlaceholder":135},[204,14443,14444,14446,14448,14450,14452,14454,14456,14458],{"class":206,"line":1404},[204,14445,5451],{"class":210},[204,14447,11472],{"class":2049},[204,14449,215],{"class":214},[204,14451,6879],{"class":210},[204,14453,2468],{"class":210},[204,14455,10671],{"class":210},[204,14457,62],{"class":5303},[204,14459,221],{"class":214},[204,14461,14462],{"class":206,"line":1416},[204,14463,1632],{"class":214},[204,14465,14466,14468,14470,14473,14475],{"class":206,"line":1698},[204,14467,6616],{"class":214},[204,14469,1256],{"class":210},[204,14471,14472],{"class":319}," \"func (const int &a) 调用 \"",[204,14474,1531],{"class":210},[204,14476,8927],{"class":214},[204,14478,14479],{"class":206,"line":1703},[204,14480,1651],{"class":214},[204,14482,14483],{"class":206,"line":1709},[204,14484,2486],{"emptyLinePlaceholder":135},[204,14486,14487],{"class":206,"line":1714},[204,14488,2486],{"emptyLinePlaceholder":135},[204,14490,14491],{"class":206,"line":1728},[204,14492,14493],{"class":273},"\u002F\u002F2、函数重载碰到函数默认参数\n",[204,14495,14496],{"class":206,"line":1733},[204,14497,2486],{"emptyLinePlaceholder":135},[204,14499,14500,14502,14504,14506,14508,14510,14512,14514,14516,14518,14520],{"class":206,"line":1739},[204,14501,5451],{"class":210},[204,14503,13705],{"class":2049},[204,14505,215],{"class":214},[204,14507,218],{"class":210},[204,14509,1485],{"class":5303},[204,14511,12522],{"class":214},[204,14513,218],{"class":210},[204,14515,2919],{"class":5303},[204,14517,13651],{"class":210},[204,14519,2124],{"class":263},[204,14521,221],{"class":214},[204,14523,14524],{"class":206,"line":1760},[204,14525,1632],{"class":214},[204,14527,14528,14530,14532,14535,14537],{"class":206,"line":1765},[204,14529,6616],{"class":214},[204,14531,1256],{"class":210},[204,14533,14534],{"class":319}," \"func2(int a, int b = 10) 调用\"",[204,14536,1531],{"class":210},[204,14538,8927],{"class":214},[204,14540,14541],{"class":206,"line":1779},[204,14542,1651],{"class":214},[204,14544,14545],{"class":206,"line":1784},[204,14546,2486],{"emptyLinePlaceholder":135},[204,14548,14549,14551,14553,14555,14557,14559],{"class":206,"line":1813},[204,14550,5451],{"class":210},[204,14552,13705],{"class":2049},[204,14554,215],{"class":214},[204,14556,218],{"class":210},[204,14558,1485],{"class":5303},[204,14560,221],{"class":214},[204,14562,14563],{"class":206,"line":1818},[204,14564,1632],{"class":214},[204,14566,14567,14569,14571,14574,14576],{"class":206,"line":1835},[204,14568,6616],{"class":214},[204,14570,1256],{"class":210},[204,14572,14573],{"class":319}," \"func2(int a) 调用\"",[204,14575,1531],{"class":210},[204,14577,8927],{"class":214},[204,14579,14580],{"class":206,"line":1840},[204,14581,1651],{"class":214},[204,14583,14584],{"class":206,"line":1845},[204,14585,2486],{"emptyLinePlaceholder":135},[204,14587,14588,14590,14592],{"class":206,"line":1850},[204,14589,218],{"class":210},[204,14591,2059],{"class":2049},[204,14593,10940],{"class":214},[204,14595,14596],{"class":206,"line":1864},[204,14597,13297],{"class":214},[204,14599,14600,14602,14604,14606,14608],{"class":206,"line":1869},[204,14601,2071],{"class":210},[204,14603,10956],{"class":214},[204,14605,260],{"class":210},[204,14607,2124],{"class":263},[204,14609,1377],{"class":214},[204,14611,14612,14614,14617],{"class":206,"line":2663},[204,14613,13372],{"class":2049},[204,14615,14616],{"class":214},"(a);",[204,14618,14619],{"class":273}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[204,14621,14622,14624,14626,14628,14630],{"class":206,"line":2677},[204,14623,13372],{"class":2049},[204,14625,215],{"class":214},[204,14627,659],{"class":263},[204,14629,6053],{"class":214},[204,14631,14632],{"class":273},"\u002F\u002F调用有const   10是个常量\n",[204,14634,14635],{"class":206,"line":2685},[204,14636,2486],{"emptyLinePlaceholder":135},[204,14638,14639],{"class":206,"line":2690},[204,14640,2486],{"emptyLinePlaceholder":135},[204,14642,14643,14646],{"class":206,"line":2696},[204,14644,14645],{"class":273},"    \u002F\u002Ffunc2(10);",[204,14647,14648],{"class":273}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[204,14650,14651],{"class":206,"line":2702},[204,14652,2486],{"emptyLinePlaceholder":135},[204,14654,14655,14657,14659,14661],{"class":206,"line":2707},[204,14656,2389],{"class":2049},[204,14658,215],{"class":214},[204,14660,2394],{"class":319},[204,14662,2805],{"class":214},[204,14664,14665],{"class":206,"line":8035},[204,14666,2486],{"emptyLinePlaceholder":135},[204,14668,14669,14671,14673],{"class":206,"line":8059},[204,14670,4176],{"class":210},[204,14672,4179],{"class":263},[204,14674,1377],{"class":214},[204,14676,14677],{"class":206,"line":8064},[204,14678,1651],{"class":214},[5213,14680,14681],{},"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":125,"searchDepth":126,"depth":126,"links":14683},[14684,14685,14686],{"id":13616,"depth":126,"text":13617},{"id":13873,"depth":126,"text":13874},{"id":13995,"depth":126,"text":13996,"children":14687},[14688,14689],{"id":14002,"depth":131,"text":14003},{"id":14372,"depth":131,"text":14373},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13608,"description":125},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14696,"title":14697,"body":14698,"description":23452,"extension":133,"meta":23453,"navigation":135,"path":23454,"seo":23455,"stem":23456,"__hash__":23457},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14699,"toc":23433},[14700,14703,14709,14716,14721,14724,14727,14730,14734,14738,14741,14744,14752,14757,14760,14767,14772,14931,14934,15187,15190,15193,15196,15201,15204,15207,15218,15223,15459,15463,15473,15476,15484,15631,15635,15638,15641,15645,16090,16094,16102,16110,17022,17029,17034,17662,17665,17668,17671,17790,17793,17880,17883,18009,18012,18106,18109,18462,18466,18474,18478,18485,18488,18491,18502,18508,18513,18525,18533,18553,18561,18578,18764,18767,18771,18774,18777,18780,18783,18786,18789,18792,19252,19258,19262,19265,19276,19863,19866,20355,20359,20362,20365,20368,20371,20374,20382,20778,20782,20785,20788,21235,21238,21241,21246,21249,21254,21257,21261,21264,21266,21272,21275,21581,21591,21632,21636,21639,21641,21674,21677,21984,21986,22001,22004,22027,22036,22042,22045,22049,22052,22055,22060,22071,22076,22084,22089,22219,22222,22225,22400,22405,22617,22621,22624,22738,22743,22982,22986,22990,22993,22996,23001,23106,23109,23112,23115,23119,23230,23233,23236,23241,23293,23296,23299,23304,23350,23353,23358,23426,23428,23431],[10,14701,14697],{"id":14702},"_8类和对象",[19,14704,14705,14706],{},"C++面向对象的三大特性为",[30,14707,14708],{},"封装、继承、多态",[19,14710,14711,14712,14715],{},"C++认为",[30,14713,14714],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14717,14718],{},[30,14719,14720],{},"例如：",[19,14722,14723],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14725,14726],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14728,14729],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14731,14733],{"id":14732},"_81封装","8.1封装",[49,14735,14737],{"id":14736},"_811封装的意义","8.1.1封装的意义",[19,14739,14740],{},"封装是C++面向对象三大特性之一",[19,14742,14743],{},"封装的意义：",[68,14745,14746,14749],{},[71,14747,14748],{},"将属性和行为作为一个整体，表现生活中的事物",[71,14750,14751],{},"将属性和行为加以权限控制",[19,14753,14754],{},[30,14755,14756],{},"封装意义一：",[19,14758,14759],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14761,14762,13882,14764],{},[30,14763,5268],{},[81,14765,14766],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[161,14768,14769],{},[71,14770,14771],{},"**示例1：**设计一个圆类，求圆的周长",[196,14773,14775],{"className":198,"code":14774,"language":200,"meta":125,"style":125},"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",[81,14776,14777,14785,14789,14794,14799,14804,14809,14816,14821,14831,14835,14853,14857,14861,14869,14873,14878,14883,14888,14893,14904,14927],{"__ignoreMap":125},[204,14778,14779,14782],{"class":206,"line":207},[204,14780,14781],{"class":210},"class",[204,14783,14784],{"class":2049}," Circle\n",[204,14786,14787],{"class":206,"line":126},[204,14788,1632],{"class":214},[204,14790,14791],{"class":206,"line":131},[204,14792,14793],{"class":273},"    \u002F\u002F访问权限\n",[204,14795,14796],{"class":206,"line":1281},[204,14797,14798],{"class":273},"    \u002F\u002F公共权限\n",[204,14800,14801],{"class":206,"line":1287},[204,14802,14803],{"class":210},"public:\n",[204,14805,14806],{"class":206,"line":1301},[204,14807,14808],{"class":273},"    \u002F\u002F属性\n",[204,14810,14811,14813],{"class":206,"line":1307},[204,14812,2071],{"class":210},[204,14814,14815],{"class":214}," m_r;\n",[204,14817,14818],{"class":206,"line":1398},[204,14819,14820],{"class":273},"    \u002F\u002F行为\n",[204,14822,14823,14826,14829],{"class":206,"line":1404},[204,14824,14825],{"class":210},"    double",[204,14827,14828],{"class":2049}," calculateZC",[204,14830,2062],{"class":214},[204,14832,14833],{"class":206,"line":1416},[204,14834,2116],{"class":214},[204,14836,14837,14840,14843,14845,14848,14850],{"class":206,"line":1698},[204,14838,14839],{"class":210},"        return",[204,14841,14842],{"class":263}," 2",[204,14844,668],{"class":210},[204,14846,14847],{"class":214},"PI",[204,14849,668],{"class":210},[204,14851,14852],{"class":214},"m_r;\n",[204,14854,14855],{"class":206,"line":1703},[204,14856,2273],{"class":214},[204,14858,14859],{"class":206,"line":1709},[204,14860,4081],{"class":214},[204,14862,14863,14865,14867],{"class":206,"line":1714},[204,14864,218],{"class":210},[204,14866,2059],{"class":2049},[204,14868,2062],{"class":214},[204,14870,14871],{"class":206,"line":1728},[204,14872,1632],{"class":214},[204,14874,14875],{"class":206,"line":1733},[204,14876,14877],{"class":273},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[204,14879,14880],{"class":206,"line":1739},[204,14881,14882],{"class":273},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[204,14884,14885],{"class":206,"line":1760},[204,14886,14887],{"class":214},"    Circle c1;\n",[204,14889,14890],{"class":206,"line":1765},[204,14891,14892],{"class":273},"    \u002F\u002F给圆对象 的属性进行赋值\n",[204,14894,14895,14898,14900,14902],{"class":206,"line":1779},[204,14896,14897],{"class":214},"    c1.m_r",[204,14899,260],{"class":210},[204,14901,659],{"class":263},[204,14903,1377],{"class":214},[204,14905,14906,14908,14910,14913,14915,14918,14921,14923,14925],{"class":206,"line":1784},[204,14907,1637],{"class":214},[204,14909,1256],{"class":210},[204,14911,14912],{"class":319},"\"圆的周长\"",[204,14914,1256],{"class":210},[204,14916,14917],{"class":214},"c1.",[204,14919,14920],{"class":2049},"calculateZC",[204,14922,2513],{"class":214},[204,14924,1256],{"class":210},[204,14926,1278],{"class":214},[204,14928,14929],{"class":206,"line":1813},[204,14930,1651],{"class":214},[19,14932,14933],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[196,14935,14937],{"className":198,"code":14936,"language":200,"meta":125,"style":125},"#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",[81,14938,14939,14945,14955,14961,14967,14971,14975,14980,14987,14992,15010,15014,15024,15028,15033,15049,15053,15063,15067,15072,15080,15084,15116,15120,15124,15132,15136,15141,15146,15160,15174,15183],{"__ignoreMap":125},[204,14940,14941,14943],{"class":206,"line":207},[204,14942,2035],{"class":210},[204,14944,2038],{"class":319},[204,14946,14947,14949,14951,14953],{"class":206,"line":126},[204,14948,2043],{"class":210},[204,14950,2046],{"class":210},[204,14952,2050],{"class":2049},[204,14954,1377],{"class":214},[204,14956,14957,14959],{"class":206,"line":131},[204,14958,2035],{"class":210},[204,14960,7836],{"class":319},[204,14962,14963,14965],{"class":206,"line":1281},[204,14964,14781],{"class":210},[204,14966,7849],{"class":2049},[204,14968,14969],{"class":206,"line":1287},[204,14970,1632],{"class":214},[204,14972,14973],{"class":206,"line":1301},[204,14974,14803],{"class":210},[204,14976,14977],{"class":206,"line":1307},[204,14978,14979],{"class":214},"    string m_name;\n",[204,14981,14982,14984],{"class":206,"line":1398},[204,14983,2071],{"class":210},[204,14985,14986],{"class":214}," m_id;\n",[204,14988,14989],{"class":206,"line":1404},[204,14990,14991],{"class":273},"    \u002F\u002F赋值姓名\n",[204,14993,14994,14997,15000,15002,15005,15008],{"class":206,"line":1416},[204,14995,14996],{"class":210},"    void",[204,14998,14999],{"class":2049}," setName",[204,15001,215],{"class":214},[204,15003,15004],{"class":2049},"string",[204,15006,15007],{"class":5303}," name",[204,15009,221],{"class":214},[204,15011,15012],{"class":206,"line":1698},[204,15013,2116],{"class":214},[204,15015,15016,15019,15021],{"class":206,"line":1703},[204,15017,15018],{"class":214},"        m_name",[204,15020,260],{"class":210},[204,15022,15023],{"class":214},"name;\n",[204,15025,15026],{"class":206,"line":1709},[204,15027,2273],{"class":214},[204,15029,15030],{"class":206,"line":1714},[204,15031,15032],{"class":273},"    \u002F\u002F赋值学号\n",[204,15034,15035,15037,15040,15042,15044,15047],{"class":206,"line":1728},[204,15036,14996],{"class":210},[204,15038,15039],{"class":2049}," setId",[204,15041,215],{"class":214},[204,15043,218],{"class":210},[204,15045,15046],{"class":5303}," id",[204,15048,221],{"class":214},[204,15050,15051],{"class":206,"line":1733},[204,15052,2116],{"class":214},[204,15054,15055,15058,15060],{"class":206,"line":1739},[204,15056,15057],{"class":214},"        m_id",[204,15059,260],{"class":210},[204,15061,15062],{"class":214},"id;\n",[204,15064,15065],{"class":206,"line":1760},[204,15066,2273],{"class":214},[204,15068,15069],{"class":206,"line":1765},[204,15070,15071],{"class":273},"    \u002F\u002F打印学生信息\n",[204,15073,15074,15076,15078],{"class":206,"line":1779},[204,15075,14996],{"class":210},[204,15077,9702],{"class":2049},[204,15079,2062],{"class":214},[204,15081,15082],{"class":206,"line":1784},[204,15083,2116],{"class":214},[204,15085,15086,15088,15090,15093,15095,15098,15100,15102,15104,15107,15109,15112,15114],{"class":206,"line":1813},[204,15087,3537],{"class":214},[204,15089,1256],{"class":210},[204,15091,15092],{"class":319},"\"姓名：\"",[204,15094,1256],{"class":210},[204,15096,15097],{"class":214},"m_name",[204,15099,1256],{"class":210},[204,15101,4445],{"class":319},[204,15103,1256],{"class":210},[204,15105,15106],{"class":319},"\"学号：\"",[204,15108,1256],{"class":210},[204,15110,15111],{"class":214},"m_id",[204,15113,1256],{"class":210},[204,15115,1278],{"class":214},[204,15117,15118],{"class":206,"line":1818},[204,15119,2273],{"class":214},[204,15121,15122],{"class":206,"line":1835},[204,15123,4081],{"class":214},[204,15125,15126,15128,15130],{"class":206,"line":1840},[204,15127,218],{"class":210},[204,15129,2059],{"class":2049},[204,15131,2062],{"class":214},[204,15133,15134],{"class":206,"line":1845},[204,15135,1632],{"class":214},[204,15137,15138],{"class":206,"line":1850},[204,15139,15140],{"class":273},"    \u002F\u002F实例化\n",[204,15142,15143],{"class":206,"line":1864},[204,15144,15145],{"class":214},"    Student s1;\n",[204,15147,15148,15151,15154,15156,15158],{"class":206,"line":1869},[204,15149,15150],{"class":214},"    s1.",[204,15152,15153],{"class":2049},"setName",[204,15155,215],{"class":214},[204,15157,8003],{"class":319},[204,15159,2805],{"class":214},[204,15161,15162,15164,15167,15169,15172],{"class":206,"line":2663},[204,15163,15150],{"class":214},[204,15165,15166],{"class":2049},"setId",[204,15168,215],{"class":214},[204,15170,15171],{"class":263},"123456",[204,15173,2805],{"class":214},[204,15175,15176,15178,15181],{"class":206,"line":2677},[204,15177,15150],{"class":214},[204,15179,15180],{"class":2049},"printInfo",[204,15182,5723],{"class":214},[204,15184,15185],{"class":206,"line":2685},[204,15186,1651],{"class":214},[19,15188,15189],{},"类中的属性和行为统称为成员",[19,15191,15192],{},"属性：成员属性(成员变量)",[19,15194,15195],{},"方法：成员函数(成员方法)",[19,15197,15198],{},[30,15199,15200],{},"封装意义二：",[19,15202,15203],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15205,15206],{},"访问权限有三种：",[161,15208,15209,15212,15215],{},[71,15210,15211],{},"public        公共权限",[71,15213,15214],{},"protected 保护权限",[71,15216,15217],{},"private      私有权限",[19,15219,15220],{},[30,15221,15222],{},"示例：",[196,15224,15226],{"className":10028,"code":15225,"language":10030,"meta":125,"style":125},"\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",[81,15227,15228,15233,15238,15243,15248,15252,15259,15263,15268,15272,15277,15281,15286,15291,15296,15300,15305,15310,15317,15321,15325,15333,15337,15348,15360,15372,15376,15380,15384,15392,15396,15401,15413,15421,15429,15433,15443,15447,15455],{"__ignoreMap":125},[204,15229,15230],{"class":206,"line":207},[204,15231,15232],{"class":273},"\u002F\u002F三种权限\n",[204,15234,15235],{"class":206,"line":126},[204,15236,15237],{"class":273},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[204,15239,15240],{"class":206,"line":131},[204,15241,15242],{"class":273},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[204,15244,15245],{"class":206,"line":1281},[204,15246,15247],{"class":273},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[204,15249,15250],{"class":206,"line":1287},[204,15251,2486],{"emptyLinePlaceholder":135},[204,15253,15254,15256],{"class":206,"line":1301},[204,15255,14781],{"class":210},[204,15257,15258],{"class":2049}," Person\n",[204,15260,15261],{"class":206,"line":1307},[204,15262,1632],{"class":214},[204,15264,15265],{"class":206,"line":1398},[204,15266,15267],{"class":273},"    \u002F\u002F姓名  公共权限\n",[204,15269,15270],{"class":206,"line":1404},[204,15271,14803],{"class":210},[204,15273,15274],{"class":206,"line":1416},[204,15275,15276],{"class":214},"    string m_Name;\n",[204,15278,15279],{"class":206,"line":1698},[204,15280,2486],{"emptyLinePlaceholder":135},[204,15282,15283],{"class":206,"line":1703},[204,15284,15285],{"class":273},"    \u002F\u002F汽车  保护权限\n",[204,15287,15288],{"class":206,"line":1709},[204,15289,15290],{"class":210},"protected:\n",[204,15292,15293],{"class":206,"line":1714},[204,15294,15295],{"class":214},"    string m_Car;\n",[204,15297,15298],{"class":206,"line":1728},[204,15299,2486],{"emptyLinePlaceholder":135},[204,15301,15302],{"class":206,"line":1733},[204,15303,15304],{"class":273},"    \u002F\u002F银行卡密码  私有权限\n",[204,15306,15307],{"class":206,"line":1739},[204,15308,15309],{"class":210},"private:\n",[204,15311,15312,15314],{"class":206,"line":1760},[204,15313,2071],{"class":210},[204,15315,15316],{"class":214}," m_Password;\n",[204,15318,15319],{"class":206,"line":1765},[204,15320,2486],{"emptyLinePlaceholder":135},[204,15322,15323],{"class":206,"line":1779},[204,15324,14803],{"class":210},[204,15326,15327,15329,15331],{"class":206,"line":1784},[204,15328,14996],{"class":210},[204,15330,11472],{"class":2049},[204,15332,2062],{"class":214},[204,15334,15335],{"class":206,"line":1813},[204,15336,2116],{"class":214},[204,15338,15339,15342,15344,15346],{"class":206,"line":1818},[204,15340,15341],{"class":214},"        m_Name ",[204,15343,260],{"class":210},[204,15345,9025],{"class":319},[204,15347,1377],{"class":214},[204,15349,15350,15353,15355,15358],{"class":206,"line":1835},[204,15351,15352],{"class":214},"        m_Car ",[204,15354,260],{"class":210},[204,15356,15357],{"class":319}," \"拖拉机\"",[204,15359,1377],{"class":214},[204,15361,15362,15365,15367,15370],{"class":206,"line":1840},[204,15363,15364],{"class":214},"        m_Password ",[204,15366,260],{"class":210},[204,15368,15369],{"class":263}," 123456",[204,15371,1377],{"class":214},[204,15373,15374],{"class":206,"line":1845},[204,15375,2273],{"class":214},[204,15377,15378],{"class":206,"line":1850},[204,15379,4081],{"class":214},[204,15381,15382],{"class":206,"line":1864},[204,15383,2486],{"emptyLinePlaceholder":135},[204,15385,15386,15388,15390],{"class":206,"line":1869},[204,15387,218],{"class":210},[204,15389,2059],{"class":2049},[204,15391,10940],{"class":214},[204,15393,15394],{"class":206,"line":2663},[204,15395,2486],{"emptyLinePlaceholder":135},[204,15397,15398],{"class":206,"line":2677},[204,15399,15400],{"class":214},"    Person p;\n",[204,15402,15403,15406,15408,15411],{"class":206,"line":2685},[204,15404,15405],{"class":214},"    p.m_Name ",[204,15407,260],{"class":210},[204,15409,15410],{"class":319}," \"李四\"",[204,15412,1377],{"class":214},[204,15414,15415,15418],{"class":206,"line":2690},[204,15416,15417],{"class":273},"    \u002F\u002Fp.m_Car = \"奔驰\";",[204,15419,15420],{"class":273},"  \u002F\u002F保护权限类外访问不到\n",[204,15422,15423,15426],{"class":206,"line":2696},[204,15424,15425],{"class":273},"    \u002F\u002Fp.m_Password = 123;",[204,15427,15428],{"class":273}," \u002F\u002F私有权限类外访问不到\n",[204,15430,15431],{"class":206,"line":2702},[204,15432,2486],{"emptyLinePlaceholder":135},[204,15434,15435,15437,15439,15441],{"class":206,"line":2707},[204,15436,2389],{"class":2049},[204,15438,215],{"class":214},[204,15440,2394],{"class":319},[204,15442,2805],{"class":214},[204,15444,15445],{"class":206,"line":8035},[204,15446,2486],{"emptyLinePlaceholder":135},[204,15448,15449,15451,15453],{"class":206,"line":8059},[204,15450,4176],{"class":210},[204,15452,4179],{"class":263},[204,15454,1377],{"class":214},[204,15456,15457],{"class":206,"line":8064},[204,15458,1651],{"class":214},[49,15460,15462],{"id":15461},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15464,15465,15466,15469,15470],{},"在C++中 struct和class唯一的",[30,15467,15468],{},"区别","就在于 ",[30,15471,15472],{},"默认的访问权限不同",[19,15474,15475],{},"区别：",[68,15477,15478,15481],{},[71,15479,15480],{},"struct 默认权限为公共",[71,15482,15483],{},"class   默认权限为私有",[196,15485,15487],{"className":10028,"code":15486,"language":10030,"meta":125,"style":125},"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",[81,15488,15489,15496,15500,15510,15514,15518,15525,15529,15539,15543,15547,15555,15559,15564,15578,15582,15587,15601,15605,15615,15619,15627],{"__ignoreMap":125},[204,15490,15491,15493],{"class":206,"line":207},[204,15492,14781],{"class":210},[204,15494,15495],{"class":2049}," C1\n",[204,15497,15498],{"class":206,"line":126},[204,15499,1632],{"class":214},[204,15501,15502,15504,15507],{"class":206,"line":131},[204,15503,2071],{"class":210},[204,15505,15506],{"class":214},"  m_A;",[204,15508,15509],{"class":273}," \u002F\u002F默认是私有权限\n",[204,15511,15512],{"class":206,"line":1281},[204,15513,4081],{"class":214},[204,15515,15516],{"class":206,"line":1287},[204,15517,2486],{"emptyLinePlaceholder":135},[204,15519,15520,15522],{"class":206,"line":1301},[204,15521,7846],{"class":210},[204,15523,15524],{"class":2049}," C2\n",[204,15526,15527],{"class":206,"line":1307},[204,15528,1632],{"class":214},[204,15530,15531,15533,15536],{"class":206,"line":1398},[204,15532,2071],{"class":210},[204,15534,15535],{"class":214}," m_A;",[204,15537,15538],{"class":273},"  \u002F\u002F默认是公共权限\n",[204,15540,15541],{"class":206,"line":1404},[204,15542,4081],{"class":214},[204,15544,15545],{"class":206,"line":1416},[204,15546,2486],{"emptyLinePlaceholder":135},[204,15548,15549,15551,15553],{"class":206,"line":1698},[204,15550,218],{"class":210},[204,15552,2059],{"class":2049},[204,15554,10940],{"class":214},[204,15556,15557],{"class":206,"line":1703},[204,15558,2486],{"emptyLinePlaceholder":135},[204,15560,15561],{"class":206,"line":1709},[204,15562,15563],{"class":214},"    C1 c1;\n",[204,15565,15566,15569,15571,15573,15575],{"class":206,"line":1714},[204,15567,15568],{"class":214},"    c1.m_A ",[204,15570,260],{"class":210},[204,15572,2124],{"class":263},[204,15574,270],{"class":214},[204,15576,15577],{"class":273}," \u002F\u002F错误，访问权限是私有\n",[204,15579,15580],{"class":206,"line":1728},[204,15581,2486],{"emptyLinePlaceholder":135},[204,15583,15584],{"class":206,"line":1733},[204,15585,15586],{"class":214},"    C2 c2;\n",[204,15588,15589,15592,15594,15596,15598],{"class":206,"line":1739},[204,15590,15591],{"class":214},"    c2.m_A ",[204,15593,260],{"class":210},[204,15595,2124],{"class":263},[204,15597,270],{"class":214},[204,15599,15600],{"class":273}," \u002F\u002F正确，访问权限是公共\n",[204,15602,15603],{"class":206,"line":1760},[204,15604,2486],{"emptyLinePlaceholder":135},[204,15606,15607,15609,15611,15613],{"class":206,"line":1765},[204,15608,2389],{"class":2049},[204,15610,215],{"class":214},[204,15612,2394],{"class":319},[204,15614,2805],{"class":214},[204,15616,15617],{"class":206,"line":1779},[204,15618,2486],{"emptyLinePlaceholder":135},[204,15620,15621,15623,15625],{"class":206,"line":1784},[204,15622,4176],{"class":210},[204,15624,4179],{"class":263},[204,15626,1377],{"class":214},[204,15628,15629],{"class":206,"line":1813},[204,15630,1651],{"class":214},[49,15632,15634],{"id":15633},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15636,15637],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15639,15640],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15642,15643],{},[30,15644,15222],{},[196,15646,15648],{"className":10028,"code":15647,"language":10030,"meta":125,"style":125},"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",[81,15649,15650,15660,15664,15668,15673,15687,15696,15700,15710,15714,15721,15725,15729,15733,15738,15747,15754,15758,15763,15779,15802,15815,15822,15826,15835,15839,15843,15848,15864,15874,15878,15882,15886,15894,15898,15908,15912,15920,15924,15928,15936,15940,15944,15949,15962,15985,15989,15994,16007,16029,16033,16038,16052,16060,16064,16074,16078,16086],{"__ignoreMap":125},[204,15651,15652,15654,15657],{"class":206,"line":207},[204,15653,14781],{"class":210},[204,15655,15656],{"class":2049}," Person",[204,15658,15659],{"class":214}," {\n",[204,15661,15662],{"class":206,"line":126},[204,15663,14803],{"class":210},[204,15665,15666],{"class":206,"line":131},[204,15667,2486],{"emptyLinePlaceholder":135},[204,15669,15670],{"class":206,"line":1281},[204,15671,15672],{"class":273},"    \u002F\u002F姓名设置可读可写\n",[204,15674,15675,15677,15679,15681,15683,15685],{"class":206,"line":1287},[204,15676,14996],{"class":210},[204,15678,14999],{"class":2049},[204,15680,215],{"class":214},[204,15682,15004],{"class":2049},[204,15684,15007],{"class":5303},[204,15686,12529],{"class":214},[204,15688,15689,15691,15693],{"class":206,"line":1301},[204,15690,15341],{"class":214},[204,15692,260],{"class":210},[204,15694,15695],{"class":214}," name;\n",[204,15697,15698],{"class":206,"line":1307},[204,15699,2273],{"class":214},[204,15701,15702,15705,15708],{"class":206,"line":1398},[204,15703,15704],{"class":2049},"    string",[204,15706,15707],{"class":2049}," getName",[204,15709,2062],{"class":214},[204,15711,15712],{"class":206,"line":1404},[204,15713,2116],{"class":214},[204,15715,15716,15718],{"class":206,"line":1416},[204,15717,14839],{"class":210},[204,15719,15720],{"class":214}," m_Name;\n",[204,15722,15723],{"class":206,"line":1698},[204,15724,2273],{"class":214},[204,15726,15727],{"class":206,"line":1703},[204,15728,2486],{"emptyLinePlaceholder":135},[204,15730,15731],{"class":206,"line":1709},[204,15732,2486],{"emptyLinePlaceholder":135},[204,15734,15735],{"class":206,"line":1714},[204,15736,15737],{"class":273},"    \u002F\u002F获取年龄 \n",[204,15739,15740,15742,15745],{"class":206,"line":1728},[204,15741,2071],{"class":210},[204,15743,15744],{"class":2049}," getAge",[204,15746,10940],{"class":214},[204,15748,15749,15751],{"class":206,"line":1733},[204,15750,14839],{"class":210},[204,15752,15753],{"class":214}," m_Age;\n",[204,15755,15756],{"class":206,"line":1739},[204,15757,2273],{"class":214},[204,15759,15760],{"class":206,"line":1760},[204,15761,15762],{"class":273},"    \u002F\u002F设置年龄\n",[204,15764,15765,15767,15770,15772,15774,15777],{"class":206,"line":1765},[204,15766,14996],{"class":210},[204,15768,15769],{"class":2049}," setAge",[204,15771,215],{"class":214},[204,15773,218],{"class":210},[204,15775,15776],{"class":5303}," age",[204,15778,12529],{"class":214},[204,15780,15781,15783,15786,15788,15790,15792,15795,15797,15800],{"class":206,"line":1779},[204,15782,2583],{"class":210},[204,15784,15785],{"class":214}," (age ",[204,15787,1123],{"class":210},[204,15789,4179],{"class":263},[204,15791,3341],{"class":210},[204,15793,15794],{"class":214}," age ",[204,15796,1173],{"class":210},[204,15798,15799],{"class":263}," 150",[204,15801,12529],{"class":214},[204,15803,15804,15806,15808,15811,15813],{"class":206,"line":1784},[204,15805,9806],{"class":214},[204,15807,1256],{"class":210},[204,15809,15810],{"class":319}," \"你个老妖精!\"",[204,15812,1531],{"class":210},[204,15814,8927],{"class":214},[204,15816,15817,15820],{"class":206,"line":1813},[204,15818,15819],{"class":210},"            return",[204,15821,1377],{"class":214},[204,15823,15824],{"class":206,"line":1818},[204,15825,2615],{"class":214},[204,15827,15828,15831,15833],{"class":206,"line":1835},[204,15829,15830],{"class":214},"        m_Age ",[204,15832,260],{"class":210},[204,15834,7884],{"class":214},[204,15836,15837],{"class":206,"line":1840},[204,15838,2273],{"class":214},[204,15840,15841],{"class":206,"line":1845},[204,15842,2486],{"emptyLinePlaceholder":135},[204,15844,15845],{"class":206,"line":1850},[204,15846,15847],{"class":273},"    \u002F\u002F情人设置为只写\n",[204,15849,15850,15852,15855,15857,15859,15862],{"class":206,"line":1864},[204,15851,14996],{"class":210},[204,15853,15854],{"class":2049}," setLover",[204,15856,215],{"class":214},[204,15858,15004],{"class":2049},[204,15860,15861],{"class":5303}," lover",[204,15863,12529],{"class":214},[204,15865,15866,15869,15871],{"class":206,"line":1869},[204,15867,15868],{"class":214},"        m_Lover ",[204,15870,260],{"class":210},[204,15872,15873],{"class":214}," lover;\n",[204,15875,15876],{"class":206,"line":2663},[204,15877,2273],{"class":214},[204,15879,15880],{"class":206,"line":2677},[204,15881,2486],{"emptyLinePlaceholder":135},[204,15883,15884],{"class":206,"line":2685},[204,15885,15309],{"class":210},[204,15887,15888,15891],{"class":206,"line":2690},[204,15889,15890],{"class":214},"    string m_Name;",[204,15892,15893],{"class":273}," \u002F\u002F可读可写  姓名\n",[204,15895,15896],{"class":206,"line":2696},[204,15897,13297],{"class":214},[204,15899,15900,15902,15905],{"class":206,"line":2702},[204,15901,2071],{"class":210},[204,15903,15904],{"class":214}," m_Age;",[204,15906,15907],{"class":273}," \u002F\u002F只读  年龄\n",[204,15909,15910],{"class":206,"line":2707},[204,15911,2486],{"emptyLinePlaceholder":135},[204,15913,15914,15917],{"class":206,"line":8035},[204,15915,15916],{"class":214},"    string m_Lover;",[204,15918,15919],{"class":273}," \u002F\u002F只写  情人\n",[204,15921,15922],{"class":206,"line":8059},[204,15923,4081],{"class":214},[204,15925,15926],{"class":206,"line":8064},[204,15927,2486],{"emptyLinePlaceholder":135},[204,15929,15930,15932,15934],{"class":206,"line":8070},[204,15931,218],{"class":210},[204,15933,2059],{"class":2049},[204,15935,10940],{"class":214},[204,15937,15938],{"class":206,"line":8097},[204,15939,2486],{"emptyLinePlaceholder":135},[204,15941,15942],{"class":206,"line":8102},[204,15943,15400],{"class":214},[204,15945,15946],{"class":206,"line":8108},[204,15947,15948],{"class":273},"    \u002F\u002F姓名设置\n",[204,15950,15951,15954,15956,15958,15960],{"class":206,"line":8120},[204,15952,15953],{"class":214},"    p.",[204,15955,15153],{"class":2049},[204,15957,215],{"class":214},[204,15959,8003],{"class":319},[204,15961,2805],{"class":214},[204,15963,15964,15966,15968,15971,15973,15976,15979,15981,15983],{"class":206,"line":8132},[204,15965,6616],{"class":214},[204,15967,1256],{"class":210},[204,15969,15970],{"class":319}," \"姓名： \"",[204,15972,1531],{"class":210},[204,15974,15975],{"class":214}," p.",[204,15977,15978],{"class":2049},"getName",[204,15980,13137],{"class":214},[204,15982,1256],{"class":210},[204,15984,8927],{"class":214},[204,15986,15987],{"class":206,"line":8144},[204,15988,2486],{"emptyLinePlaceholder":135},[204,15990,15991],{"class":206,"line":9803},[204,15992,15993],{"class":273},"    \u002F\u002F年龄设置\n",[204,15995,15996,15998,16001,16003,16005],{"class":206,"line":9828},[204,15997,15953],{"class":214},[204,15999,16000],{"class":2049},"setAge",[204,16002,215],{"class":214},[204,16004,869],{"class":263},[204,16006,2805],{"class":214},[204,16008,16009,16011,16013,16016,16018,16020,16023,16025,16027],{"class":206,"line":9851},[204,16010,6616],{"class":214},[204,16012,1256],{"class":210},[204,16014,16015],{"class":319}," \"年龄： \"",[204,16017,1531],{"class":210},[204,16019,15975],{"class":214},[204,16021,16022],{"class":2049},"getAge",[204,16024,13137],{"class":214},[204,16026,1256],{"class":210},[204,16028,8927],{"class":214},[204,16030,16031],{"class":206,"line":9875},[204,16032,2486],{"emptyLinePlaceholder":135},[204,16034,16035],{"class":206,"line":9880},[204,16036,16037],{"class":273},"    \u002F\u002F情人设置\n",[204,16039,16040,16042,16045,16047,16050],{"class":206,"line":9885},[204,16041,15953],{"class":214},[204,16043,16044],{"class":2049},"setLover",[204,16046,215],{"class":214},[204,16048,16049],{"class":319},"\"苍井\"",[204,16051,2805],{"class":214},[204,16053,16054,16057],{"class":206,"line":9890},[204,16055,16056],{"class":273},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[204,16058,16059],{"class":273},"  \u002F\u002F只写属性，不可以读取\n",[204,16061,16062],{"class":206,"line":9899},[204,16063,2486],{"emptyLinePlaceholder":135},[204,16065,16066,16068,16070,16072],{"class":206,"line":9904},[204,16067,2389],{"class":2049},[204,16069,215],{"class":214},[204,16071,2394],{"class":319},[204,16073,2805],{"class":214},[204,16075,16076],{"class":206,"line":9910},[204,16077,2486],{"emptyLinePlaceholder":135},[204,16079,16080,16082,16084],{"class":206,"line":9931},[204,16081,4176],{"class":210},[204,16083,4179],{"class":263},[204,16085,1377],{"class":214},[204,16087,16088],{"class":206,"line":9937},[204,16089,1651],{"class":214},[49,16091,16093],{"id":16092},"_814封装案例","8.1.4封装案例",[161,16095,16096],{},[71,16097,16098,16101],{},[30,16099,16100],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[68,16103,16104,16107],{},[71,16105,16106],{},"求出立方体的面积和体积",[71,16108,16109],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[196,16111,16113],{"className":198,"code":16112,"language":200,"meta":125,"style":125},"#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",[81,16114,16115,16121,16131,16138,16142,16146,16151,16181,16185,16195,16205,16215,16219,16228,16232,16268,16272,16281,16285,16301,16305,16310,16319,16323,16330,16334,16343,16347,16354,16358,16367,16371,16378,16382,16387,16404,16408,16454,16458,16467,16471,16475,16479,16488,16492,16496,16501,16505,16511,16517,16523,16527,16531,16536,16558,16562,16616,16620,16628,16632,16637,16642,16655,16662,16678,16689,16695,16718,16724,16747,16761,16781,16787,16798,16821,16843,16848,16854,16868,16881,16886,16900,16905,16911,16916,16930,16935,16940,16954,16966,16971,16984,16989,16994,16999,17012,17017],{"__ignoreMap":125},[204,16116,16117,16119],{"class":206,"line":207},[204,16118,2035],{"class":210},[204,16120,2038],{"class":319},[204,16122,16123,16125,16127,16129],{"class":206,"line":126},[204,16124,2043],{"class":210},[204,16126,2046],{"class":210},[204,16128,2050],{"class":2049},[204,16130,1377],{"class":214},[204,16132,16133,16135],{"class":206,"line":131},[204,16134,14781],{"class":210},[204,16136,16137],{"class":2049}," Cube\n",[204,16139,16140],{"class":206,"line":1281},[204,16141,1632],{"class":214},[204,16143,16144],{"class":206,"line":1287},[204,16145,14803],{"class":210},[204,16147,16148],{"class":206,"line":1301},[204,16149,16150],{"class":273},"    \u002F\u002F输入长宽高\n",[204,16152,16153,16155,16158,16160,16162,16165,16167,16169,16172,16174,16176,16179],{"class":206,"line":1307},[204,16154,14996],{"class":210},[204,16156,16157],{"class":2049}," setLwh",[204,16159,215],{"class":214},[204,16161,218],{"class":210},[204,16163,16164],{"class":5303}," l",[204,16166,591],{"class":214},[204,16168,218],{"class":210},[204,16170,16171],{"class":5303}," w",[204,16173,591],{"class":214},[204,16175,218],{"class":210},[204,16177,16178],{"class":5303}," h",[204,16180,221],{"class":214},[204,16182,16183],{"class":206,"line":1398},[204,16184,2116],{"class":214},[204,16186,16187,16190,16192],{"class":206,"line":1404},[204,16188,16189],{"class":214},"        m_L",[204,16191,260],{"class":210},[204,16193,16194],{"class":214},"l;\n",[204,16196,16197,16200,16202],{"class":206,"line":1416},[204,16198,16199],{"class":214},"        m_W",[204,16201,260],{"class":210},[204,16203,16204],{"class":214},"w;\n",[204,16206,16207,16210,16212],{"class":206,"line":1698},[204,16208,16209],{"class":214},"        m_H",[204,16211,260],{"class":210},[204,16213,16214],{"class":214},"h;\n",[204,16216,16217],{"class":206,"line":1703},[204,16218,2273],{"class":214},[204,16220,16221,16223,16226],{"class":206,"line":1709},[204,16222,2071],{"class":210},[204,16224,16225],{"class":2049}," mianji",[204,16227,2062],{"class":214},[204,16229,16230],{"class":206,"line":1714},[204,16231,2116],{"class":214},[204,16233,16234,16236,16238,16240,16243,16245,16248,16250,16253,16255,16258,16260,16263,16265],{"class":206,"line":1728},[204,16235,14839],{"class":210},[204,16237,14842],{"class":263},[204,16239,668],{"class":210},[204,16241,16242],{"class":214},"(m_L",[204,16244,668],{"class":210},[204,16246,16247],{"class":214},"m_W ",[204,16249,694],{"class":210},[204,16251,16252],{"class":214}," m_L",[204,16254,668],{"class":210},[204,16256,16257],{"class":214},"m_H ",[204,16259,694],{"class":210},[204,16261,16262],{"class":214}," m_W",[204,16264,668],{"class":210},[204,16266,16267],{"class":214},"m_H);\n",[204,16269,16270],{"class":206,"line":1733},[204,16271,2273],{"class":214},[204,16273,16274,16276,16279],{"class":206,"line":1739},[204,16275,2071],{"class":210},[204,16277,16278],{"class":2049}," tiji",[204,16280,2062],{"class":214},[204,16282,16283],{"class":206,"line":1760},[204,16284,2116],{"class":214},[204,16286,16287,16289,16291,16293,16296,16298],{"class":206,"line":1765},[204,16288,14839],{"class":210},[204,16290,16252],{"class":214},[204,16292,668],{"class":210},[204,16294,16295],{"class":214},"m_W",[204,16297,668],{"class":210},[204,16299,16300],{"class":214},"m_H;\n",[204,16302,16303],{"class":206,"line":1779},[204,16304,2273],{"class":214},[204,16306,16307],{"class":206,"line":1784},[204,16308,16309],{"class":273},"    \u002F\u002F获取长宽高\n",[204,16311,16312,16314,16317],{"class":206,"line":1813},[204,16313,2071],{"class":210},[204,16315,16316],{"class":2049}," getLength",[204,16318,2062],{"class":214},[204,16320,16321],{"class":206,"line":1818},[204,16322,2116],{"class":214},[204,16324,16325,16327],{"class":206,"line":1835},[204,16326,14839],{"class":210},[204,16328,16329],{"class":214}," m_L;\n",[204,16331,16332],{"class":206,"line":1840},[204,16333,2273],{"class":214},[204,16335,16336,16338,16341],{"class":206,"line":1845},[204,16337,2071],{"class":210},[204,16339,16340],{"class":2049}," getWidth",[204,16342,2062],{"class":214},[204,16344,16345],{"class":206,"line":1850},[204,16346,2116],{"class":214},[204,16348,16349,16351],{"class":206,"line":1864},[204,16350,14839],{"class":210},[204,16352,16353],{"class":214}," m_W;\n",[204,16355,16356],{"class":206,"line":1869},[204,16357,2273],{"class":214},[204,16359,16360,16362,16365],{"class":206,"line":2663},[204,16361,2071],{"class":210},[204,16363,16364],{"class":2049}," getHeight",[204,16366,2062],{"class":214},[204,16368,16369],{"class":206,"line":2677},[204,16370,2116],{"class":214},[204,16372,16373,16375],{"class":206,"line":2685},[204,16374,14839],{"class":210},[204,16376,16377],{"class":214}," m_H;\n",[204,16379,16380],{"class":206,"line":2690},[204,16381,2273],{"class":214},[204,16383,16384],{"class":206,"line":2696},[204,16385,16386],{"class":273},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[204,16388,16389,16392,16395,16397,16400,16402],{"class":206,"line":2702},[204,16390,16391],{"class":210},"    bool",[204,16393,16394],{"class":2049}," isEqual",[204,16396,215],{"class":214},[204,16398,16399],{"class":2049},"Cube",[204,16401,2935],{"class":5303},[204,16403,221],{"class":214},[204,16405,16406],{"class":206,"line":2707},[204,16407,2116],{"class":214},[204,16409,16410,16412,16415,16418,16420,16422,16425,16427,16430,16433,16435,16437,16440,16442,16444,16447,16449,16451],{"class":206,"line":8035},[204,16411,2583],{"class":210},[204,16413,16414],{"class":214}," (c.",[204,16416,16417],{"class":2049},"getLength",[204,16419,13137],{"class":214},[204,16421,3035],{"class":210},[204,16423,16424],{"class":214}," m_L ",[204,16426,1801],{"class":210},[204,16428,16429],{"class":214}," c.",[204,16431,16432],{"class":2049},"getWidth",[204,16434,13137],{"class":214},[204,16436,3035],{"class":210},[204,16438,16439],{"class":214}," m_W ",[204,16441,1801],{"class":210},[204,16443,16429],{"class":214},[204,16445,16446],{"class":2049},"getHeight",[204,16448,13137],{"class":214},[204,16450,3035],{"class":210},[204,16452,16453],{"class":214}," m_H)\n",[204,16455,16456],{"class":206,"line":8059},[204,16457,2596],{"class":214},[204,16459,16460,16462,16465],{"class":206,"line":8064},[204,16461,15819],{"class":210},[204,16463,16464],{"class":263}," true",[204,16466,1377],{"class":214},[204,16468,16469],{"class":206,"line":8070},[204,16470,2615],{"class":214},[204,16472,16473],{"class":206,"line":8097},[204,16474,2656],{"class":210},[204,16476,16477],{"class":206,"line":8102},[204,16478,2596],{"class":214},[204,16480,16481,16483,16486],{"class":206,"line":8108},[204,16482,15819],{"class":210},[204,16484,16485],{"class":263}," false",[204,16487,1377],{"class":214},[204,16489,16490],{"class":206,"line":8120},[204,16491,2615],{"class":214},[204,16493,16494],{"class":206,"line":8132},[204,16495,2273],{"class":214},[204,16497,16498],{"class":206,"line":8144},[204,16499,16500],{"class":273},"    \u002F\u002F私有属性\n",[204,16502,16503],{"class":206,"line":9803},[204,16504,15309],{"class":210},[204,16506,16507,16509],{"class":206,"line":9828},[204,16508,2071],{"class":210},[204,16510,16329],{"class":214},[204,16512,16513,16515],{"class":206,"line":9851},[204,16514,2071],{"class":210},[204,16516,16353],{"class":214},[204,16518,16519,16521],{"class":206,"line":9875},[204,16520,2071],{"class":210},[204,16522,16377],{"class":214},[204,16524,16525],{"class":206,"line":9880},[204,16526,2486],{"emptyLinePlaceholder":135},[204,16528,16529],{"class":206,"line":9885},[204,16530,4081],{"class":214},[204,16532,16533],{"class":206,"line":9890},[204,16534,16535],{"class":273},"\u002F\u002F全局函数判断两个立方体是否相等\n",[204,16537,16538,16540,16542,16544,16546,16549,16551,16553,16556],{"class":206,"line":9899},[204,16539,1441],{"class":210},[204,16541,16394],{"class":2049},[204,16543,215],{"class":214},[204,16545,16399],{"class":2049},[204,16547,16548],{"class":5303}," c1",[204,16550,591],{"class":214},[204,16552,16399],{"class":2049},[204,16554,16555],{"class":5303}," c2",[204,16557,221],{"class":214},[204,16559,16560],{"class":206,"line":9904},[204,16561,1632],{"class":214},[204,16563,16564,16566,16569,16571,16573,16575,16578,16580,16583,16585,16587,16589,16591,16593,16595,16597,16599,16601,16603,16605,16607,16609,16611,16613],{"class":206,"line":9910},[204,16565,4176],{"class":210},[204,16567,16568],{"class":214}," (c1.",[204,16570,16417],{"class":2049},[204,16572,13137],{"class":214},[204,16574,3035],{"class":210},[204,16576,16577],{"class":214}," c2.",[204,16579,16417],{"class":2049},[204,16581,16582],{"class":214},"()) ",[204,16584,1801],{"class":210},[204,16586,16568],{"class":214},[204,16588,16432],{"class":2049},[204,16590,13137],{"class":214},[204,16592,3035],{"class":210},[204,16594,16577],{"class":214},[204,16596,16432],{"class":2049},[204,16598,16582],{"class":214},[204,16600,1801],{"class":210},[204,16602,16568],{"class":214},[204,16604,16446],{"class":2049},[204,16606,13137],{"class":214},[204,16608,3035],{"class":210},[204,16610,16577],{"class":214},[204,16612,16446],{"class":2049},[204,16614,16615],{"class":214},"());\n",[204,16617,16618],{"class":206,"line":9931},[204,16619,1651],{"class":214},[204,16621,16622,16624,16626],{"class":206,"line":9937},[204,16623,218],{"class":210},[204,16625,2059],{"class":2049},[204,16627,2062],{"class":214},[204,16629,16630],{"class":206,"line":9951},[204,16631,1632],{"class":214},[204,16633,16634],{"class":206,"line":9957},[204,16635,16636],{"class":214},"    Cube c1;\n",[204,16638,16639],{"class":206,"line":9984},[204,16640,16641],{"class":273},"    \u002F\u002F输入立方体的长宽高\n",[204,16643,16644,16646,16648,16651,16653],{"class":206,"line":9993},[204,16645,1637],{"class":214},[204,16647,1256],{"class":210},[204,16649,16650],{"class":319},"\"请输入第一个立方体的长、宽、高：\"",[204,16652,1256],{"class":210},[204,16654,1278],{"class":214},[204,16656,16657,16659],{"class":206,"line":9999},[204,16658,2071],{"class":210},[204,16660,16661],{"class":214}," l,w,h,l1,w1,h1;\n",[204,16663,16664,16666,16668,16670,16672,16674,16676],{"class":206,"line":10007},[204,16665,2098],{"class":214},[204,16667,1516],{"class":210},[204,16669,731],{"class":214},[204,16671,1516],{"class":210},[204,16673,1008],{"class":214},[204,16675,1516],{"class":210},[204,16677,16214],{"class":214},[204,16679,16680,16683,16686],{"class":206,"line":10012},[204,16681,16682],{"class":214},"    c1.",[204,16684,16685],{"class":2049},"setLwh",[204,16687,16688],{"class":214},"(l,w,h);\n",[204,16690,16692],{"class":206,"line":16691},66,[204,16693,16694],{"class":273},"    \u002F\u002F面积\n",[204,16696,16698,16700,16702,16705,16707,16709,16712,16714,16716],{"class":206,"line":16697},67,[204,16699,1637],{"class":214},[204,16701,1256],{"class":210},[204,16703,16704],{"class":319},"\"立方体的表面积为：\"",[204,16706,1256],{"class":210},[204,16708,14917],{"class":214},[204,16710,16711],{"class":2049},"mianji",[204,16713,2513],{"class":214},[204,16715,1256],{"class":210},[204,16717,1278],{"class":214},[204,16719,16721],{"class":206,"line":16720},68,[204,16722,16723],{"class":273},"    \u002F\u002F体积\n",[204,16725,16727,16729,16731,16734,16736,16738,16741,16743,16745],{"class":206,"line":16726},69,[204,16728,1637],{"class":214},[204,16730,1256],{"class":210},[204,16732,16733],{"class":319},"\"立方体的体积为：\"",[204,16735,1256],{"class":210},[204,16737,14917],{"class":214},[204,16739,16740],{"class":2049},"tiji",[204,16742,2513],{"class":214},[204,16744,1256],{"class":210},[204,16746,1278],{"class":214},[204,16748,16750,16752,16754,16757,16759],{"class":206,"line":16749},70,[204,16751,1637],{"class":214},[204,16753,1256],{"class":210},[204,16755,16756],{"class":319},"\"请输入第二个立方体的长、宽、高：\"",[204,16758,1256],{"class":210},[204,16760,1278],{"class":214},[204,16762,16764,16766,16768,16771,16773,16776,16778],{"class":206,"line":16763},71,[204,16765,2098],{"class":214},[204,16767,1516],{"class":210},[204,16769,16770],{"class":214},"l1",[204,16772,1516],{"class":210},[204,16774,16775],{"class":214},"w1",[204,16777,1516],{"class":210},[204,16779,16780],{"class":214},"h1;\n",[204,16782,16784],{"class":206,"line":16783},72,[204,16785,16786],{"class":214},"    Cube c2;\n",[204,16788,16790,16793,16795],{"class":206,"line":16789},73,[204,16791,16792],{"class":214},"    c2.",[204,16794,16685],{"class":2049},[204,16796,16797],{"class":214},"(l1,w1,h1);\n",[204,16799,16801,16803,16805,16808,16810,16813,16815,16817,16819],{"class":206,"line":16800},74,[204,16802,1637],{"class":214},[204,16804,1256],{"class":210},[204,16806,16807],{"class":319},"\"第二个立方体的表面积为：\"",[204,16809,1256],{"class":210},[204,16811,16812],{"class":214},"c2.",[204,16814,16711],{"class":2049},[204,16816,2513],{"class":214},[204,16818,1256],{"class":210},[204,16820,1278],{"class":214},[204,16822,16824,16826,16828,16831,16833,16835,16837,16839,16841],{"class":206,"line":16823},75,[204,16825,1637],{"class":214},[204,16827,1256],{"class":210},[204,16829,16830],{"class":319},"\"第二个立方体的体积为：\"",[204,16832,1256],{"class":210},[204,16834,16812],{"class":214},[204,16836,16740],{"class":2049},[204,16838,2513],{"class":214},[204,16840,1256],{"class":210},[204,16842,1278],{"class":214},[204,16844,16846],{"class":206,"line":16845},76,[204,16847,2486],{"emptyLinePlaceholder":135},[204,16849,16851],{"class":206,"line":16850},77,[204,16852,16853],{"class":273},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[204,16855,16857,16859,16861,16864,16866],{"class":206,"line":16856},78,[204,16858,1637],{"class":214},[204,16860,1256],{"class":210},[204,16862,16863],{"class":319},"\"内部函数判断结果：\"",[204,16865,1256],{"class":210},[204,16867,1278],{"class":214},[204,16869,16871,16873,16875,16878],{"class":206,"line":16870},79,[204,16872,3187],{"class":210},[204,16874,16568],{"class":214},[204,16876,16877],{"class":2049},"isEqual",[204,16879,16880],{"class":214},"(c2))\n",[204,16882,16884],{"class":206,"line":16883},80,[204,16885,2116],{"class":214},[204,16887,16889,16891,16893,16896,16898],{"class":206,"line":16888},81,[204,16890,3537],{"class":214},[204,16892,1256],{"class":210},[204,16894,16895],{"class":319},"\"两个立方体相等\"",[204,16897,1256],{"class":210},[204,16899,1278],{"class":214},[204,16901,16903],{"class":206,"line":16902},82,[204,16904,2273],{"class":214},[204,16906,16908],{"class":206,"line":16907},83,[204,16909,16910],{"class":210},"    else\n",[204,16912,16914],{"class":206,"line":16913},84,[204,16915,2116],{"class":214},[204,16917,16919,16921,16923,16926,16928],{"class":206,"line":16918},85,[204,16920,3537],{"class":214},[204,16922,1256],{"class":210},[204,16924,16925],{"class":319},"\"两个立方体不相等\"",[204,16927,1256],{"class":210},[204,16929,1278],{"class":214},[204,16931,16933],{"class":206,"line":16932},86,[204,16934,2273],{"class":214},[204,16936,16938],{"class":206,"line":16937},87,[204,16939,2486],{"emptyLinePlaceholder":135},[204,16941,16943,16945,16947,16950,16952],{"class":206,"line":16942},88,[204,16944,1637],{"class":214},[204,16946,1256],{"class":210},[204,16948,16949],{"class":319},"\"全局函数判断结果：\"",[204,16951,1256],{"class":210},[204,16953,1278],{"class":214},[204,16955,16957,16959,16961,16963],{"class":206,"line":16956},89,[204,16958,3187],{"class":210},[204,16960,1744],{"class":214},[204,16962,16877],{"class":2049},[204,16964,16965],{"class":214},"(c1, c2))\n",[204,16967,16969],{"class":206,"line":16968},90,[204,16970,2116],{"class":214},[204,16972,16974,16976,16978,16980,16982],{"class":206,"line":16973},91,[204,16975,3537],{"class":214},[204,16977,1256],{"class":210},[204,16979,16895],{"class":319},[204,16981,1256],{"class":210},[204,16983,1278],{"class":214},[204,16985,16987],{"class":206,"line":16986},92,[204,16988,2273],{"class":214},[204,16990,16992],{"class":206,"line":16991},93,[204,16993,16910],{"class":210},[204,16995,16997],{"class":206,"line":16996},94,[204,16998,2116],{"class":214},[204,17000,17002,17004,17006,17008,17010],{"class":206,"line":17001},95,[204,17003,3537],{"class":214},[204,17005,1256],{"class":210},[204,17007,16925],{"class":319},[204,17009,1256],{"class":210},[204,17011,1278],{"class":214},[204,17013,17015],{"class":206,"line":17014},96,[204,17016,2273],{"class":214},[204,17018,17020],{"class":206,"line":17019},97,[204,17021,1651],{"class":214},[161,17023,17024],{"start":126},[71,17025,17026],{},[30,17027,17028],{},"练习案例2：点和圆的关系",[68,17030,17031],{},[71,17032,17033],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[196,17035,17037],{"className":198,"code":17036,"language":200,"meta":125,"style":125},"#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",[81,17038,17039,17045,17055,17062,17069,17073,17077,17082,17116,17121,17137,17151,17155,17159,17166,17173,17177,17183,17187,17191,17195,17217,17240,17245,17259,17274,17278,17282,17288,17293,17298,17302,17328,17332,17362,17390,17418,17435,17439,17452,17456,17460,17464,17477,17481,17485,17493,17497,17501,17505,17510,17514,17525,17532,17541,17551,17562,17569,17582,17593,17603,17614,17621,17635,17640,17650,17658],{"__ignoreMap":125},[204,17040,17041,17043],{"class":206,"line":207},[204,17042,2035],{"class":210},[204,17044,2038],{"class":319},[204,17046,17047,17049,17051,17053],{"class":206,"line":126},[204,17048,2043],{"class":210},[204,17050,2046],{"class":210},[204,17052,2050],{"class":2049},[204,17054,1377],{"class":214},[204,17056,17057,17059],{"class":206,"line":131},[204,17058,2035],{"class":210},[204,17060,17061],{"class":319},"\u003Ccmath>\n",[204,17063,17064,17066],{"class":206,"line":1281},[204,17065,14781],{"class":210},[204,17067,17068],{"class":2049}," Point\n",[204,17070,17071],{"class":206,"line":1287},[204,17072,1632],{"class":214},[204,17074,17075],{"class":206,"line":1301},[204,17076,14803],{"class":210},[204,17078,17079],{"class":206,"line":1307},[204,17080,17081],{"class":273},"    \u002F\u002F赋值\n",[204,17083,17084,17086,17089,17091,17093,17096,17098,17100,17103,17106,17108,17111,17113],{"class":206,"line":1398},[204,17085,14996],{"class":210},[204,17087,17088],{"class":2049}," setPoint",[204,17090,215],{"class":214},[204,17092,14124],{"class":210},[204,17094,17095],{"class":5303}," x",[204,17097,12522],{"class":214},[204,17099,14124],{"class":210},[204,17101,17102],{"class":5303}," y",[204,17104,17105],{"class":214},") { m_x ",[204,17107,260],{"class":210},[204,17109,17110],{"class":214}," x; m_y ",[204,17112,260],{"class":210},[204,17114,17115],{"class":214}," y; }\n",[204,17117,17118],{"class":206,"line":1404},[204,17119,17120],{"class":273},"    \u002F\u002F获取坐标\n",[204,17122,17123,17125,17128,17131,17134],{"class":206,"line":1416},[204,17124,14825],{"class":210},[204,17126,17127],{"class":2049}," getX",[204,17129,17130],{"class":214},"() { ",[204,17132,17133],{"class":210},"return",[204,17135,17136],{"class":214}," m_x; }\n",[204,17138,17139,17141,17144,17146,17148],{"class":206,"line":1698},[204,17140,14825],{"class":210},[204,17142,17143],{"class":2049}," getY",[204,17145,17130],{"class":214},[204,17147,17133],{"class":210},[204,17149,17150],{"class":214}," m_y; }\n",[204,17152,17153],{"class":206,"line":1703},[204,17154,2486],{"emptyLinePlaceholder":135},[204,17156,17157],{"class":206,"line":1709},[204,17158,15309],{"class":210},[204,17160,17161,17163],{"class":206,"line":1714},[204,17162,14825],{"class":210},[204,17164,17165],{"class":214}," m_x;\n",[204,17167,17168,17170],{"class":206,"line":1728},[204,17169,14825],{"class":210},[204,17171,17172],{"class":214}," m_y;\n",[204,17174,17175],{"class":206,"line":1733},[204,17176,4081],{"class":214},[204,17178,17179,17181],{"class":206,"line":1739},[204,17180,14781],{"class":210},[204,17182,14784],{"class":2049},[204,17184,17185],{"class":206,"line":1760},[204,17186,1632],{"class":214},[204,17188,17189],{"class":206,"line":1765},[204,17190,14803],{"class":210},[204,17192,17193],{"class":206,"line":1779},[204,17194,17081],{"class":273},[204,17196,17197,17199,17202,17204,17206,17209,17212,17214],{"class":206,"line":1784},[204,17198,14996],{"class":210},[204,17200,17201],{"class":2049}," setRadius",[204,17203,215],{"class":214},[204,17205,14124],{"class":210},[204,17207,17208],{"class":5303}," r",[204,17210,17211],{"class":214},") { m_r ",[204,17213,260],{"class":210},[204,17215,17216],{"class":214}," r; }\n",[204,17218,17219,17221,17224,17226,17229,17232,17235,17237],{"class":206,"line":1813},[204,17220,14996],{"class":210},[204,17222,17223],{"class":2049}," setCenter",[204,17225,215],{"class":214},[204,17227,17228],{"class":2049},"Point",[204,17230,17231],{"class":5303}," center",[204,17233,17234],{"class":214},") { m_center ",[204,17236,260],{"class":210},[204,17238,17239],{"class":214}," center; }\n",[204,17241,17242],{"class":206,"line":1818},[204,17243,17244],{"class":273},"    \u002F\u002F获取属性\n",[204,17246,17247,17249,17252,17254,17256],{"class":206,"line":1835},[204,17248,14825],{"class":210},[204,17250,17251],{"class":2049}," getRadius",[204,17253,17130],{"class":214},[204,17255,17133],{"class":210},[204,17257,17258],{"class":214}," m_r; }\n",[204,17260,17261,17264,17267,17269,17271],{"class":206,"line":1840},[204,17262,17263],{"class":2049},"    Point",[204,17265,17266],{"class":2049}," getCenter",[204,17268,17130],{"class":214},[204,17270,17133],{"class":210},[204,17272,17273],{"class":214}," m_center; }\n",[204,17275,17276],{"class":206,"line":1845},[204,17277,2486],{"emptyLinePlaceholder":135},[204,17279,17280],{"class":206,"line":1850},[204,17281,15309],{"class":210},[204,17283,17284,17286],{"class":206,"line":1864},[204,17285,14825],{"class":210},[204,17287,14815],{"class":214},[204,17289,17290],{"class":206,"line":1869},[204,17291,17292],{"class":273},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[204,17294,17295],{"class":206,"line":2663},[204,17296,17297],{"class":214},"    Point m_center;\n",[204,17299,17300],{"class":206,"line":2677},[204,17301,4081],{"class":214},[204,17303,17304,17306,17309,17311,17314,17316,17318,17320,17322,17324,17326],{"class":206,"line":2685},[204,17305,5451],{"class":210},[204,17307,17308],{"class":2049}," isInCircle",[204,17310,215],{"class":214},[204,17312,17313],{"class":2049},"Circle",[204,17315,10671],{"class":210},[204,17317,501],{"class":5303},[204,17319,591],{"class":214},[204,17321,17228],{"class":2049},[204,17323,10671],{"class":210},[204,17325,19],{"class":5303},[204,17327,221],{"class":214},[204,17329,17330],{"class":206,"line":2690},[204,17331,1632],{"class":214},[204,17333,17334,17336,17339,17341,17343,17346,17349,17352,17354,17356,17358,17360],{"class":206,"line":2696},[204,17335,14825],{"class":210},[204,17337,17338],{"class":214}," dx ",[204,17340,260],{"class":210},[204,17342,16429],{"class":214},[204,17344,17345],{"class":2049},"getCenter",[204,17347,17348],{"class":214},"().",[204,17350,17351],{"class":2049},"getX",[204,17353,13137],{"class":214},[204,17355,745],{"class":210},[204,17357,15975],{"class":214},[204,17359,17351],{"class":2049},[204,17361,5723],{"class":214},[204,17363,17364,17366,17369,17371,17373,17375,17377,17380,17382,17384,17386,17388],{"class":206,"line":2702},[204,17365,14825],{"class":210},[204,17367,17368],{"class":214}," dy ",[204,17370,260],{"class":210},[204,17372,16429],{"class":214},[204,17374,17345],{"class":2049},[204,17376,17348],{"class":214},[204,17378,17379],{"class":2049},"getY",[204,17381,13137],{"class":214},[204,17383,745],{"class":210},[204,17385,15975],{"class":214},[204,17387,17379],{"class":2049},[204,17389,5723],{"class":214},[204,17391,17392,17394,17397,17399,17402,17405,17407,17409,17411,17413,17415],{"class":206,"line":2707},[204,17393,14825],{"class":210},[204,17395,17396],{"class":214}," distance ",[204,17398,260],{"class":210},[204,17400,17401],{"class":2049}," sqrt",[204,17403,17404],{"class":214},"(dx ",[204,17406,668],{"class":210},[204,17408,17338],{"class":214},[204,17410,694],{"class":210},[204,17412,17368],{"class":214},[204,17414,668],{"class":210},[204,17416,17417],{"class":214}," dy);\n",[204,17419,17420,17422,17425,17427,17429,17432],{"class":206,"line":8035},[204,17421,3187],{"class":210},[204,17423,17424],{"class":214}," (distance ",[204,17426,1123],{"class":210},[204,17428,16429],{"class":214},[204,17430,17431],{"class":2049},"getRadius",[204,17433,17434],{"class":214},"())\n",[204,17436,17437],{"class":206,"line":8059},[204,17438,2116],{"class":214},[204,17440,17441,17443,17445,17448,17450],{"class":206,"line":8064},[204,17442,9756],{"class":214},[204,17444,1256],{"class":210},[204,17446,17447],{"class":319}," \"点在圆内\"",[204,17449,1531],{"class":210},[204,17451,8927],{"class":214},[204,17453,17454],{"class":206,"line":8070},[204,17455,2273],{"class":214},[204,17457,17458],{"class":206,"line":8097},[204,17459,16910],{"class":210},[204,17461,17462],{"class":206,"line":8102},[204,17463,2116],{"class":214},[204,17465,17466,17468,17470,17473,17475],{"class":206,"line":8108},[204,17467,9756],{"class":214},[204,17469,1256],{"class":210},[204,17471,17472],{"class":319}," \"点在圆外\"",[204,17474,1531],{"class":210},[204,17476,8927],{"class":214},[204,17478,17479],{"class":206,"line":8120},[204,17480,2273],{"class":214},[204,17482,17483],{"class":206,"line":8132},[204,17484,1651],{"class":214},[204,17486,17487,17489,17491],{"class":206,"line":8144},[204,17488,218],{"class":210},[204,17490,2059],{"class":2049},[204,17492,2062],{"class":214},[204,17494,17495],{"class":206,"line":9803},[204,17496,1632],{"class":214},[204,17498,17499],{"class":206,"line":9828},[204,17500,15140],{"class":273},[204,17502,17503],{"class":206,"line":9851},[204,17504,14887],{"class":214},[204,17506,17507],{"class":206,"line":9875},[204,17508,17509],{"class":214},"    Point p1;\n",[204,17511,17512],{"class":206,"line":9880},[204,17513,17081],{"class":273},[204,17515,17516,17518,17520,17523],{"class":206,"line":9885},[204,17517,1637],{"class":214},[204,17519,1256],{"class":210},[204,17521,17522],{"class":319},"\"请输入圆的半径：\"",[204,17524,1377],{"class":214},[204,17526,17527,17529],{"class":206,"line":9890},[204,17528,14825],{"class":210},[204,17530,17531],{"class":214}," r;\n",[204,17533,17534,17536,17538],{"class":206,"line":9899},[204,17535,2098],{"class":214},[204,17537,1516],{"class":210},[204,17539,17540],{"class":214},"r;\n",[204,17542,17543,17545,17548],{"class":206,"line":9904},[204,17544,16682],{"class":214},[204,17546,17547],{"class":2049},"setRadius",[204,17549,17550],{"class":214},"(r);\n",[204,17552,17553,17555,17557,17560],{"class":206,"line":9910},[204,17554,1637],{"class":214},[204,17556,1256],{"class":210},[204,17558,17559],{"class":319},"\"请输入圆心坐标：\"",[204,17561,1377],{"class":214},[204,17563,17564,17566],{"class":206,"line":9931},[204,17565,14825],{"class":210},[204,17567,17568],{"class":214}," x, y;\n",[204,17570,17571,17573,17575,17577,17579],{"class":206,"line":9937},[204,17572,2098],{"class":214},[204,17574,1516],{"class":210},[204,17576,1033],{"class":214},[204,17578,1516],{"class":210},[204,17580,17581],{"class":214},"y;\n",[204,17583,17584,17587,17590],{"class":206,"line":9951},[204,17585,17586],{"class":214},"    p1.",[204,17588,17589],{"class":2049},"setPoint",[204,17591,17592],{"class":214},"(x, y);\n",[204,17594,17595,17597,17600],{"class":206,"line":9957},[204,17596,16682],{"class":214},[204,17598,17599],{"class":2049},"setCenter",[204,17601,17602],{"class":214},"(p1);\n",[204,17604,17605,17607,17609,17612],{"class":206,"line":9984},[204,17606,1637],{"class":214},[204,17608,1256],{"class":210},[204,17610,17611],{"class":319},"\"请输入测试点坐标：\"",[204,17613,1377],{"class":214},[204,17615,17616,17618],{"class":206,"line":9993},[204,17617,14825],{"class":210},[204,17619,17620],{"class":214}," x1, y1;\n",[204,17622,17623,17625,17627,17630,17632],{"class":206,"line":9999},[204,17624,2098],{"class":214},[204,17626,1516],{"class":210},[204,17628,17629],{"class":214},"x1",[204,17631,1516],{"class":210},[204,17633,17634],{"class":214},"y1;\n",[204,17636,17637],{"class":206,"line":10007},[204,17638,17639],{"class":214},"    Point p2;\n",[204,17641,17642,17645,17647],{"class":206,"line":10012},[204,17643,17644],{"class":214},"    p2.",[204,17646,17589],{"class":2049},[204,17648,17649],{"class":214},"(x1, y1);\n",[204,17651,17652,17655],{"class":206,"line":16691},[204,17653,17654],{"class":2049},"    isInCircle",[204,17656,17657],{"class":214},"(c1, p2);\n",[204,17659,17660],{"class":206,"line":16697},[204,17661,1651],{"class":214},[19,17663,17664],{},"在类中可以让另一个类作为本来的成员",[19,17666,17667],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17669,17670],{},"创建point.h",[196,17672,17674],{"className":198,"code":17673,"language":200,"meta":125,"style":125},"#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",[81,17675,17676,17687,17693,17703,17709,17713,17718,17722,17726,17746,17750,17758,17766,17770,17774,17780,17786],{"__ignoreMap":125},[204,17677,17678,17681,17684],{"class":206,"line":207},[204,17679,17680],{"class":210},"#pragma",[204,17682,17683],{"class":2049}," once",[204,17685,17686],{"class":273}," \u002F\u002F防止头文件重复包含\n",[204,17688,17689,17691],{"class":206,"line":126},[204,17690,2035],{"class":210},[204,17692,2038],{"class":319},[204,17694,17695,17697,17699,17701],{"class":206,"line":131},[204,17696,2043],{"class":210},[204,17698,2046],{"class":210},[204,17700,2050],{"class":2049},[204,17702,1377],{"class":214},[204,17704,17705,17707],{"class":206,"line":1281},[204,17706,14781],{"class":210},[204,17708,17068],{"class":2049},[204,17710,17711],{"class":206,"line":1287},[204,17712,1632],{"class":214},[204,17714,17715],{"class":206,"line":1301},[204,17716,17717],{"class":273},"\u002F\u002F做好声明与变量定义就可以\n",[204,17719,17720],{"class":206,"line":1307},[204,17721,14803],{"class":210},[204,17723,17724],{"class":206,"line":1398},[204,17725,17081],{"class":273},[204,17727,17728,17730,17732,17734,17736,17738,17740,17742,17744],{"class":206,"line":1404},[204,17729,14996],{"class":210},[204,17731,17088],{"class":2049},[204,17733,215],{"class":214},[204,17735,14124],{"class":210},[204,17737,17095],{"class":5303},[204,17739,12522],{"class":214},[204,17741,14124],{"class":210},[204,17743,17102],{"class":5303},[204,17745,2805],{"class":214},[204,17747,17748],{"class":206,"line":1416},[204,17749,17120],{"class":273},[204,17751,17752,17754,17756],{"class":206,"line":1698},[204,17753,14825],{"class":210},[204,17755,17127],{"class":2049},[204,17757,5723],{"class":214},[204,17759,17760,17762,17764],{"class":206,"line":1703},[204,17761,14825],{"class":210},[204,17763,17143],{"class":2049},[204,17765,5723],{"class":214},[204,17767,17768],{"class":206,"line":1709},[204,17769,2486],{"emptyLinePlaceholder":135},[204,17771,17772],{"class":206,"line":1714},[204,17773,15309],{"class":210},[204,17775,17776,17778],{"class":206,"line":1728},[204,17777,14825],{"class":210},[204,17779,17165],{"class":214},[204,17781,17782,17784],{"class":206,"line":1733},[204,17783,14825],{"class":210},[204,17785,17172],{"class":214},[204,17787,17788],{"class":206,"line":1739},[204,17789,4081],{"class":214},[19,17791,17792],{},"创建point.cpp",[196,17794,17796],{"className":198,"code":17795,"language":200,"meta":125,"style":125},"#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",[81,17797,17798,17805,17810,17844,17848,17864],{"__ignoreMap":125},[204,17799,17800,17802],{"class":206,"line":207},[204,17801,2035],{"class":210},[204,17803,17804],{"class":319},"\u003Cpoint.h>\n",[204,17806,17807],{"class":206,"line":126},[204,17808,17809],{"class":273},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[204,17811,17812,17814,17817,17820,17822,17824,17826,17828,17830,17832,17834,17836,17838,17840,17842],{"class":206,"line":131},[204,17813,14996],{"class":210},[204,17815,17816],{"class":2049}," Point",[204,17818,17819],{"class":214},"::",[204,17821,17589],{"class":2049},[204,17823,215],{"class":214},[204,17825,14124],{"class":210},[204,17827,17095],{"class":5303},[204,17829,12522],{"class":214},[204,17831,14124],{"class":210},[204,17833,17102],{"class":5303},[204,17835,17105],{"class":214},[204,17837,260],{"class":210},[204,17839,17110],{"class":214},[204,17841,260],{"class":210},[204,17843,17115],{"class":214},[204,17845,17846],{"class":206,"line":1281},[204,17847,17120],{"class":273},[204,17849,17850,17852,17854,17856,17858,17860,17862],{"class":206,"line":1287},[204,17851,14825],{"class":210},[204,17853,17816],{"class":2049},[204,17855,17819],{"class":214},[204,17857,17351],{"class":2049},[204,17859,17130],{"class":214},[204,17861,17133],{"class":210},[204,17863,17136],{"class":214},[204,17865,17866,17868,17870,17872,17874,17876,17878],{"class":206,"line":1301},[204,17867,14825],{"class":210},[204,17869,17816],{"class":2049},[204,17871,17819],{"class":214},[204,17873,17379],{"class":2049},[204,17875,17130],{"class":214},[204,17877,17133],{"class":210},[204,17879,17150],{"class":214},[19,17881,17882],{},"创建circle.h",[196,17884,17886],{"className":198,"code":17885,"language":200,"meta":125,"style":125},"#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",[81,17887,17888,17895,17901,17911,17917,17923,17927,17931,17935,17949,17963,17967,17975,17983,17987,17991,17997,18001,18005],{"__ignoreMap":125},[204,17889,17890,17892],{"class":206,"line":207},[204,17891,17680],{"class":210},[204,17893,17894],{"class":2049}," once\n",[204,17896,17897,17899],{"class":206,"line":126},[204,17898,2035],{"class":210},[204,17900,2038],{"class":319},[204,17902,17903,17905,17907,17909],{"class":206,"line":131},[204,17904,2043],{"class":210},[204,17906,2046],{"class":210},[204,17908,2050],{"class":2049},[204,17910,1377],{"class":214},[204,17912,17913,17915],{"class":206,"line":1281},[204,17914,2035],{"class":210},[204,17916,17804],{"class":319},[204,17918,17919,17921],{"class":206,"line":1287},[204,17920,14781],{"class":210},[204,17922,14784],{"class":2049},[204,17924,17925],{"class":206,"line":1301},[204,17926,1632],{"class":214},[204,17928,17929],{"class":206,"line":1307},[204,17930,14803],{"class":210},[204,17932,17933],{"class":206,"line":1398},[204,17934,17081],{"class":273},[204,17936,17937,17939,17941,17943,17945,17947],{"class":206,"line":1404},[204,17938,14996],{"class":210},[204,17940,17201],{"class":2049},[204,17942,215],{"class":214},[204,17944,14124],{"class":210},[204,17946,17208],{"class":5303},[204,17948,2805],{"class":214},[204,17950,17951,17953,17955,17957,17959,17961],{"class":206,"line":1416},[204,17952,14996],{"class":210},[204,17954,17223],{"class":2049},[204,17956,215],{"class":214},[204,17958,17228],{"class":2049},[204,17960,17231],{"class":5303},[204,17962,2805],{"class":214},[204,17964,17965],{"class":206,"line":1698},[204,17966,17244],{"class":273},[204,17968,17969,17971,17973],{"class":206,"line":1703},[204,17970,14825],{"class":210},[204,17972,17251],{"class":2049},[204,17974,5723],{"class":214},[204,17976,17977,17979,17981],{"class":206,"line":1709},[204,17978,17263],{"class":2049},[204,17980,17266],{"class":2049},[204,17982,5723],{"class":214},[204,17984,17985],{"class":206,"line":1714},[204,17986,2486],{"emptyLinePlaceholder":135},[204,17988,17989],{"class":206,"line":1728},[204,17990,15309],{"class":210},[204,17992,17993,17995],{"class":206,"line":1733},[204,17994,14825],{"class":210},[204,17996,14815],{"class":214},[204,17998,17999],{"class":206,"line":1739},[204,18000,17292],{"class":273},[204,18002,18003],{"class":206,"line":1760},[204,18004,17297],{"class":214},[204,18006,18007],{"class":206,"line":1765},[204,18008,4081],{"class":214},[19,18010,18011],{},"创建circle.cpp",[196,18013,18015],{"className":198,"code":18014,"language":200,"meta":125,"style":125},"#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",[81,18016,18017,18024,18047,18069,18074,18090],{"__ignoreMap":125},[204,18018,18019,18021],{"class":206,"line":207},[204,18020,2035],{"class":210},[204,18022,18023],{"class":319},"\u003Ccircle.h>\n",[204,18025,18026,18028,18031,18033,18035,18037,18039,18041,18043,18045],{"class":206,"line":126},[204,18027,5451],{"class":210},[204,18029,18030],{"class":2049}," Circle",[204,18032,17819],{"class":214},[204,18034,17547],{"class":2049},[204,18036,215],{"class":214},[204,18038,14124],{"class":210},[204,18040,17208],{"class":5303},[204,18042,17211],{"class":214},[204,18044,260],{"class":210},[204,18046,17216],{"class":214},[204,18048,18049,18051,18053,18055,18057,18059,18061,18063,18065,18067],{"class":206,"line":131},[204,18050,5451],{"class":210},[204,18052,18030],{"class":2049},[204,18054,17819],{"class":214},[204,18056,17599],{"class":2049},[204,18058,215],{"class":214},[204,18060,17228],{"class":2049},[204,18062,17231],{"class":5303},[204,18064,17234],{"class":214},[204,18066,260],{"class":210},[204,18068,17239],{"class":214},[204,18070,18071],{"class":206,"line":1281},[204,18072,18073],{"class":273},"\u002F\u002F获取属性\n",[204,18075,18076,18078,18080,18082,18084,18086,18088],{"class":206,"line":1287},[204,18077,14124],{"class":210},[204,18079,18030],{"class":2049},[204,18081,17819],{"class":214},[204,18083,17431],{"class":2049},[204,18085,17130],{"class":214},[204,18087,17133],{"class":210},[204,18089,17258],{"class":214},[204,18091,18092,18094,18096,18098,18100,18102,18104],{"class":206,"line":1301},[204,18093,17228],{"class":2049},[204,18095,18030],{"class":2049},[204,18097,17819],{"class":214},[204,18099,17345],{"class":2049},[204,18101,17130],{"class":214},[204,18103,17133],{"class":210},[204,18105,17273],{"class":214},[19,18107,18108],{},"使用封装的类",[196,18110,18112],{"className":198,"code":18111,"language":200,"meta":125,"style":125},"#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",[81,18113,18114,18120,18130,18136,18142,18166,18170,18196,18222,18246,18260,18264,18276,18280,18284,18288,18300,18304,18308,18316,18320,18324,18328,18332,18336,18346,18352,18360,18368,18378,18384,18396,18404,18412,18422,18428,18440,18444,18452,18458],{"__ignoreMap":125},[204,18115,18116,18118],{"class":206,"line":207},[204,18117,2035],{"class":210},[204,18119,2038],{"class":319},[204,18121,18122,18124,18126,18128],{"class":206,"line":126},[204,18123,2043],{"class":210},[204,18125,2046],{"class":210},[204,18127,2050],{"class":2049},[204,18129,1377],{"class":214},[204,18131,18132,18134],{"class":206,"line":131},[204,18133,2035],{"class":210},[204,18135,18023],{"class":319},[204,18137,18138,18140],{"class":206,"line":1281},[204,18139,2035],{"class":210},[204,18141,17804],{"class":319},[204,18143,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162,18164],{"class":206,"line":1287},[204,18145,5451],{"class":210},[204,18147,17308],{"class":2049},[204,18149,215],{"class":214},[204,18151,17313],{"class":2049},[204,18153,10671],{"class":210},[204,18155,501],{"class":5303},[204,18157,591],{"class":214},[204,18159,17228],{"class":2049},[204,18161,10671],{"class":210},[204,18163,19],{"class":5303},[204,18165,221],{"class":214},[204,18167,18168],{"class":206,"line":1301},[204,18169,1632],{"class":214},[204,18171,18172,18174,18176,18178,18180,18182,18184,18186,18188,18190,18192,18194],{"class":206,"line":1307},[204,18173,14825],{"class":210},[204,18175,17338],{"class":214},[204,18177,260],{"class":210},[204,18179,16429],{"class":214},[204,18181,17345],{"class":2049},[204,18183,17348],{"class":214},[204,18185,17351],{"class":2049},[204,18187,13137],{"class":214},[204,18189,745],{"class":210},[204,18191,15975],{"class":214},[204,18193,17351],{"class":2049},[204,18195,5723],{"class":214},[204,18197,18198,18200,18202,18204,18206,18208,18210,18212,18214,18216,18218,18220],{"class":206,"line":1398},[204,18199,14825],{"class":210},[204,18201,17368],{"class":214},[204,18203,260],{"class":210},[204,18205,16429],{"class":214},[204,18207,17345],{"class":2049},[204,18209,17348],{"class":214},[204,18211,17379],{"class":2049},[204,18213,13137],{"class":214},[204,18215,745],{"class":210},[204,18217,15975],{"class":214},[204,18219,17379],{"class":2049},[204,18221,5723],{"class":214},[204,18223,18224,18226,18228,18230,18232,18234,18236,18238,18240,18242,18244],{"class":206,"line":1404},[204,18225,14825],{"class":210},[204,18227,17396],{"class":214},[204,18229,260],{"class":210},[204,18231,17401],{"class":2049},[204,18233,17404],{"class":214},[204,18235,668],{"class":210},[204,18237,17338],{"class":214},[204,18239,694],{"class":210},[204,18241,17368],{"class":214},[204,18243,668],{"class":210},[204,18245,17417],{"class":214},[204,18247,18248,18250,18252,18254,18256,18258],{"class":206,"line":1416},[204,18249,3187],{"class":210},[204,18251,17424],{"class":214},[204,18253,1123],{"class":210},[204,18255,16429],{"class":214},[204,18257,17431],{"class":2049},[204,18259,17434],{"class":214},[204,18261,18262],{"class":206,"line":1698},[204,18263,2116],{"class":214},[204,18265,18266,18268,18270,18272,18274],{"class":206,"line":1703},[204,18267,9756],{"class":214},[204,18269,1256],{"class":210},[204,18271,17447],{"class":319},[204,18273,1531],{"class":210},[204,18275,8927],{"class":214},[204,18277,18278],{"class":206,"line":1709},[204,18279,2273],{"class":214},[204,18281,18282],{"class":206,"line":1714},[204,18283,16910],{"class":210},[204,18285,18286],{"class":206,"line":1728},[204,18287,2116],{"class":214},[204,18289,18290,18292,18294,18296,18298],{"class":206,"line":1733},[204,18291,9756],{"class":214},[204,18293,1256],{"class":210},[204,18295,17472],{"class":319},[204,18297,1531],{"class":210},[204,18299,8927],{"class":214},[204,18301,18302],{"class":206,"line":1739},[204,18303,2273],{"class":214},[204,18305,18306],{"class":206,"line":1760},[204,18307,1651],{"class":214},[204,18309,18310,18312,18314],{"class":206,"line":1765},[204,18311,218],{"class":210},[204,18313,2059],{"class":2049},[204,18315,2062],{"class":214},[204,18317,18318],{"class":206,"line":1779},[204,18319,1632],{"class":214},[204,18321,18322],{"class":206,"line":1784},[204,18323,15140],{"class":273},[204,18325,18326],{"class":206,"line":1813},[204,18327,14887],{"class":214},[204,18329,18330],{"class":206,"line":1818},[204,18331,17509],{"class":214},[204,18333,18334],{"class":206,"line":1835},[204,18335,17081],{"class":273},[204,18337,18338,18340,18342,18344],{"class":206,"line":1840},[204,18339,1637],{"class":214},[204,18341,1256],{"class":210},[204,18343,17522],{"class":319},[204,18345,1377],{"class":214},[204,18347,18348,18350],{"class":206,"line":1845},[204,18349,14825],{"class":210},[204,18351,17531],{"class":214},[204,18353,18354,18356,18358],{"class":206,"line":1850},[204,18355,2098],{"class":214},[204,18357,1516],{"class":210},[204,18359,17540],{"class":214},[204,18361,18362,18364,18366],{"class":206,"line":1864},[204,18363,16682],{"class":214},[204,18365,17547],{"class":2049},[204,18367,17550],{"class":214},[204,18369,18370,18372,18374,18376],{"class":206,"line":1869},[204,18371,1637],{"class":214},[204,18373,1256],{"class":210},[204,18375,17559],{"class":319},[204,18377,1377],{"class":214},[204,18379,18380,18382],{"class":206,"line":2663},[204,18381,14825],{"class":210},[204,18383,17568],{"class":214},[204,18385,18386,18388,18390,18392,18394],{"class":206,"line":2677},[204,18387,2098],{"class":214},[204,18389,1516],{"class":210},[204,18391,1033],{"class":214},[204,18393,1516],{"class":210},[204,18395,17581],{"class":214},[204,18397,18398,18400,18402],{"class":206,"line":2685},[204,18399,17586],{"class":214},[204,18401,17589],{"class":2049},[204,18403,17592],{"class":214},[204,18405,18406,18408,18410],{"class":206,"line":2690},[204,18407,16682],{"class":214},[204,18409,17599],{"class":2049},[204,18411,17602],{"class":214},[204,18413,18414,18416,18418,18420],{"class":206,"line":2696},[204,18415,1637],{"class":214},[204,18417,1256],{"class":210},[204,18419,17611],{"class":319},[204,18421,1377],{"class":214},[204,18423,18424,18426],{"class":206,"line":2702},[204,18425,14825],{"class":210},[204,18427,17620],{"class":214},[204,18429,18430,18432,18434,18436,18438],{"class":206,"line":2707},[204,18431,2098],{"class":214},[204,18433,1516],{"class":210},[204,18435,17629],{"class":214},[204,18437,1516],{"class":210},[204,18439,17634],{"class":214},[204,18441,18442],{"class":206,"line":8035},[204,18443,17639],{"class":214},[204,18445,18446,18448,18450],{"class":206,"line":8059},[204,18447,17644],{"class":214},[204,18449,17589],{"class":2049},[204,18451,17649],{"class":214},[204,18453,18454,18456],{"class":206,"line":8064},[204,18455,17654],{"class":2049},[204,18457,17657],{"class":214},[204,18459,18460],{"class":206,"line":8070},[204,18461,1651],{"class":214},[14,18463,18465],{"id":18464},"_82对象的初始化清理","8.2对象的初始化清理",[68,18467,18468,18471],{},[71,18469,18470],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[71,18472,18473],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[49,18475,18477],{"id":18476},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18479,18480,18481,18484],{},"对象的",[30,18482,18483],{},"初始化和清理","也是两个非常重要的安全问题",[19,18486,18487],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18489,18490],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18492,18493,18494,18497,18498,18501],{},"c++利用了",[30,18495,18496],{},"构造函数","和",[30,18499,18500],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18503,18504,18505],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[30,18506,18507],{},"我们不提供构造和析构，编译器会提供",[19,18509,18510],{},[30,18511,18512],{},"编译器提供的构造函数和析构函数是空实现。",[68,18514,18515,18518],{},[71,18516,18517],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[71,18519,18520,18521,18524],{},"析构函数：主要作用在于对象",[30,18522,18523],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18526,18527,18530],{},[30,18528,18529],{},"构造函数语法：",[81,18531,18532],{},"类名(){}",[161,18534,18535,18538,18541,18544,18547],{},[71,18536,18537],{},"构造函数，没有返回值也不写void",[71,18539,18540],{},"函数名称与类名相同",[71,18542,18543],{},"构造函数可以有参数，因此可以发生重载",[71,18545,18546],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[71,18548,18549,18550,642],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[81,18551,18552],{},"Person(){}",[19,18554,18555,13882,18558],{},[30,18556,18557],{},"析构函数语法：",[81,18559,18560],{},"~类名(){}",[161,18562,18563,18566,18569,18575],{},[71,18564,18565],{},"析构函数，没有返回值也不写void",[71,18567,18568],{},"函数名称与类名相同,在名称前加上符号  ~",[71,18570,18571,18572],{},"析构函数不可以有参数，因此",[30,18573,18574],{},"不可以发生重载",[71,18576,18577],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[196,18579,18581],{"className":198,"code":18580,"language":200,"meta":125,"style":125},"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",[81,18582,18583,18589,18593,18597,18602,18609,18613,18626,18630,18635,18642,18646,18659,18663,18667,18671,18675,18683,18687,18695,18699,18703,18711,18715,18720,18724,18731,18735,18748,18752,18760],{"__ignoreMap":125},[204,18584,18585,18587],{"class":206,"line":207},[204,18586,14781],{"class":210},[204,18588,15258],{"class":2049},[204,18590,18591],{"class":206,"line":126},[204,18592,1632],{"class":214},[204,18594,18595],{"class":206,"line":131},[204,18596,14803],{"class":210},[204,18598,18599],{"class":206,"line":1281},[204,18600,18601],{"class":273},"    \u002F\u002F构造函数\n",[204,18603,18604,18607],{"class":206,"line":1287},[204,18605,18606],{"class":2049},"    Person",[204,18608,2062],{"class":214},[204,18610,18611],{"class":206,"line":1301},[204,18612,2116],{"class":214},[204,18614,18615,18617,18619,18622,18624],{"class":206,"line":1307},[204,18616,9756],{"class":214},[204,18618,1256],{"class":210},[204,18620,18621],{"class":319}," \"Person的构造函数调用\"",[204,18623,1531],{"class":210},[204,18625,8927],{"class":214},[204,18627,18628],{"class":206,"line":1398},[204,18629,2273],{"class":214},[204,18631,18632],{"class":206,"line":1404},[204,18633,18634],{"class":273},"    \u002F\u002F析构函数\n",[204,18636,18637,18640],{"class":206,"line":1416},[204,18638,18639],{"class":2049},"    ~Person",[204,18641,2062],{"class":214},[204,18643,18644],{"class":206,"line":1698},[204,18645,2116],{"class":214},[204,18647,18648,18650,18652,18655,18657],{"class":206,"line":1703},[204,18649,9756],{"class":214},[204,18651,1256],{"class":210},[204,18653,18654],{"class":319}," \"Person的析构函数调用\"",[204,18656,1531],{"class":210},[204,18658,8927],{"class":214},[204,18660,18661],{"class":206,"line":1709},[204,18662,2273],{"class":214},[204,18664,18665],{"class":206,"line":1714},[204,18666,2486],{"emptyLinePlaceholder":135},[204,18668,18669],{"class":206,"line":1728},[204,18670,4081],{"class":214},[204,18672,18673],{"class":206,"line":1733},[204,18674,2486],{"emptyLinePlaceholder":135},[204,18676,18677,18679,18681],{"class":206,"line":1739},[204,18678,5451],{"class":210},[204,18680,5675],{"class":2049},[204,18682,2062],{"class":214},[204,18684,18685],{"class":206,"line":1760},[204,18686,1632],{"class":214},[204,18688,18689,18692],{"class":206,"line":1765},[204,18690,18691],{"class":214},"    Person p;",[204,18693,18694],{"class":273},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[204,18696,18697],{"class":206,"line":1779},[204,18698,1651],{"class":214},[204,18700,18701],{"class":206,"line":1784},[204,18702,2486],{"emptyLinePlaceholder":135},[204,18704,18705,18707,18709],{"class":206,"line":1813},[204,18706,218],{"class":210},[204,18708,2059],{"class":2049},[204,18710,10940],{"class":214},[204,18712,18713],{"class":206,"line":1818},[204,18714,13297],{"class":214},[204,18716,18717],{"class":206,"line":1835},[204,18718,18719],{"class":273},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[204,18721,18722],{"class":206,"line":1840},[204,18723,2486],{"emptyLinePlaceholder":135},[204,18725,18726,18728],{"class":206,"line":1845},[204,18727,18691],{"class":214},[204,18729,18730],{"class":273},"\u002F\u002F只有构造函数\n",[204,18732,18733],{"class":206,"line":1850},[204,18734,2486],{"emptyLinePlaceholder":135},[204,18736,18737,18739,18741,18743,18745],{"class":206,"line":1864},[204,18738,2389],{"class":2049},[204,18740,215],{"class":214},[204,18742,2394],{"class":319},[204,18744,6053],{"class":214},[204,18746,18747],{"class":273},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[204,18749,18750],{"class":206,"line":1869},[204,18751,2486],{"emptyLinePlaceholder":135},[204,18753,18754,18756,18758],{"class":206,"line":2663},[204,18755,4176],{"class":210},[204,18757,4179],{"class":263},[204,18759,1377],{"class":214},[204,18761,18762],{"class":206,"line":2677},[204,18763,1651],{"class":214},[19,18765,18766],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[49,18768,18770],{"id":18769},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18772,18773],{},"两种分类方式：",[19,18775,18776],{},"​\t按参数分为： 有参构造和无参构造",[19,18778,18779],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18781,18782],{},"三种调用方式：",[19,18784,18785],{},"​\t括号法",[19,18787,18788],{},"​\t显示法",[19,18790,18791],{},"​\t隐式转换法",[196,18793,18795],{"className":198,"code":18794,"language":200,"meta":125,"style":125},"#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",[81,18796,18797,18803,18813,18818,18823,18828,18833,18837,18845,18849,18853,18857,18863,18867,18880,18884,18896,18900,18909,18922,18926,18930,18936,18940,18953,18957,18962,18978,18982,18987,18996,19009,19013,19019,19023,19028,19036,19040,19045,19049,19057,19061,19066,19071,19076,19081,19086,19090,19095,19100,19105,19110,19114,19119,19124,19140,19152,19157,19161,19166,19171,19176,19180,19185,19199,19212,19216,19224,19228,19234,19240,19248],{"__ignoreMap":125},[204,18798,18799,18801],{"class":206,"line":207},[204,18800,2035],{"class":210},[204,18802,2038],{"class":319},[204,18804,18805,18807,18809,18811],{"class":206,"line":126},[204,18806,2043],{"class":210},[204,18808,2046],{"class":210},[204,18810,2050],{"class":2049},[204,18812,1377],{"class":214},[204,18814,18815],{"class":206,"line":131},[204,18816,18817],{"class":273},"\u002F\u002F1.构造函数的分类及调用\n",[204,18819,18820],{"class":206,"line":1281},[204,18821,18822],{"class":273},"\u002F\u002F分类\n",[204,18824,18825],{"class":206,"line":1287},[204,18826,18827],{"class":273},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[204,18829,18830],{"class":206,"line":1301},[204,18831,18832],{"class":273},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[204,18834,18835],{"class":206,"line":1307},[204,18836,2486],{"emptyLinePlaceholder":135},[204,18838,18839,18841,18843],{"class":206,"line":1398},[204,18840,14781],{"class":210},[204,18842,15656],{"class":2049},[204,18844,2760],{"class":214},[204,18846,18847],{"class":206,"line":1404},[204,18848,1632],{"class":214},[204,18850,18851],{"class":206,"line":1416},[204,18852,14803],{"class":210},[204,18854,18855],{"class":206,"line":1698},[204,18856,18601],{"class":273},[204,18858,18859,18861],{"class":206,"line":1703},[204,18860,18606],{"class":2049},[204,18862,2062],{"class":214},[204,18864,18865],{"class":206,"line":1709},[204,18866,2116],{"class":214},[204,18868,18869,18871,18873,18876,18878],{"class":206,"line":1714},[204,18870,3537],{"class":214},[204,18872,1256],{"class":210},[204,18874,18875],{"class":319},"\"Person构造函数无参构造\"",[204,18877,1256],{"class":210},[204,18879,1278],{"class":214},[204,18881,18882],{"class":206,"line":1728},[204,18883,2273],{"class":214},[204,18885,18886,18888,18890,18892,18894],{"class":206,"line":1733},[204,18887,18606],{"class":2049},[204,18889,215],{"class":214},[204,18891,218],{"class":210},[204,18893,1485],{"class":5303},[204,18895,221],{"class":214},[204,18897,18898],{"class":206,"line":1739},[204,18899,2116],{"class":214},[204,18901,18902,18905,18907],{"class":206,"line":1760},[204,18903,18904],{"class":214},"        age",[204,18906,260],{"class":210},[204,18908,6284],{"class":214},[204,18910,18911,18913,18915,18918,18920],{"class":206,"line":1765},[204,18912,3537],{"class":214},[204,18914,1256],{"class":210},[204,18916,18917],{"class":319},"\"Person构造函数有参构造\"",[204,18919,1256],{"class":210},[204,18921,1278],{"class":214},[204,18923,18924],{"class":206,"line":1779},[204,18925,2273],{"class":214},[204,18927,18928],{"class":206,"line":1784},[204,18929,18634],{"class":273},[204,18931,18932,18934],{"class":206,"line":1813},[204,18933,18639],{"class":2049},[204,18935,2062],{"class":214},[204,18937,18938],{"class":206,"line":1818},[204,18939,2116],{"class":214},[204,18941,18942,18944,18946,18949,18951],{"class":206,"line":1835},[204,18943,3537],{"class":214},[204,18945,1256],{"class":210},[204,18947,18948],{"class":319},"\"Person析构函数被调用\"",[204,18950,1256],{"class":210},[204,18952,1278],{"class":214},[204,18954,18955],{"class":206,"line":1840},[204,18956,2273],{"class":214},[204,18958,18959],{"class":206,"line":1845},[204,18960,18961],{"class":273},"    \u002F\u002F拷贝构造函数\n",[204,18963,18964,18966,18968,18970,18972,18974,18976],{"class":206,"line":1850},[204,18965,18606],{"class":2049},[204,18967,215],{"class":214},[204,18969,6879],{"class":210},[204,18971,15656],{"class":2049},[204,18973,10671],{"class":210},[204,18975,19],{"class":5303},[204,18977,221],{"class":214},[204,18979,18980],{"class":206,"line":1864},[204,18981,2116],{"class":214},[204,18983,18984],{"class":206,"line":1869},[204,18985,18986],{"class":273},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[204,18988,18989,18991,18993],{"class":206,"line":2663},[204,18990,18904],{"class":214},[204,18992,260],{"class":210},[204,18994,18995],{"class":214},"p.age;\n",[204,18997,18998,19000,19002,19005,19007],{"class":206,"line":2677},[204,18999,3537],{"class":214},[204,19001,1256],{"class":210},[204,19003,19004],{"class":319},"\"Person拷贝构造函数被调用\"",[204,19006,1256],{"class":210},[204,19008,1278],{"class":214},[204,19010,19011],{"class":206,"line":2685},[204,19012,2273],{"class":214},[204,19014,19015,19017],{"class":206,"line":2690},[204,19016,2071],{"class":210},[204,19018,7884],{"class":214},[204,19020,19021],{"class":206,"line":2696},[204,19022,4081],{"class":214},[204,19024,19025],{"class":206,"line":2702},[204,19026,19027],{"class":273},"\u002F\u002F调用\n",[204,19029,19030,19032,19034],{"class":206,"line":2707},[204,19031,5451],{"class":210},[204,19033,5675],{"class":2049},[204,19035,2062],{"class":214},[204,19037,19038],{"class":206,"line":8035},[204,19039,1632],{"class":214},[204,19041,19042],{"class":206,"line":8059},[204,19043,19044],{"class":273},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[204,19046,19047],{"class":206,"line":8064},[204,19048,1651],{"class":214},[204,19050,19051,19053,19055],{"class":206,"line":8070},[204,19052,5451],{"class":210},[204,19054,5744],{"class":2049},[204,19056,2062],{"class":214},[204,19058,19059],{"class":206,"line":8097},[204,19060,1632],{"class":214},[204,19062,19063],{"class":206,"line":8102},[204,19064,19065],{"class":273},"    \u002F\u002F1.括号法\n",[204,19067,19068],{"class":206,"line":8108},[204,19069,19070],{"class":273},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[204,19072,19073],{"class":206,"line":8120},[204,19074,19075],{"class":273},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[204,19077,19078],{"class":206,"line":8132},[204,19079,19080],{"class":273},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[204,19082,19083],{"class":206,"line":8144},[204,19084,19085],{"class":273},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[204,19087,19088],{"class":206,"line":9803},[204,19089,2486],{"emptyLinePlaceholder":135},[204,19091,19092],{"class":206,"line":9828},[204,19093,19094],{"class":273},"    \u002F\u002F注意事项\n",[204,19096,19097],{"class":206,"line":9851},[204,19098,19099],{"class":273},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[204,19101,19102],{"class":206,"line":9875},[204,19103,19104],{"class":273},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[204,19106,19107],{"class":206,"line":9880},[204,19108,19109],{"class":273},"    \u002F\u002F Person p4();\n",[204,19111,19112],{"class":206,"line":9885},[204,19113,2486],{"emptyLinePlaceholder":135},[204,19115,19116],{"class":206,"line":9890},[204,19117,19118],{"class":273},"    \u002F\u002F2.显示法\n",[204,19120,19121],{"class":206,"line":9899},[204,19122,19123],{"class":214},"    Person p1;\n",[204,19125,19126,19129,19131,19134,19136,19138],{"class":206,"line":9904},[204,19127,19128],{"class":214},"    Person p2",[204,19130,260],{"class":210},[204,19132,19133],{"class":2049},"Person",[204,19135,215],{"class":214},[204,19137,659],{"class":263},[204,19139,2805],{"class":214},[204,19141,19142,19145,19147,19149],{"class":206,"line":9910},[204,19143,19144],{"class":214},"    Person p3",[204,19146,260],{"class":210},[204,19148,19133],{"class":2049},[204,19150,19151],{"class":214},"(p2);\n",[204,19153,19154],{"class":206,"line":9931},[204,19155,19156],{"class":273},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[204,19158,19159],{"class":206,"line":9937},[204,19160,2486],{"emptyLinePlaceholder":135},[204,19162,19163],{"class":206,"line":9951},[204,19164,19165],{"class":273},"    \u002F\u002F 注意事项2\n",[204,19167,19168],{"class":206,"line":9957},[204,19169,19170],{"class":273},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[204,19172,19173],{"class":206,"line":9984},[204,19174,19175],{"class":273},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[204,19177,19178],{"class":206,"line":9993},[204,19179,2486],{"emptyLinePlaceholder":135},[204,19181,19182],{"class":206,"line":9999},[204,19183,19184],{"class":273},"    \u002F\u002F3.隐士转换法\n",[204,19186,19187,19190,19192,19194,19196],{"class":206,"line":10007},[204,19188,19189],{"class":214},"    Person p4",[204,19191,260],{"class":210},[204,19193,659],{"class":263},[204,19195,270],{"class":214},[204,19197,19198],{"class":273},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[204,19200,19201,19204,19206,19209],{"class":206,"line":10012},[204,19202,19203],{"class":214},"    Person p5",[204,19205,260],{"class":210},[204,19207,19208],{"class":214},"p4;",[204,19210,19211],{"class":273}," \u002F\u002F 这里会调用拷贝构造函数\n",[204,19213,19214],{"class":206,"line":16691},[204,19215,1651],{"class":214},[204,19217,19218,19220,19222],{"class":206,"line":16697},[204,19219,218],{"class":210},[204,19221,2059],{"class":2049},[204,19223,2062],{"class":214},[204,19225,19226],{"class":206,"line":16720},[204,19227,1632],{"class":214},[204,19229,19230,19232],{"class":206,"line":16726},[204,19231,5720],{"class":2049},[204,19233,5723],{"class":214},[204,19235,19236,19238],{"class":206,"line":16749},[204,19237,5789],{"class":2049},[204,19239,5723],{"class":214},[204,19241,19242,19244,19246],{"class":206,"line":16763},[204,19243,4176],{"class":210},[204,19245,4179],{"class":263},[204,19247,1377],{"class":214},[204,19249,19250],{"class":206,"line":16783},[204,19251,1651],{"class":214},[19,19253,19254,19257],{},[30,19255,19256],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[49,19259,19261],{"id":19260},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19263,19264],{},"C++中拷贝构造函数调用时机通常有三种情况",[68,19266,19267,19270,19273],{},[71,19268,19269],{},"使用一个已经创建完毕的对象来初始化一个新对象",[71,19271,19272],{},"值传递的方式给函数参数传值",[71,19274,19275],{},"以值方式返回局部对象",[196,19277,19279],{"className":198,"code":19278,"language":200,"meta":125,"style":125},"#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",[81,19280,19281,19287,19297,19301,19306,19310,19315,19320,19325,19331,19335,19339,19345,19349,19362,19366,19371,19383,19387,19395,19408,19412,19416,19432,19436,19445,19458,19462,19468,19472,19484,19488,19494,19498,19502,19510,19514,19527,19535,19553,19557,19562,19567,19582,19586,19599,19603,19611,19615,19619,19627,19631,19636,19645,19649,19653,19678,19688,19692,19700,19704,19715,19740,19744,19748,19752,19760,19764,19769,19774,19781,19786,19791,19796,19801,19805,19810,19814,19819,19823,19828,19833,19837,19841,19846,19851,19859],{"__ignoreMap":125},[204,19282,19283,19285],{"class":206,"line":207},[204,19284,2035],{"class":210},[204,19286,2038],{"class":319},[204,19288,19289,19291,19293,19295],{"class":206,"line":126},[204,19290,2043],{"class":210},[204,19292,2046],{"class":210},[204,19294,2050],{"class":2049},[204,19296,1377],{"class":214},[204,19298,19299],{"class":206,"line":131},[204,19300,2486],{"emptyLinePlaceholder":135},[204,19302,19303],{"class":206,"line":1281},[204,19304,19305],{"class":273},"\u002F\u002F拷贝构造函数调用时机\n",[204,19307,19308],{"class":206,"line":1287},[204,19309,2486],{"emptyLinePlaceholder":135},[204,19311,19312],{"class":206,"line":1301},[204,19313,19314],{"class":273},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[204,19316,19317],{"class":206,"line":1307},[204,19318,19319],{"class":273},"\u002F\u002F2.值传递的方式给函数参数传值\n",[204,19321,19322],{"class":206,"line":1398},[204,19323,19324],{"class":273},"\u002F\u002F3.以值方式返回局部对象\n",[204,19326,19327,19329],{"class":206,"line":1404},[204,19328,14781],{"class":210},[204,19330,15258],{"class":2049},[204,19332,19333],{"class":206,"line":1416},[204,19334,1632],{"class":214},[204,19336,19337],{"class":206,"line":1698},[204,19338,14803],{"class":210},[204,19340,19341,19343],{"class":206,"line":1703},[204,19342,18606],{"class":2049},[204,19344,2062],{"class":214},[204,19346,19347],{"class":206,"line":1709},[204,19348,2116],{"class":214},[204,19350,19351,19353,19355,19358,19360],{"class":206,"line":1714},[204,19352,9756],{"class":214},[204,19354,1256],{"class":210},[204,19356,19357],{"class":319}," \"Person的默认构造函数调用\"",[204,19359,1531],{"class":210},[204,19361,8927],{"class":214},[204,19363,19364],{"class":206,"line":1728},[204,19365,2273],{"class":214},[204,19367,19368],{"class":206,"line":1733},[204,19369,19370],{"class":273},"    \u002F\u002F有参构造\n",[204,19372,19373,19375,19377,19379,19381],{"class":206,"line":1739},[204,19374,18606],{"class":2049},[204,19376,215],{"class":214},[204,19378,218],{"class":210},[204,19380,15776],{"class":5303},[204,19382,221],{"class":214},[204,19384,19385],{"class":206,"line":1760},[204,19386,2116],{"class":214},[204,19388,19389,19391,19393],{"class":206,"line":1765},[204,19390,15830],{"class":214},[204,19392,260],{"class":210},[204,19394,7884],{"class":214},[204,19396,19397,19399,19401,19404,19406],{"class":206,"line":1779},[204,19398,9756],{"class":214},[204,19400,1256],{"class":210},[204,19402,19403],{"class":319}," \"Person的有参构造函数调用\"",[204,19405,1531],{"class":210},[204,19407,8927],{"class":214},[204,19409,19410],{"class":206,"line":1784},[204,19411,2273],{"class":214},[204,19413,19414],{"class":206,"line":1813},[204,19415,18961],{"class":273},[204,19417,19418,19420,19422,19424,19426,19428,19430],{"class":206,"line":1818},[204,19419,18606],{"class":2049},[204,19421,215],{"class":214},[204,19423,6879],{"class":210},[204,19425,15656],{"class":2049},[204,19427,10671],{"class":210},[204,19429,19],{"class":5303},[204,19431,221],{"class":214},[204,19433,19434],{"class":206,"line":1835},[204,19435,2116],{"class":214},[204,19437,19438,19440,19442],{"class":206,"line":1840},[204,19439,15830],{"class":214},[204,19441,260],{"class":210},[204,19443,19444],{"class":214}," p.m_Age;\n",[204,19446,19447,19449,19451,19454,19456],{"class":206,"line":1845},[204,19448,9756],{"class":214},[204,19450,1256],{"class":210},[204,19452,19453],{"class":319}," \"Person的拷贝构造函数调用\"",[204,19455,1531],{"class":210},[204,19457,8927],{"class":214},[204,19459,19460],{"class":206,"line":1850},[204,19461,2273],{"class":214},[204,19463,19464,19466],{"class":206,"line":1864},[204,19465,18639],{"class":2049},[204,19467,2062],{"class":214},[204,19469,19470],{"class":206,"line":1869},[204,19471,2116],{"class":214},[204,19473,19474,19476,19478,19480,19482],{"class":206,"line":2663},[204,19475,9756],{"class":214},[204,19477,1256],{"class":210},[204,19479,18654],{"class":319},[204,19481,1531],{"class":210},[204,19483,8927],{"class":214},[204,19485,19486],{"class":206,"line":2677},[204,19487,2273],{"class":214},[204,19489,19490,19492],{"class":206,"line":2685},[204,19491,2071],{"class":210},[204,19493,15753],{"class":214},[204,19495,19496],{"class":206,"line":2690},[204,19497,4081],{"class":214},[204,19499,19500],{"class":206,"line":2696},[204,19501,19314],{"class":273},[204,19503,19504,19506,19508],{"class":206,"line":2702},[204,19505,5451],{"class":210},[204,19507,5675],{"class":2049},[204,19509,2062],{"class":214},[204,19511,19512],{"class":206,"line":2707},[204,19513,1632],{"class":214},[204,19515,19516,19519,19521,19523,19525],{"class":206,"line":8035},[204,19517,19518],{"class":214},"    Person ",[204,19520,7217],{"class":2049},[204,19522,215],{"class":214},[204,19524,913],{"class":263},[204,19526,2805],{"class":214},[204,19528,19529,19531,19533],{"class":206,"line":8059},[204,19530,19518],{"class":214},[204,19532,7120],{"class":2049},[204,19534,17602],{"class":214},[204,19536,19537,19539,19541,19544,19546,19549,19551],{"class":206,"line":8064},[204,19538,1637],{"class":214},[204,19540,1256],{"class":210},[204,19542,19543],{"class":319},"\"P2的年龄为：\"",[204,19545,1256],{"class":210},[204,19547,19548],{"class":214},"p2.m_Age",[204,19550,1256],{"class":210},[204,19552,1278],{"class":214},[204,19554,19555],{"class":206,"line":8070},[204,19556,1651],{"class":214},[204,19558,19559],{"class":206,"line":8097},[204,19560,19561],{"class":273},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[204,19563,19564],{"class":206,"line":8102},[204,19565,19566],{"class":273},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[204,19568,19569,19571,19574,19576,19578,19580],{"class":206,"line":8108},[204,19570,5451],{"class":210},[204,19572,19573],{"class":2049}," doWork",[204,19575,215],{"class":214},[204,19577,19133],{"class":2049},[204,19579,6912],{"class":5303},[204,19581,221],{"class":214},[204,19583,19584],{"class":206,"line":8120},[204,19585,1632],{"class":214},[204,19587,19588,19590,19592,19595,19597],{"class":206,"line":8132},[204,19589,6616],{"class":214},[204,19591,1256],{"class":210},[204,19593,19594],{"class":319}," \"doWork函数调用\"",[204,19596,1531],{"class":210},[204,19598,8927],{"class":214},[204,19600,19601],{"class":206,"line":8144},[204,19602,1651],{"class":214},[204,19604,19605,19607,19609],{"class":206,"line":9803},[204,19606,5451],{"class":210},[204,19608,5744],{"class":2049},[204,19610,2062],{"class":214},[204,19612,19613],{"class":206,"line":9828},[204,19614,1632],{"class":214},[204,19616,19617],{"class":206,"line":9851},[204,19618,15400],{"class":214},[204,19620,19621,19624],{"class":206,"line":9875},[204,19622,19623],{"class":2049},"    doWork",[204,19625,19626],{"class":214},"(p);\n",[204,19628,19629],{"class":206,"line":9880},[204,19630,1651],{"class":214},[204,19632,19633],{"class":206,"line":9885},[204,19634,19635],{"class":273},"\u002F\u002F 3.以值方式返回局部对象\n",[204,19637,19638,19640,19643],{"class":206,"line":9890},[204,19639,19133],{"class":2049},[204,19641,19642],{"class":2049}," doWork2",[204,19644,2062],{"class":214},[204,19646,19647],{"class":206,"line":9899},[204,19648,1632],{"class":214},[204,19650,19651],{"class":206,"line":9904},[204,19652,19123],{"class":214},[204,19654,19655,19657,19659,19661,19663,19665,19667,19669,19671,19673,19675],{"class":206,"line":9910},[204,19656,1637],{"class":214},[204,19658,1256],{"class":210},[204,19660,215],{"class":214},[204,19662,218],{"class":210},[204,19664,6605],{"class":210},[204,19666,642],{"class":214},[204,19668,566],{"class":210},[204,19670,7217],{"class":214},[204,19672,1256],{"class":210},[204,19674,1325],{"class":214},[204,19676,19677],{"class":273},"\u002F\u002F打印p1的地址\n",[204,19679,19680,19682,19685],{"class":206,"line":9931},[204,19681,4176],{"class":210},[204,19683,19684],{"class":214}," p1;",[204,19686,19687],{"class":273},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[204,19689,19690],{"class":206,"line":9937},[204,19691,1651],{"class":214},[204,19693,19694,19696,19698],{"class":206,"line":9951},[204,19695,5451],{"class":210},[204,19697,5816],{"class":2049},[204,19699,2062],{"class":214},[204,19701,19702],{"class":206,"line":9957},[204,19703,1632],{"class":214},[204,19705,19706,19709,19711,19713],{"class":206,"line":9984},[204,19707,19708],{"class":214},"    Person p ",[204,19710,260],{"class":210},[204,19712,19642],{"class":2049},[204,19714,5723],{"class":214},[204,19716,19717,19719,19721,19723,19725,19727,19729,19731,19733,19735,19737],{"class":206,"line":9993},[204,19718,1637],{"class":214},[204,19720,1256],{"class":210},[204,19722,215],{"class":214},[204,19724,218],{"class":210},[204,19726,6605],{"class":210},[204,19728,642],{"class":214},[204,19730,566],{"class":210},[204,19732,19],{"class":214},[204,19734,1256],{"class":210},[204,19736,1325],{"class":214},[204,19738,19739],{"class":273},"\u002F\u002F打印p的地址\n",[204,19741,19742],{"class":206,"line":9999},[204,19743,1651],{"class":214},[204,19745,19746],{"class":206,"line":10007},[204,19747,2486],{"emptyLinePlaceholder":135},[204,19749,19750],{"class":206,"line":10012},[204,19751,2486],{"emptyLinePlaceholder":135},[204,19753,19754,19756,19758],{"class":206,"line":16691},[204,19755,218],{"class":210},[204,19757,2059],{"class":2049},[204,19759,2062],{"class":214},[204,19761,19762],{"class":206,"line":16697},[204,19763,1632],{"class":214},[204,19765,19766],{"class":206,"line":16720},[204,19767,19768],{"class":273},"    \u002F\u002F test01();\n",[204,19770,19771],{"class":206,"line":16726},[204,19772,19773],{"class":273},"    \u002F\u002F test02();\n",[204,19775,19776,19779],{"class":206,"line":16749},[204,19777,19778],{"class":2049},"    test03",[204,19780,5723],{"class":214},[204,19782,19783],{"class":206,"line":16763},[204,19784,19785],{"class":273},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[204,19787,19788],{"class":206,"line":16783},[204,19789,19790],{"class":273},"\u002F\u002F 输出结果如下：\n",[204,19792,19793],{"class":206,"line":16789},[204,19794,19795],{"class":273},"\u002F\u002F Person的默认构造函数调用\n",[204,19797,19798],{"class":206,"line":16800},[204,19799,19800],{"class":273},"\u002F\u002F 0x7fffffffceec\n",[204,19802,19803],{"class":206,"line":16823},[204,19804,19800],{"class":273},[204,19806,19807],{"class":206,"line":16845},[204,19808,19809],{"class":273},"\u002F\u002F Person的析构函数调用\n",[204,19811,19812],{"class":206,"line":16850},[204,19813,2486],{"emptyLinePlaceholder":135},[204,19815,19816],{"class":206,"line":16856},[204,19817,19818],{"class":273},"\u002F\u002F 之前的输出结果如下：\n",[204,19820,19821],{"class":206,"line":16870},[204,19822,19795],{"class":273},[204,19824,19825],{"class":206,"line":16883},[204,19826,19827],{"class":273},"\u002F\u002F 地址\n",[204,19829,19830],{"class":206,"line":16888},[204,19831,19832],{"class":273},"\u002F\u002F Person的拷贝构造函数调用\n",[204,19834,19835],{"class":206,"line":16902},[204,19836,19809],{"class":273},[204,19838,19839],{"class":206,"line":16907},[204,19840,19827],{"class":273},[204,19842,19843],{"class":206,"line":16913},[204,19844,19845],{"class":273},"\u002F\u002F (这两次输出的地址也是不同的) \n",[204,19847,19848],{"class":206,"line":16918},[204,19849,19850],{"class":273},"\u002F\u002F Person的析构函数调用     \n",[204,19852,19853,19855,19857],{"class":206,"line":16932},[204,19854,4176],{"class":210},[204,19856,4179],{"class":263},[204,19858,1377],{"class":214},[204,19860,19861],{"class":206,"line":16937},[204,19862,1651],{"class":214},[19,19864,19865],{},"简化版理解",[196,19867,19869],{"className":198,"code":19868,"language":200,"meta":125,"style":125},"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",[81,19870,19871,19879,19883,19889,19902,19913,19917,19929,19942,19950,19954,19970,19983,19992,19996,20001,20007,20020,20024,20028,20035,20039,20043,20048,20056,20060,20076,20089,20102,20106,20111,20119,20123,20127,20132,20137,20153,20161,20168,20174,20178,20182,20187,20195,20199,20203,20226,20233,20237,20241,20249,20253,20263,20285,20289,20293,20297,20305,20309,20314,20319,20325,20329,20339,20343,20351],{"__ignoreMap":125},[204,19872,19873,19875,19877],{"class":206,"line":207},[204,19874,14781],{"class":210},[204,19876,15656],{"class":2049},[204,19878,15659],{"class":214},[204,19880,19881],{"class":206,"line":126},[204,19882,14803],{"class":210},[204,19884,19885,19887],{"class":206,"line":131},[204,19886,18606],{"class":2049},[204,19888,10940],{"class":214},[204,19890,19891,19893,19895,19898,19900],{"class":206,"line":1281},[204,19892,9756],{"class":214},[204,19894,1256],{"class":210},[204,19896,19897],{"class":319}," \"无参构造函数!\"",[204,19899,1531],{"class":210},[204,19901,8927],{"class":214},[204,19903,19904,19907,19909,19911],{"class":206,"line":1287},[204,19905,19906],{"class":214},"        mAge ",[204,19908,260],{"class":210},[204,19910,4179],{"class":263},[204,19912,1377],{"class":214},[204,19914,19915],{"class":206,"line":1301},[204,19916,2273],{"class":214},[204,19918,19919,19921,19923,19925,19927],{"class":206,"line":1307},[204,19920,18606],{"class":2049},[204,19922,215],{"class":214},[204,19924,218],{"class":210},[204,19926,15776],{"class":5303},[204,19928,12529],{"class":214},[204,19930,19931,19933,19935,19938,19940],{"class":206,"line":1398},[204,19932,9756],{"class":214},[204,19934,1256],{"class":210},[204,19936,19937],{"class":319}," \"有参构造函数!\"",[204,19939,1531],{"class":210},[204,19941,8927],{"class":214},[204,19943,19944,19946,19948],{"class":206,"line":1404},[204,19945,19906],{"class":214},[204,19947,260],{"class":210},[204,19949,7884],{"class":214},[204,19951,19952],{"class":206,"line":1416},[204,19953,2273],{"class":214},[204,19955,19956,19958,19960,19962,19964,19966,19968],{"class":206,"line":1698},[204,19957,18606],{"class":2049},[204,19959,215],{"class":214},[204,19961,6879],{"class":210},[204,19963,15656],{"class":2049},[204,19965,566],{"class":210},[204,19967,6912],{"class":5303},[204,19969,12529],{"class":214},[204,19971,19972,19974,19976,19979,19981],{"class":206,"line":1703},[204,19973,9756],{"class":214},[204,19975,1256],{"class":210},[204,19977,19978],{"class":319}," \"拷贝构造函数!\"",[204,19980,1531],{"class":210},[204,19982,8927],{"class":214},[204,19984,19985,19987,19989],{"class":206,"line":1709},[204,19986,19906],{"class":214},[204,19988,260],{"class":210},[204,19990,19991],{"class":214}," p.mAge;\n",[204,19993,19994],{"class":206,"line":1714},[204,19995,2273],{"class":214},[204,19997,19998],{"class":206,"line":1728},[204,19999,20000],{"class":273},"    \u002F\u002F析构函数在释放内存之前调用\n",[204,20002,20003,20005],{"class":206,"line":1733},[204,20004,18639],{"class":2049},[204,20006,10940],{"class":214},[204,20008,20009,20011,20013,20016,20018],{"class":206,"line":1739},[204,20010,9756],{"class":214},[204,20012,1256],{"class":210},[204,20014,20015],{"class":319}," \"析构函数!\"",[204,20017,1531],{"class":210},[204,20019,8927],{"class":214},[204,20021,20022],{"class":206,"line":1760},[204,20023,2273],{"class":214},[204,20025,20026],{"class":206,"line":1765},[204,20027,14803],{"class":210},[204,20029,20030,20032],{"class":206,"line":1779},[204,20031,2071],{"class":210},[204,20033,20034],{"class":214}," mAge;\n",[204,20036,20037],{"class":206,"line":1784},[204,20038,4081],{"class":214},[204,20040,20041],{"class":206,"line":1813},[204,20042,2486],{"emptyLinePlaceholder":135},[204,20044,20045],{"class":206,"line":1818},[204,20046,20047],{"class":273},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[204,20049,20050,20052,20054],{"class":206,"line":1835},[204,20051,5451],{"class":210},[204,20053,5675],{"class":2049},[204,20055,10940],{"class":214},[204,20057,20058],{"class":206,"line":1840},[204,20059,2486],{"emptyLinePlaceholder":135},[204,20061,20062,20064,20067,20069,20071,20073],{"class":206,"line":1845},[204,20063,19518],{"class":214},[204,20065,20066],{"class":2049},"man",[204,20068,215],{"class":214},[204,20070,524],{"class":263},[204,20072,6053],{"class":214},[204,20074,20075],{"class":273}," \u002F\u002Fp对象已经创建完毕\n",[204,20077,20078,20080,20083,20086],{"class":206,"line":1850},[204,20079,19518],{"class":214},[204,20081,20082],{"class":2049},"newman",[204,20084,20085],{"class":214},"(man);",[204,20087,20088],{"class":273}," \u002F\u002F调用拷贝构造函数\n",[204,20090,20091,20094,20096,20099],{"class":206,"line":1864},[204,20092,20093],{"class":214},"    Person newman2 ",[204,20095,260],{"class":210},[204,20097,20098],{"class":214}," man;",[204,20100,20101],{"class":273}," \u002F\u002F拷贝构造\n",[204,20103,20104],{"class":206,"line":1869},[204,20105,2486],{"emptyLinePlaceholder":135},[204,20107,20108],{"class":206,"line":2663},[204,20109,20110],{"class":273},"    \u002F\u002FPerson newman3;\n",[204,20112,20113,20116],{"class":206,"line":2677},[204,20114,20115],{"class":273},"    \u002F\u002Fnewman3 = man;",[204,20117,20118],{"class":273}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[204,20120,20121],{"class":206,"line":2685},[204,20122,1651],{"class":214},[204,20124,20125],{"class":206,"line":2690},[204,20126,2486],{"emptyLinePlaceholder":135},[204,20128,20129],{"class":206,"line":2696},[204,20130,20131],{"class":273},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[204,20133,20134],{"class":206,"line":2702},[204,20135,20136],{"class":273},"\u002F\u002F相当于Person p1 = p;\n",[204,20138,20139,20141,20143,20145,20147,20150],{"class":206,"line":2707},[204,20140,5451],{"class":210},[204,20142,19573],{"class":2049},[204,20144,215],{"class":214},[204,20146,19133],{"class":2049},[204,20148,20149],{"class":5303}," p1",[204,20151,20152],{"class":214},") {}\n",[204,20154,20155,20157,20159],{"class":206,"line":8035},[204,20156,5451],{"class":210},[204,20158,5744],{"class":2049},[204,20160,10940],{"class":214},[204,20162,20163,20165],{"class":206,"line":8059},[204,20164,18691],{"class":214},[204,20166,20167],{"class":273}," \u002F\u002F无参构造函数\n",[204,20169,20170,20172],{"class":206,"line":8064},[204,20171,19623],{"class":2049},[204,20173,19626],{"class":214},[204,20175,20176],{"class":206,"line":8070},[204,20177,1651],{"class":214},[204,20179,20180],{"class":206,"line":8097},[204,20181,2486],{"emptyLinePlaceholder":135},[204,20183,20184],{"class":206,"line":8102},[204,20185,20186],{"class":273},"\u002F\u002F3. 以值方式返回局部对象\n",[204,20188,20189,20191,20193],{"class":206,"line":8108},[204,20190,19133],{"class":2049},[204,20192,19642],{"class":2049},[204,20194,2062],{"class":214},[204,20196,20197],{"class":206,"line":8120},[204,20198,1632],{"class":214},[204,20200,20201],{"class":206,"line":8132},[204,20202,19123],{"class":214},[204,20204,20205,20207,20209,20211,20213,20215,20217,20219,20222,20224],{"class":206,"line":8144},[204,20206,6616],{"class":214},[204,20208,1256],{"class":210},[204,20210,1744],{"class":214},[204,20212,218],{"class":210},[204,20214,6605],{"class":210},[204,20216,642],{"class":214},[204,20218,566],{"class":210},[204,20220,20221],{"class":214},"p1 ",[204,20223,1256],{"class":210},[204,20225,8927],{"class":214},[204,20227,20228,20230],{"class":206,"line":9803},[204,20229,4176],{"class":210},[204,20231,20232],{"class":214}," p1;\n",[204,20234,20235],{"class":206,"line":9828},[204,20236,1651],{"class":214},[204,20238,20239],{"class":206,"line":9851},[204,20240,2486],{"emptyLinePlaceholder":135},[204,20242,20243,20245,20247],{"class":206,"line":9875},[204,20244,5451],{"class":210},[204,20246,5816],{"class":2049},[204,20248,2062],{"class":214},[204,20250,20251],{"class":206,"line":9880},[204,20252,1632],{"class":214},[204,20254,20255,20257,20259,20261],{"class":206,"line":9885},[204,20256,19708],{"class":214},[204,20258,260],{"class":210},[204,20260,19642],{"class":2049},[204,20262,5723],{"class":214},[204,20264,20265,20267,20269,20271,20273,20275,20277,20279,20281,20283],{"class":206,"line":9890},[204,20266,6616],{"class":214},[204,20268,1256],{"class":210},[204,20270,1744],{"class":214},[204,20272,218],{"class":210},[204,20274,6605],{"class":210},[204,20276,642],{"class":214},[204,20278,566],{"class":210},[204,20280,11535],{"class":214},[204,20282,1256],{"class":210},[204,20284,8927],{"class":214},[204,20286,20287],{"class":206,"line":9899},[204,20288,1651],{"class":214},[204,20290,20291],{"class":206,"line":9904},[204,20292,2486],{"emptyLinePlaceholder":135},[204,20294,20295],{"class":206,"line":9910},[204,20296,2486],{"emptyLinePlaceholder":135},[204,20298,20299,20301,20303],{"class":206,"line":9931},[204,20300,218],{"class":210},[204,20302,2059],{"class":2049},[204,20304,10940],{"class":214},[204,20306,20307],{"class":206,"line":9937},[204,20308,2486],{"emptyLinePlaceholder":135},[204,20310,20311],{"class":206,"line":9951},[204,20312,20313],{"class":273},"    \u002F\u002Ftest01();\n",[204,20315,20316],{"class":206,"line":9957},[204,20317,20318],{"class":273},"    \u002F\u002Ftest02();\n",[204,20320,20321,20323],{"class":206,"line":9984},[204,20322,19778],{"class":2049},[204,20324,5723],{"class":214},[204,20326,20327],{"class":206,"line":9993},[204,20328,2486],{"emptyLinePlaceholder":135},[204,20330,20331,20333,20335,20337],{"class":206,"line":9999},[204,20332,2389],{"class":2049},[204,20334,215],{"class":214},[204,20336,2394],{"class":319},[204,20338,2805],{"class":214},[204,20340,20341],{"class":206,"line":10007},[204,20342,2486],{"emptyLinePlaceholder":135},[204,20344,20345,20347,20349],{"class":206,"line":10012},[204,20346,4176],{"class":210},[204,20348,4179],{"class":263},[204,20350,1377],{"class":214},[204,20352,20353],{"class":206,"line":16691},[204,20354,1651],{"class":214},[49,20356,20358],{"id":20357},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20360,20361],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20363,20364],{},"1．默认构造函数(无参，函数体为空)",[19,20366,20367],{},"2．默认析构函数(无参，函数体为空)",[19,20369,20370],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20372,20373],{},"构造函数调用规则如下：",[68,20375,20376,20379],{},[71,20377,20378],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[71,20380,20381],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[196,20383,20385],{"className":198,"code":20384,"language":200,"meta":125,"style":125},"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",[81,20386,20387,20395,20399,20404,20410,20422,20426,20431,20443,20452,20464,20468,20472,20488,20497,20509,20513,20517,20523,20535,20539,20543,20549,20553,20557,20565,20569,20581,20586,20594,20598,20616,20620,20624,20632,20636,20641,20649,20664,20677,20681,20686,20693,20709,20722,20726,20730,20738,20742,20748,20752,20762,20766,20774],{"__ignoreMap":125},[204,20388,20389,20391,20393],{"class":206,"line":207},[204,20390,14781],{"class":210},[204,20392,15656],{"class":2049},[204,20394,15659],{"class":214},[204,20396,20397],{"class":206,"line":126},[204,20398,14803],{"class":210},[204,20400,20401],{"class":206,"line":131},[204,20402,20403],{"class":273},"    \u002F\u002F无参（默认）构造函数\n",[204,20405,20406,20408],{"class":206,"line":1281},[204,20407,18606],{"class":2049},[204,20409,10940],{"class":214},[204,20411,20412,20414,20416,20418,20420],{"class":206,"line":1287},[204,20413,9756],{"class":214},[204,20415,1256],{"class":210},[204,20417,19897],{"class":319},[204,20419,1531],{"class":210},[204,20421,8927],{"class":214},[204,20423,20424],{"class":206,"line":1301},[204,20425,2273],{"class":214},[204,20427,20428],{"class":206,"line":1307},[204,20429,20430],{"class":273},"    \u002F\u002F有参构造函数\n",[204,20432,20433,20435,20437,20439,20441],{"class":206,"line":1398},[204,20434,18606],{"class":2049},[204,20436,215],{"class":214},[204,20438,218],{"class":210},[204,20440,1485],{"class":5303},[204,20442,12529],{"class":214},[204,20444,20445,20448,20450],{"class":206,"line":1404},[204,20446,20447],{"class":214},"        age ",[204,20449,260],{"class":210},[204,20451,1519],{"class":214},[204,20453,20454,20456,20458,20460,20462],{"class":206,"line":1416},[204,20455,9756],{"class":214},[204,20457,1256],{"class":210},[204,20459,19937],{"class":319},[204,20461,1531],{"class":210},[204,20463,8927],{"class":214},[204,20465,20466],{"class":206,"line":1698},[204,20467,2273],{"class":214},[204,20469,20470],{"class":206,"line":1703},[204,20471,18961],{"class":273},[204,20473,20474,20476,20478,20480,20482,20484,20486],{"class":206,"line":1709},[204,20475,18606],{"class":2049},[204,20477,215],{"class":214},[204,20479,6879],{"class":210},[204,20481,15656],{"class":2049},[204,20483,566],{"class":210},[204,20485,6912],{"class":5303},[204,20487,12529],{"class":214},[204,20489,20490,20492,20494],{"class":206,"line":1714},[204,20491,20447],{"class":214},[204,20493,260],{"class":210},[204,20495,20496],{"class":214}," p.age;\n",[204,20498,20499,20501,20503,20505,20507],{"class":206,"line":1728},[204,20500,9756],{"class":214},[204,20502,1256],{"class":210},[204,20504,19978],{"class":319},[204,20506,1531],{"class":210},[204,20508,8927],{"class":214},[204,20510,20511],{"class":206,"line":1733},[204,20512,2273],{"class":214},[204,20514,20515],{"class":206,"line":1739},[204,20516,18634],{"class":273},[204,20518,20519,20521],{"class":206,"line":1760},[204,20520,18639],{"class":2049},[204,20522,10940],{"class":214},[204,20524,20525,20527,20529,20531,20533],{"class":206,"line":1765},[204,20526,9756],{"class":214},[204,20528,1256],{"class":210},[204,20530,20015],{"class":319},[204,20532,1531],{"class":210},[204,20534,8927],{"class":214},[204,20536,20537],{"class":206,"line":1779},[204,20538,2273],{"class":214},[204,20540,20541],{"class":206,"line":1784},[204,20542,14803],{"class":210},[204,20544,20545,20547],{"class":206,"line":1813},[204,20546,2071],{"class":210},[204,20548,7884],{"class":214},[204,20550,20551],{"class":206,"line":1818},[204,20552,4081],{"class":214},[204,20554,20555],{"class":206,"line":1835},[204,20556,2486],{"emptyLinePlaceholder":135},[204,20558,20559,20561,20563],{"class":206,"line":1840},[204,20560,5451],{"class":210},[204,20562,5675],{"class":2049},[204,20564,2062],{"class":214},[204,20566,20567],{"class":206,"line":1845},[204,20568,1632],{"class":214},[204,20570,20571,20573,20575,20577,20579],{"class":206,"line":1850},[204,20572,19518],{"class":214},[204,20574,7217],{"class":2049},[204,20576,215],{"class":214},[204,20578,863],{"class":263},[204,20580,2805],{"class":214},[204,20582,20583],{"class":206,"line":1864},[204,20584,20585],{"class":273},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[204,20587,20588,20590,20592],{"class":206,"line":1869},[204,20589,19518],{"class":214},[204,20591,7120],{"class":2049},[204,20593,17602],{"class":214},[204,20595,20596],{"class":206,"line":2663},[204,20597,2486],{"emptyLinePlaceholder":135},[204,20599,20600,20602,20604,20607,20609,20612,20614],{"class":206,"line":2677},[204,20601,6616],{"class":214},[204,20603,1256],{"class":210},[204,20605,20606],{"class":319}," \"p2的年龄为： \"",[204,20608,1531],{"class":210},[204,20610,20611],{"class":214}," p2.age ",[204,20613,1256],{"class":210},[204,20615,8927],{"class":214},[204,20617,20618],{"class":206,"line":2685},[204,20619,1651],{"class":214},[204,20621,20622],{"class":206,"line":2690},[204,20623,2486],{"emptyLinePlaceholder":135},[204,20625,20626,20628,20630],{"class":206,"line":2696},[204,20627,5451],{"class":210},[204,20629,5744],{"class":2049},[204,20631,2062],{"class":214},[204,20633,20634],{"class":206,"line":2702},[204,20635,1632],{"class":214},[204,20637,20638],{"class":206,"line":2707},[204,20639,20640],{"class":273},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[204,20642,20643,20646],{"class":206,"line":8035},[204,20644,20645],{"class":214},"    Person p1;",[204,20647,20648],{"class":273}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[204,20650,20651,20653,20655,20657,20659,20661],{"class":206,"line":8059},[204,20652,19518],{"class":214},[204,20654,7120],{"class":2049},[204,20656,215],{"class":214},[204,20658,659],{"class":263},[204,20660,6053],{"class":214},[204,20662,20663],{"class":273}," \u002F\u002F用户提供的有参\n",[204,20665,20666,20668,20671,20674],{"class":206,"line":8064},[204,20667,19518],{"class":214},[204,20669,20670],{"class":2049},"p3",[204,20672,20673],{"class":214},"(p2);",[204,20675,20676],{"class":273}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[204,20678,20679],{"class":206,"line":8070},[204,20680,2486],{"emptyLinePlaceholder":135},[204,20682,20683],{"class":206,"line":8097},[204,20684,20685],{"class":273},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[204,20687,20688,20691],{"class":206,"line":8102},[204,20689,20690],{"class":214},"    Person p4;",[204,20692,20648],{"class":273},[204,20694,20695,20697,20700,20702,20704,20706],{"class":206,"line":8108},[204,20696,19518],{"class":214},[204,20698,20699],{"class":2049},"p5",[204,20701,215],{"class":214},[204,20703,659],{"class":263},[204,20705,6053],{"class":214},[204,20707,20708],{"class":273}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[204,20710,20711,20713,20716,20719],{"class":206,"line":8120},[204,20712,19518],{"class":214},[204,20714,20715],{"class":2049},"p6",[204,20717,20718],{"class":214},"(p5);",[204,20720,20721],{"class":273}," \u002F\u002F用户自己提供拷贝构造\n",[204,20723,20724],{"class":206,"line":8132},[204,20725,1651],{"class":214},[204,20727,20728],{"class":206,"line":8144},[204,20729,2486],{"emptyLinePlaceholder":135},[204,20731,20732,20734,20736],{"class":206,"line":9803},[204,20733,218],{"class":210},[204,20735,2059],{"class":2049},[204,20737,10940],{"class":214},[204,20739,20740],{"class":206,"line":9828},[204,20741,2486],{"emptyLinePlaceholder":135},[204,20743,20744,20746],{"class":206,"line":9851},[204,20745,5720],{"class":2049},[204,20747,5723],{"class":214},[204,20749,20750],{"class":206,"line":9875},[204,20751,2486],{"emptyLinePlaceholder":135},[204,20753,20754,20756,20758,20760],{"class":206,"line":9880},[204,20755,2389],{"class":2049},[204,20757,215],{"class":214},[204,20759,2394],{"class":319},[204,20761,2805],{"class":214},[204,20763,20764],{"class":206,"line":9885},[204,20765,2486],{"emptyLinePlaceholder":135},[204,20767,20768,20770,20772],{"class":206,"line":9890},[204,20769,4176],{"class":210},[204,20771,4179],{"class":263},[204,20773,1377],{"class":214},[204,20775,20776],{"class":206,"line":9899},[204,20777,1651],{"class":214},[49,20779,20781],{"id":20780},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20783,20784],{},"浅拷贝：简单的赋值拷贝操作",[19,20786,20787],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[196,20789,20791],{"className":198,"code":20790,"language":200,"meta":125,"style":125},"#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",[81,20792,20793,20799,20809,20815,20819,20823,20828,20834,20838,20851,20855,20859,20866,20870,20880,20895,20908,20912,20917,20922,20938,20942,20955,20960,20965,20970,20979,20984,20999,21003,21007,21011,21017,21021,21026,21041,21045,21056,21070,21074,21083,21087,21093,21105,21109,21117,21121,21138,21169,21177,21205,21209,21213,21221,21225,21231],{"__ignoreMap":125},[204,20794,20795,20797],{"class":206,"line":207},[204,20796,2035],{"class":210},[204,20798,2038],{"class":319},[204,20800,20801,20803,20805,20807],{"class":206,"line":126},[204,20802,2043],{"class":210},[204,20804,2046],{"class":210},[204,20806,2050],{"class":2049},[204,20808,1377],{"class":214},[204,20810,20811,20813],{"class":206,"line":131},[204,20812,14781],{"class":210},[204,20814,15258],{"class":2049},[204,20816,20817],{"class":206,"line":1281},[204,20818,1632],{"class":214},[204,20820,20821],{"class":206,"line":1287},[204,20822,14803],{"class":210},[204,20824,20825],{"class":206,"line":1301},[204,20826,20827],{"class":273},"    \u002F\u002F默认构造函数\n",[204,20829,20830,20832],{"class":206,"line":1307},[204,20831,18606],{"class":2049},[204,20833,2062],{"class":214},[204,20835,20836],{"class":206,"line":1398},[204,20837,2116],{"class":214},[204,20839,20840,20842,20844,20847,20849],{"class":206,"line":1404},[204,20841,3537],{"class":214},[204,20843,1256],{"class":210},[204,20845,20846],{"class":319},"\"默认构造函数\"",[204,20848,1256],{"class":210},[204,20850,1278],{"class":214},[204,20852,20853],{"class":206,"line":1416},[204,20854,2273],{"class":214},[204,20856,20857],{"class":206,"line":1698},[204,20858,20430],{"class":273},[204,20860,20861,20863],{"class":206,"line":1703},[204,20862,18639],{"class":2049},[204,20864,20865],{"class":214},"(int age,int height)\n",[204,20867,20868],{"class":206,"line":1709},[204,20869,2116],{"class":214},[204,20871,20872,20875,20877],{"class":206,"line":1714},[204,20873,20874],{"class":214},"        m_Age",[204,20876,260],{"class":210},[204,20878,20879],{"class":214},"age;\n",[204,20881,20882,20885,20887,20889,20892],{"class":206,"line":1728},[204,20883,20884],{"class":214},"        m_Height",[204,20886,11804],{"class":210},[204,20888,2468],{"class":210},[204,20890,20891],{"class":214},"(height);",[204,20893,20894],{"class":273},"\u002F\u002F放到堆区\n",[204,20896,20897,20899,20901,20904,20906],{"class":206,"line":1733},[204,20898,3537],{"class":214},[204,20900,1256],{"class":210},[204,20902,20903],{"class":319},"\"有参构造函数\"",[204,20905,1256],{"class":210},[204,20907,1278],{"class":214},[204,20909,20910],{"class":206,"line":1739},[204,20911,2273],{"class":214},[204,20913,20914],{"class":206,"line":1760},[204,20915,20916],{"class":273},"    \u002F\u002F深拷贝解决上述问题\n",[204,20918,20919],{"class":206,"line":1765},[204,20920,20921],{"class":273},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[204,20923,20924,20926,20928,20930,20932,20934,20936],{"class":206,"line":1779},[204,20925,18606],{"class":2049},[204,20927,215],{"class":214},[204,20929,6879],{"class":210},[204,20931,15656],{"class":2049},[204,20933,10671],{"class":210},[204,20935,19],{"class":5303},[204,20937,221],{"class":214},[204,20939,20940],{"class":206,"line":1784},[204,20941,2116],{"class":214},[204,20943,20944,20946,20948,20951,20953],{"class":206,"line":1813},[204,20945,3537],{"class":214},[204,20947,1256],{"class":210},[204,20949,20950],{"class":319},"\"拷贝构造函数\"",[204,20952,1256],{"class":210},[204,20954,1278],{"class":214},[204,20956,20957],{"class":206,"line":1818},[204,20958,20959],{"class":273},"        \u002F\u002F编译器默认的写如下注释部分\n",[204,20961,20962],{"class":206,"line":1835},[204,20963,20964],{"class":273},"        \u002F\u002Fm_Age=p.m_Age;\n",[204,20966,20967],{"class":206,"line":1840},[204,20968,20969],{"class":273},"        \u002F\u002Fm_Height=p.m_Height;\n",[204,20971,20972,20974,20976],{"class":206,"line":1845},[204,20973,20874],{"class":214},[204,20975,260],{"class":210},[204,20977,20978],{"class":214},"p.m_Age;\n",[204,20980,20981],{"class":206,"line":1850},[204,20982,20983],{"class":273},"        \u002F\u002F深拷贝操作\n",[204,20985,20986,20988,20990,20992,20994,20996],{"class":206,"line":1864},[204,20987,20884],{"class":214},[204,20989,11804],{"class":210},[204,20991,2468],{"class":210},[204,20993,215],{"class":214},[204,20995,668],{"class":210},[204,20997,20998],{"class":214},"p.m_Height);\n",[204,21000,21001],{"class":206,"line":1869},[204,21002,2273],{"class":214},[204,21004,21005],{"class":206,"line":2663},[204,21006,2486],{"emptyLinePlaceholder":135},[204,21008,21009],{"class":206,"line":2677},[204,21010,18634],{"class":273},[204,21012,21013,21015],{"class":206,"line":2685},[204,21014,18639],{"class":2049},[204,21016,2062],{"class":214},[204,21018,21019],{"class":206,"line":2690},[204,21020,2116],{"class":214},[204,21022,21023],{"class":206,"line":2696},[204,21024,21025],{"class":273},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[204,21027,21028,21030,21033,21036,21039],{"class":206,"line":2702},[204,21029,2583],{"class":210},[204,21031,21032],{"class":214},"(m_Height ",[204,21034,21035],{"class":210},"!=",[204,21037,21038],{"class":263}," NULL",[204,21040,221],{"class":214},[204,21042,21043],{"class":206,"line":2707},[204,21044,2596],{"class":214},[204,21046,21047,21050,21053],{"class":206,"line":8035},[204,21048,21049],{"class":210},"            delete",[204,21051,21052],{"class":214}," m_Height;",[204,21054,21055],{"class":273}," \u002F\u002F释放堆区内存\n",[204,21057,21058,21061,21063,21065,21067],{"class":206,"line":8059},[204,21059,21060],{"class":214},"            m_Height",[204,21062,260],{"class":210},[204,21064,2478],{"class":263},[204,21066,270],{"class":214},[204,21068,21069],{"class":273}," \u002F\u002F防止野指针\n",[204,21071,21072],{"class":206,"line":8064},[204,21073,2615],{"class":214},[204,21075,21076,21078,21080],{"class":206,"line":8070},[204,21077,3537],{"class":214},[204,21079,1256],{"class":210},[204,21081,21082],{"class":319},"\"Person的析构函数调用\"\n",[204,21084,21085],{"class":206,"line":8097},[204,21086,2273],{"class":214},[204,21088,21089,21091],{"class":206,"line":8102},[204,21090,2071],{"class":210},[204,21092,15753],{"class":214},[204,21094,21095,21097,21099,21102],{"class":206,"line":8108},[204,21096,2071],{"class":210},[204,21098,6605],{"class":210},[204,21100,21101],{"class":214},"m_Height;",[204,21103,21104],{"class":273}," \u002F\u002F定义一个指针，指向身高\n",[204,21106,21107],{"class":206,"line":8120},[204,21108,4081],{"class":214},[204,21110,21111,21113,21115],{"class":206,"line":8132},[204,21112,5451],{"class":210},[204,21114,5675],{"class":2049},[204,21116,2062],{"class":214},[204,21118,21119],{"class":206,"line":8144},[204,21120,1632],{"class":214},[204,21122,21123,21125,21127,21129,21131,21133,21136],{"class":206,"line":9803},[204,21124,19518],{"class":214},[204,21126,7217],{"class":2049},[204,21128,215],{"class":214},[204,21130,863],{"class":263},[204,21132,591],{"class":214},[204,21134,21135],{"class":263},"160",[204,21137,2805],{"class":214},[204,21139,21140,21142,21144,21147,21149,21152,21154,21157,21159,21162,21164,21166],{"class":206,"line":9828},[204,21141,1637],{"class":214},[204,21143,1256],{"class":210},[204,21145,21146],{"class":319},"\"p1的年龄为:\"",[204,21148,1256],{"class":210},[204,21150,21151],{"class":214},"p1.m_Age",[204,21153,1256],{"class":210},[204,21155,21156],{"class":319},"\"身高为：\"",[204,21158,6506],{"class":210},[204,21160,21161],{"class":214},"p1.m_Height",[204,21163,1256],{"class":210},[204,21165,1325],{"class":214},[204,21167,21168],{"class":273},"  \u002F\u002F18\n",[204,21170,21171,21173,21175],{"class":206,"line":9851},[204,21172,19518],{"class":214},[204,21174,7120],{"class":2049},[204,21176,17602],{"class":214},[204,21178,21179,21181,21183,21186,21188,21190,21192,21194,21196,21199,21201,21203],{"class":206,"line":9875},[204,21180,1637],{"class":214},[204,21182,1256],{"class":210},[204,21184,21185],{"class":319},"\"p2的年龄为：\"",[204,21187,1256],{"class":210},[204,21189,19548],{"class":214},[204,21191,1256],{"class":210},[204,21193,21156],{"class":319},[204,21195,6506],{"class":210},[204,21197,21198],{"class":214},"p2.m_Height",[204,21200,1256],{"class":210},[204,21202,1325],{"class":214},[204,21204,21168],{"class":273},[204,21206,21207],{"class":206,"line":9880},[204,21208,13297],{"class":214},[204,21210,21211],{"class":206,"line":9885},[204,21212,1651],{"class":214},[204,21214,21215,21217,21219],{"class":206,"line":9890},[204,21216,218],{"class":210},[204,21218,2059],{"class":2049},[204,21220,2062],{"class":214},[204,21222,21223],{"class":206,"line":9899},[204,21224,1632],{"class":214},[204,21226,21227,21229],{"class":206,"line":9904},[204,21228,5720],{"class":2049},[204,21230,5723],{"class":214},[204,21232,21233],{"class":206,"line":9910},[204,21234,1651],{"class":214},[19,21236,21237],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21239,21240],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21242,21243],{},[23,21244],{"alt":125,"src":21245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21247,21248],{},"浅拷贝问题要使用深拷贝来解决",[19,21250,21251],{},[23,21252],{"alt":125,"src":21253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21255,21256],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[49,21258,21260],{"id":21259},"_826初始化列表","8.2.6初始化列表",[19,21262,21263],{},"作用：初始化属性",[19,21265,5268],{},[196,21267,21270],{"className":21268,"code":21269,"language":5274},[5272],"构造函数():属性1(值1),属性2(值2).....{}\n",[81,21271,21269],{"__ignoreMap":125},[19,21273,21274],{},"例子",[196,21276,21278],{"className":198,"code":21277,"language":200,"meta":125,"style":125},"#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",[81,21279,21280,21286,21296,21302,21306,21311,21315,21320,21325,21330,21335,21340,21345,21349,21354,21359,21402,21411,21429,21447,21465,21469,21473,21480,21487,21494,21498,21502,21510,21514,21518,21538,21547,21551,21555,21565,21569,21577],{"__ignoreMap":125},[204,21281,21282,21284],{"class":206,"line":207},[204,21283,2035],{"class":210},[204,21285,2038],{"class":319},[204,21287,21288,21290,21292,21294],{"class":206,"line":126},[204,21289,2043],{"class":210},[204,21291,2046],{"class":210},[204,21293,2050],{"class":2049},[204,21295,1377],{"class":214},[204,21297,21298,21300],{"class":206,"line":131},[204,21299,14781],{"class":210},[204,21301,15258],{"class":2049},[204,21303,21304],{"class":206,"line":1281},[204,21305,1632],{"class":214},[204,21307,21308],{"class":206,"line":1287},[204,21309,21310],{"class":210},"    public:\n",[204,21312,21313],{"class":206,"line":1301},[204,21314,2486],{"emptyLinePlaceholder":135},[204,21316,21317],{"class":206,"line":1307},[204,21318,21319],{"class":273},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[204,21321,21322],{"class":206,"line":1398},[204,21323,21324],{"class":273},"    \u002F\u002FPerson(int a, int b, int c) {\n",[204,21326,21327],{"class":206,"line":1404},[204,21328,21329],{"class":273},"    \u002F\u002F  m_A = a;\n",[204,21331,21332],{"class":206,"line":1416},[204,21333,21334],{"class":273},"    \u002F\u002F  m_B = b;\n",[204,21336,21337],{"class":206,"line":1698},[204,21338,21339],{"class":273},"    \u002F\u002F  m_C = c;\n",[204,21341,21342],{"class":206,"line":1703},[204,21343,21344],{"class":273},"    \u002F\u002F}\n",[204,21346,21347],{"class":206,"line":1709},[204,21348,2486],{"emptyLinePlaceholder":135},[204,21350,21351],{"class":206,"line":1714},[204,21352,21353],{"class":273},"    \u002F\u002F初始化列表方式初始化\n",[204,21355,21356],{"class":206,"line":1728},[204,21357,21358],{"class":273},"    \u002F\u002F使用有参构造函数\n",[204,21360,21361,21363,21365,21367,21369,21371,21373,21375,21377,21379,21381,21384,21387,21390,21393,21396,21399],{"class":206,"line":1733},[204,21362,18606],{"class":2049},[204,21364,215],{"class":214},[204,21366,218],{"class":210},[204,21368,1485],{"class":5303},[204,21370,12522],{"class":214},[204,21372,218],{"class":210},[204,21374,2919],{"class":5303},[204,21376,12522],{"class":214},[204,21378,218],{"class":210},[204,21380,2935],{"class":5303},[204,21382,21383],{"class":214},") :",[204,21385,21386],{"class":2049},"m_A",[204,21388,21389],{"class":214},"(a), ",[204,21391,21392],{"class":2049},"m_B",[204,21394,21395],{"class":214},"(b), ",[204,21397,21398],{"class":2049},"m_C",[204,21400,21401],{"class":214},"(c) {}\n",[204,21403,21404,21406,21409],{"class":206,"line":1739},[204,21405,14996],{"class":210},[204,21407,21408],{"class":2049}," PrintPerson",[204,21410,10940],{"class":214},[204,21412,21413,21415,21417,21420,21422,21425,21427],{"class":206,"line":1760},[204,21414,9756],{"class":214},[204,21416,1256],{"class":210},[204,21418,21419],{"class":319}," \"mA:\"",[204,21421,1531],{"class":210},[204,21423,21424],{"class":214}," m_A ",[204,21426,1256],{"class":210},[204,21428,8927],{"class":214},[204,21430,21431,21433,21435,21438,21440,21443,21445],{"class":206,"line":1765},[204,21432,9756],{"class":214},[204,21434,1256],{"class":210},[204,21436,21437],{"class":319}," \"mB:\"",[204,21439,1531],{"class":210},[204,21441,21442],{"class":214}," m_B ",[204,21444,1256],{"class":210},[204,21446,8927],{"class":214},[204,21448,21449,21451,21453,21456,21458,21461,21463],{"class":206,"line":1779},[204,21450,9756],{"class":214},[204,21452,1256],{"class":210},[204,21454,21455],{"class":319}," \"mC:\"",[204,21457,1531],{"class":210},[204,21459,21460],{"class":214}," m_C ",[204,21462,1256],{"class":210},[204,21464,8927],{"class":214},[204,21466,21467],{"class":206,"line":1784},[204,21468,2273],{"class":214},[204,21470,21471],{"class":206,"line":1813},[204,21472,15309],{"class":210},[204,21474,21475,21477],{"class":206,"line":1818},[204,21476,2071],{"class":210},[204,21478,21479],{"class":214}," m_A;\n",[204,21481,21482,21484],{"class":206,"line":1835},[204,21483,2071],{"class":210},[204,21485,21486],{"class":214}," m_B;\n",[204,21488,21489,21491],{"class":206,"line":1840},[204,21490,2071],{"class":210},[204,21492,21493],{"class":214}," m_C;\n",[204,21495,21496],{"class":206,"line":1845},[204,21497,4081],{"class":214},[204,21499,21500],{"class":206,"line":1850},[204,21501,2486],{"emptyLinePlaceholder":135},[204,21503,21504,21506,21508],{"class":206,"line":1864},[204,21505,218],{"class":210},[204,21507,2059],{"class":2049},[204,21509,6065],{"class":214},[204,21511,21512],{"class":206,"line":1869},[204,21513,1632],{"class":214},[204,21515,21516],{"class":206,"line":2663},[204,21517,2486],{"emptyLinePlaceholder":135},[204,21519,21520,21522,21524,21526,21528,21530,21532,21534,21536],{"class":206,"line":2677},[204,21521,19518],{"class":214},[204,21523,19],{"class":2049},[204,21525,215],{"class":214},[204,21527,431],{"class":263},[204,21529,12522],{"class":214},[204,21531,292],{"class":263},[204,21533,12522],{"class":214},[204,21535,286],{"class":263},[204,21537,2805],{"class":214},[204,21539,21540,21542,21545],{"class":206,"line":2685},[204,21541,15953],{"class":214},[204,21543,21544],{"class":2049},"PrintPerson",[204,21546,5723],{"class":214},[204,21548,21549],{"class":206,"line":2690},[204,21550,2486],{"emptyLinePlaceholder":135},[204,21552,21553],{"class":206,"line":2696},[204,21554,2486],{"emptyLinePlaceholder":135},[204,21556,21557,21559,21561,21563],{"class":206,"line":2702},[204,21558,2389],{"class":2049},[204,21560,215],{"class":214},[204,21562,2394],{"class":319},[204,21564,2805],{"class":214},[204,21566,21567],{"class":206,"line":2707},[204,21568,2486],{"emptyLinePlaceholder":135},[204,21570,21571,21573,21575],{"class":206,"line":8035},[204,21572,4176],{"class":210},[204,21574,4179],{"class":263},[204,21576,1377],{"class":214},[204,21578,21579],{"class":206,"line":8059},[204,21580,1651],{"class":214},[19,21582,21583,21584,21587,21588],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[30,21585,21586],{},"参数名就是定义的对象属性","，",[30,21589,21590],{},"属性后面的值为有参构造函数的形参",[196,21592,21594],{"className":198,"code":21593,"language":200,"meta":125,"style":125},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[81,21595,21596],{"__ignoreMap":125},[204,21597,21598,21600,21602,21604,21607,21609,21612,21614,21617,21619,21622,21624,21627,21629],{"class":206,"line":207},[204,21599,19133],{"class":2049},[204,21601,215],{"class":214},[204,21603,218],{"class":210},[204,21605,21606],{"class":214}," a.",[204,21608,218],{"class":210},[204,21610,21611],{"class":214}," b,",[204,21613,218],{"class":210},[204,21615,21616],{"class":214}," b):",[204,21618,21386],{"class":2049},[204,21620,21621],{"class":214},"(a),",[204,21623,21392],{"class":2049},[204,21625,21626],{"class":214},"(c),",[204,21628,21398],{"class":2049},[204,21630,21631],{"class":214},"(b) {}\n",[49,21633,21635],{"id":21634},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21637,21638],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21640,14720],{},[196,21642,21644],{"className":198,"code":21643,"language":200,"meta":125,"style":125},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[81,21645,21646,21651,21656,21660,21665,21669],{"__ignoreMap":125},[204,21647,21648],{"class":206,"line":207},[204,21649,21650],{"class":214},"A{};\n",[204,21652,21653],{"class":206,"line":126},[204,21654,21655],{"class":214},"B\n",[204,21657,21658],{"class":206,"line":131},[204,21659,1632],{"class":214},[204,21661,21662],{"class":206,"line":1281},[204,21663,21664],{"class":214},"    A a;\n",[204,21666,21667],{"class":206,"line":1287},[204,21668,1651],{"class":214},[204,21670,21671],{"class":206,"line":1301},[204,21672,21673],{"class":273},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21675,21676],{},"案例",[196,21678,21680],{"className":198,"code":21679,"language":200,"meta":125,"style":125},"\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",[81,21681,21682,21687,21694,21698,21703,21708,21722,21726,21736,21747,21751,21758,21762,21775,21779,21784,21789,21793,21799,21803,21807,21811,21842,21846,21857,21861,21867,21871,21884,21888,21892,21896,21901,21906,21910,21918,21922,21939,21958,21962,21970,21974,21980],{"__ignoreMap":125},[204,21683,21684],{"class":206,"line":207},[204,21685,21686],{"class":273},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[204,21688,21689,21691],{"class":206,"line":126},[204,21690,14781],{"class":210},[204,21692,21693],{"class":2049}," Phone\n",[204,21695,21696],{"class":206,"line":131},[204,21697,1632],{"class":214},[204,21699,21700],{"class":206,"line":1281},[204,21701,21702],{"class":214},"public：\n",[204,21704,21705],{"class":206,"line":1287},[204,21706,21707],{"class":273},"    \u002F\u002F 赋值(构造函数)\n",[204,21709,21710,21713,21715,21717,21720],{"class":206,"line":1301},[204,21711,21712],{"class":2049},"    Phone",[204,21714,215],{"class":214},[204,21716,15004],{"class":2049},[204,21718,21719],{"class":5303}," pName",[204,21721,221],{"class":214},[204,21723,21724],{"class":206,"line":1307},[204,21725,2116],{"class":214},[204,21727,21728,21731,21733],{"class":206,"line":1398},[204,21729,21730],{"class":214},"        m_pName",[204,21732,260],{"class":210},[204,21734,21735],{"class":214},"pName;\n",[204,21737,21738,21740,21742,21745],{"class":206,"line":1404},[204,21739,3537],{"class":214},[204,21741,1256],{"class":210},[204,21743,21744],{"class":319},"\"Phone的构造函数调用\"",[204,21746,1377],{"class":214},[204,21748,21749],{"class":206,"line":1416},[204,21750,2273],{"class":214},[204,21752,21753,21756],{"class":206,"line":1698},[204,21754,21755],{"class":2049},"    ~Phone",[204,21757,2062],{"class":214},[204,21759,21760],{"class":206,"line":1703},[204,21761,2116],{"class":214},[204,21763,21764,21766,21768,21771,21773],{"class":206,"line":1709},[204,21765,3537],{"class":214},[204,21767,1256],{"class":210},[204,21769,21770],{"class":319},"\"Phone析构函数调用\"",[204,21772,1256],{"class":210},[204,21774,1278],{"class":214},[204,21776,21777],{"class":206,"line":1714},[204,21778,2273],{"class":214},[204,21780,21781],{"class":206,"line":1728},[204,21782,21783],{"class":273},"    \u002F\u002F\n",[204,21785,21786],{"class":206,"line":1733},[204,21787,21788],{"class":214},"    string m_PName;\n",[204,21790,21791],{"class":206,"line":1739},[204,21792,4081],{"class":214},[204,21794,21795,21797],{"class":206,"line":1760},[204,21796,14781],{"class":210},[204,21798,15258],{"class":2049},[204,21800,21801],{"class":206,"line":1765},[204,21802,1632],{"class":214},[204,21804,21805],{"class":206,"line":1779},[204,21806,14803],{"class":210},[204,21808,21809],{"class":206,"line":1784},[204,21810,17081],{"class":273},[204,21812,21813,21815,21817,21819,21821,21823,21825,21828,21831,21833,21836,21839],{"class":206,"line":1813},[204,21814,18606],{"class":2049},[204,21816,215],{"class":214},[204,21818,15004],{"class":2049},[204,21820,15007],{"class":5303},[204,21822,591],{"class":214},[204,21824,15004],{"class":2049},[204,21826,21827],{"class":5303}," pname",[204,21829,21830],{"class":214},"):",[204,21832,15097],{"class":2049},[204,21834,21835],{"class":214},"(name),m_phone.",[204,21837,21838],{"class":2049},"m_PName",[204,21840,21841],{"class":214},"(pname) \n",[204,21843,21844],{"class":206,"line":1818},[204,21845,2116],{"class":214},[204,21847,21848,21850,21852,21855],{"class":206,"line":1835},[204,21849,3537],{"class":214},[204,21851,1256],{"class":210},[204,21853,21854],{"class":319},"\"Person的构造函数调用\"",[204,21856,1377],{"class":214},[204,21858,21859],{"class":206,"line":1840},[204,21860,2273],{"class":214},[204,21862,21863,21865],{"class":206,"line":1845},[204,21864,18639],{"class":2049},[204,21866,2062],{"class":214},[204,21868,21869],{"class":206,"line":1850},[204,21870,2116],{"class":214},[204,21872,21873,21875,21877,21880,21882],{"class":206,"line":1864},[204,21874,3537],{"class":214},[204,21876,1256],{"class":210},[204,21878,21879],{"class":319},"\"Person析构函数调用\"",[204,21881,1256],{"class":210},[204,21883,1278],{"class":214},[204,21885,21886],{"class":206,"line":1869},[204,21887,2273],{"class":214},[204,21889,21890],{"class":206,"line":2663},[204,21891,7867],{"class":273},[204,21893,21894],{"class":206,"line":2677},[204,21895,14979],{"class":214},[204,21897,21898],{"class":206,"line":2685},[204,21899,21900],{"class":273},"    \u002F\u002F手机\n",[204,21902,21903],{"class":206,"line":2690},[204,21904,21905],{"class":214},"    Phone m_Phone;\n",[204,21907,21908],{"class":206,"line":2696},[204,21909,4081],{"class":214},[204,21911,21912,21914,21916],{"class":206,"line":2702},[204,21913,5451],{"class":210},[204,21915,5675],{"class":2049},[204,21917,2062],{"class":214},[204,21919,21920],{"class":206,"line":2707},[204,21921,1632],{"class":214},[204,21923,21924,21926,21928,21930,21932,21934,21937],{"class":206,"line":8035},[204,21925,19518],{"class":214},[204,21927,19],{"class":2049},[204,21929,215],{"class":214},[204,21931,8003],{"class":319},[204,21933,591],{"class":214},[204,21935,21936],{"class":319},"\"安卓\"",[204,21938,2805],{"class":214},[204,21940,21941,21943,21945,21948,21950,21953,21955],{"class":206,"line":8059},[204,21942,1637],{"class":214},[204,21944,1256],{"class":210},[204,21946,21947],{"class":214},"p.Name",[204,21949,1256],{"class":210},[204,21951,21952],{"class":319},"\"拿着：\"",[204,21954,1256],{"class":210},[204,21956,21957],{"class":214},"p.m_phone.m_PName;\n",[204,21959,21960],{"class":206,"line":8064},[204,21961,1651],{"class":214},[204,21963,21964,21966,21968],{"class":206,"line":8070},[204,21965,218],{"class":210},[204,21967,2059],{"class":2049},[204,21969,2062],{"class":214},[204,21971,21972],{"class":206,"line":8097},[204,21973,1632],{"class":214},[204,21975,21976,21978],{"class":206,"line":8102},[204,21977,5720],{"class":2049},[204,21979,5723],{"class":214},[204,21981,21982],{"class":206,"line":8108},[204,21983,1651],{"class":214},[19,21985,9112],{},[196,21987,21989],{"className":198,"code":21988,"language":200,"meta":125,"style":125},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[81,21990,21991,21996],{"__ignoreMap":125},[204,21992,21993],{"class":206,"line":207},[204,21994,21995],{"class":273},"    \u002F\u002F不需要写这个：\n",[204,21997,21998],{"class":206,"line":126},[204,21999,22000],{"class":273},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22002,22003],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[196,22005,22007],{"className":198,"code":22006,"language":200,"meta":125,"style":125},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[81,22008,22009],{"__ignoreMap":125},[204,22010,22011,22013,22016,22018,22021,22024],{"class":206,"line":207},[204,22012,19133],{"class":2049},[204,22014,22015],{"class":214},"(string name.string pname):",[204,22017,15097],{"class":2049},[204,22019,22020],{"class":214},"(name),",[204,22022,22023],{"class":2049},"m_phone",[204,22025,22026],{"class":214},"(pname) {}\n",[19,22028,22029,22030,260,22033],{},"采用的是隐式转换法，实际为如下：\n",[81,22031,22032],{},"m_phone(pname)",[81,22034,22035],{},"Phone m_phone=pname",[19,22037,22038,22041],{},[30,22039,22040],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22043,22044],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[49,22046,22048],{"id":22047},"_828静态对象","8.2.8静态对象",[19,22050,22051],{},"静态对象在成员对象前static，称为静态对象",[19,22053,22054],{},"静态对象分为两类：",[161,22056,22057],{},[71,22058,22059],{},"静态成员变量",[68,22061,22062,22065,22068],{},[71,22063,22064],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[71,22066,22067],{},"②在编译阶段分配内存",[71,22069,22070],{},"③类内声明，类外初始化",[161,22072,22073],{"start":126},[71,22074,22075],{},"静态成员函数",[68,22077,22078,22081],{},[71,22079,22080],{},"①所有对象共享同一个函数",[71,22082,22083],{},"②静态成员函数只能访问静态成员变量",[22085,22086,22088],"h4",{"id":22087},"_8281静态成员变量","8.2.8.1静态成员变量",[196,22090,22092],{"className":198,"code":22091,"language":200,"meta":125,"style":125},"#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",[81,22093,22094,22100,22110,22116,22120,22124,22129,22134,22139,22147,22151,22155,22159,22167,22171,22175,22180,22193,22197,22205,22209,22215],{"__ignoreMap":125},[204,22095,22096,22098],{"class":206,"line":207},[204,22097,2035],{"class":210},[204,22099,2038],{"class":319},[204,22101,22102,22104,22106,22108],{"class":206,"line":126},[204,22103,2043],{"class":210},[204,22105,2046],{"class":210},[204,22107,2050],{"class":2049},[204,22109,1377],{"class":214},[204,22111,22112,22114],{"class":206,"line":131},[204,22113,14781],{"class":210},[204,22115,15258],{"class":2049},[204,22117,22118],{"class":206,"line":1281},[204,22119,1632],{"class":214},[204,22121,22122],{"class":206,"line":1287},[204,22123,14803],{"class":210},[204,22125,22126],{"class":206,"line":1301},[204,22127,22128],{"class":273},"    \u002F\u002F非静态成员变量\n",[204,22130,22131],{"class":206,"line":1307},[204,22132,22133],{"class":273},"    \u002F\u002F int m_A;\n",[204,22135,22136],{"class":206,"line":1398},[204,22137,22138],{"class":273},"    \u002F\u002F定义静态成员变量\n",[204,22140,22141,22143,22145],{"class":206,"line":1404},[204,22142,11107],{"class":210},[204,22144,2468],{"class":210},[204,22146,21479],{"class":214},[204,22148,22149],{"class":206,"line":1416},[204,22150,2486],{"emptyLinePlaceholder":135},[204,22152,22153],{"class":206,"line":1698},[204,22154,2486],{"emptyLinePlaceholder":135},[204,22156,22157],{"class":206,"line":1703},[204,22158,4081],{"class":214},[204,22160,22161,22163,22165],{"class":206,"line":1709},[204,22162,5451],{"class":210},[204,22164,5675],{"class":2049},[204,22166,2062],{"class":214},[204,22168,22169],{"class":206,"line":1714},[204,22170,1632],{"class":214},[204,22172,22173],{"class":206,"line":1728},[204,22174,15400],{"class":214},[204,22176,22177],{"class":206,"line":1733},[204,22178,22179],{"class":273},"    \u002F\u002F输出类成员变量这块内存\n",[204,22181,22182,22184,22186,22189,22191],{"class":206,"line":1739},[204,22183,1637],{"class":214},[204,22185,1256],{"class":210},[204,22187,22188],{"class":214},"p.m_A",[204,22190,1256],{"class":210},[204,22192,1278],{"class":214},[204,22194,22195],{"class":206,"line":1760},[204,22196,1651],{"class":214},[204,22198,22199,22201,22203],{"class":206,"line":1765},[204,22200,218],{"class":210},[204,22202,2059],{"class":2049},[204,22204,2062],{"class":214},[204,22206,22207],{"class":206,"line":1779},[204,22208,1632],{"class":214},[204,22210,22211,22213],{"class":206,"line":1784},[204,22212,5720],{"class":2049},[204,22214,2062],{"class":214},[204,22216,22217],{"class":206,"line":1813},[204,22218,1651],{"class":214},[19,22220,22221],{},"此时输出是报错的：无法解析外部命令",[19,22223,22224],{},"解决这一问题：必须用到类内声明，类外初始化操作",[196,22226,22228],{"className":198,"code":22227,"language":200,"meta":125,"style":125},"#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",[81,22229,22230,22236,22246,22252,22256,22260,22265,22273,22277,22282,22297,22305,22309,22313,22318,22323,22335,22340,22351,22356,22361,22374,22378,22386,22390,22396],{"__ignoreMap":125},[204,22231,22232,22234],{"class":206,"line":207},[204,22233,2035],{"class":210},[204,22235,2038],{"class":319},[204,22237,22238,22240,22242,22244],{"class":206,"line":126},[204,22239,2043],{"class":210},[204,22241,2046],{"class":210},[204,22243,2050],{"class":2049},[204,22245,1377],{"class":214},[204,22247,22248,22250],{"class":206,"line":131},[204,22249,14781],{"class":210},[204,22251,15258],{"class":2049},[204,22253,22254],{"class":206,"line":1281},[204,22255,1632],{"class":214},[204,22257,22258],{"class":206,"line":1287},[204,22259,14803],{"class":210},[204,22261,22262],{"class":206,"line":1301},[204,22263,22264],{"class":273},"    \u002F\u002F类内声明\n",[204,22266,22267,22269,22271],{"class":206,"line":1307},[204,22268,11107],{"class":210},[204,22270,2468],{"class":210},[204,22272,21479],{"class":214},[204,22274,22275],{"class":206,"line":1398},[204,22276,4081],{"class":214},[204,22278,22279],{"class":206,"line":1404},[204,22280,22281],{"class":273},"\u002F\u002F类外初始化\n",[204,22283,22284,22286,22288,22291,22293,22295],{"class":206,"line":1416},[204,22285,218],{"class":210},[204,22287,15656],{"class":2049},[204,22289,22290],{"class":214},"::m_A",[204,22292,260],{"class":210},[204,22294,659],{"class":263},[204,22296,1377],{"class":214},[204,22298,22299,22301,22303],{"class":206,"line":1698},[204,22300,5451],{"class":210},[204,22302,5675],{"class":2049},[204,22304,2062],{"class":214},[204,22306,22307],{"class":206,"line":1703},[204,22308,1632],{"class":214},[204,22310,22311],{"class":206,"line":1709},[204,22312,15400],{"class":214},[204,22314,22315],{"class":206,"line":1714},[204,22316,22317],{"class":273},"    \u002F\u002F访问变量的原内存空间\n",[204,22319,22320],{"class":206,"line":1728},[204,22321,22322],{"class":273},"    \u002F\u002F100\n",[204,22324,22325,22327,22329,22331,22333],{"class":206,"line":1733},[204,22326,1637],{"class":214},[204,22328,1256],{"class":210},[204,22330,22188],{"class":214},[204,22332,1256],{"class":210},[204,22334,1278],{"class":214},[204,22336,22337],{"class":206,"line":1739},[204,22338,22339],{"class":214},"    Person p2;\n",[204,22341,22342,22345,22347,22349],{"class":206,"line":1760},[204,22343,22344],{"class":214},"    p2.m_A",[204,22346,260],{"class":210},[204,22348,1808],{"class":263},[204,22350,1377],{"class":214},[204,22352,22353],{"class":206,"line":1765},[204,22354,22355],{"class":273},"    \u002F\u002F继续访问这片空间\n",[204,22357,22358],{"class":206,"line":1779},[204,22359,22360],{"class":273},"    \u002F\u002F200\n",[204,22362,22363,22365,22367,22370,22372],{"class":206,"line":1784},[204,22364,1637],{"class":214},[204,22366,1256],{"class":210},[204,22368,22369],{"class":214},"p2.m_A",[204,22371,1256],{"class":210},[204,22373,1278],{"class":214},[204,22375,22376],{"class":206,"line":1813},[204,22377,1651],{"class":214},[204,22379,22380,22382,22384],{"class":206,"line":1818},[204,22381,218],{"class":210},[204,22383,2059],{"class":2049},[204,22385,2062],{"class":214},[204,22387,22388],{"class":206,"line":1835},[204,22389,1632],{"class":214},[204,22391,22392,22394],{"class":206,"line":1840},[204,22393,5720],{"class":2049},[204,22395,5723],{"class":214},[204,22397,22398],{"class":206,"line":1845},[204,22399,1651],{"class":214},[19,22401,22402],{},[30,22403,22404],{},"静态变量的访问",[196,22406,22408],{"className":198,"code":22407,"language":200,"meta":125,"style":125},"#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",[81,22409,22410,22416,22426,22432,22436,22440,22444,22452,22456,22461,22469,22473,22477,22491,22506,22514,22518,22523,22528,22533,22538,22550,22555,22560,22574,22591,22595,22603,22607,22613],{"__ignoreMap":125},[204,22411,22412,22414],{"class":206,"line":207},[204,22413,2035],{"class":210},[204,22415,2038],{"class":319},[204,22417,22418,22420,22422,22424],{"class":206,"line":126},[204,22419,2043],{"class":210},[204,22421,2046],{"class":210},[204,22423,2050],{"class":2049},[204,22425,1377],{"class":214},[204,22427,22428,22430],{"class":206,"line":131},[204,22429,14781],{"class":210},[204,22431,15258],{"class":2049},[204,22433,22434],{"class":206,"line":1281},[204,22435,1632],{"class":214},[204,22437,22438],{"class":206,"line":1287},[204,22439,14803],{"class":210},[204,22441,22442],{"class":206,"line":1301},[204,22443,22264],{"class":273},[204,22445,22446,22448,22450],{"class":206,"line":1307},[204,22447,11107],{"class":210},[204,22449,2468],{"class":210},[204,22451,21479],{"class":214},[204,22453,22454],{"class":206,"line":1398},[204,22455,15309],{"class":210},[204,22457,22458],{"class":206,"line":1404},[204,22459,22460],{"class":273},"    \u002F\u002F静态成员变量也是有访问权限的\n",[204,22462,22463,22465,22467],{"class":206,"line":1416},[204,22464,11107],{"class":210},[204,22466,2468],{"class":210},[204,22468,21486],{"class":214},[204,22470,22471],{"class":206,"line":1698},[204,22472,4081],{"class":214},[204,22474,22475],{"class":206,"line":1703},[204,22476,22281],{"class":273},[204,22478,22479,22481,22483,22485,22487,22489],{"class":206,"line":1709},[204,22480,218],{"class":210},[204,22482,15656],{"class":2049},[204,22484,22290],{"class":214},[204,22486,260],{"class":210},[204,22488,659],{"class":263},[204,22490,1377],{"class":214},[204,22492,22493,22495,22497,22500,22502,22504],{"class":206,"line":1714},[204,22494,218],{"class":210},[204,22496,15656],{"class":2049},[204,22498,22499],{"class":214},"::m_B",[204,22501,260],{"class":210},[204,22503,913],{"class":263},[204,22505,1377],{"class":214},[204,22507,22508,22510,22512],{"class":206,"line":1728},[204,22509,5451],{"class":210},[204,22511,5744],{"class":2049},[204,22513,2062],{"class":214},[204,22515,22516],{"class":206,"line":1733},[204,22517,1632],{"class":214},[204,22519,22520],{"class":206,"line":1739},[204,22521,22522],{"class":273},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[204,22524,22525],{"class":206,"line":1760},[204,22526,22527],{"class":273},"    \u002F\u002F静态成员变量有两种访问方式：\n",[204,22529,22530],{"class":206,"line":1765},[204,22531,22532],{"class":273},"    \u002F\u002F1.通过对象进行访问\n",[204,22534,22535],{"class":206,"line":1779},[204,22536,22537],{"class":214},"    Person p;  \n",[204,22539,22540,22542,22544,22546,22548],{"class":206,"line":1784},[204,22541,1637],{"class":214},[204,22543,1256],{"class":210},[204,22545,22188],{"class":214},[204,22547,1256],{"class":210},[204,22549,1278],{"class":214},[204,22551,22552],{"class":206,"line":1813},[204,22553,22554],{"class":273},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[204,22556,22557],{"class":206,"line":1818},[204,22558,22559],{"class":273},"    \u002F\u002F2.通过类名进行访问\n",[204,22561,22562,22564,22566,22568,22570,22572],{"class":206,"line":1835},[204,22563,1637],{"class":214},[204,22565,1256],{"class":210},[204,22567,19133],{"class":2049},[204,22569,22290],{"class":214},[204,22571,1256],{"class":210},[204,22573,1278],{"class":214},[204,22575,22576,22578,22580,22582,22584,22586,22588],{"class":206,"line":1840},[204,22577,1637],{"class":214},[204,22579,1256],{"class":210},[204,22581,19133],{"class":2049},[204,22583,22499],{"class":214},[204,22585,1256],{"class":210},[204,22587,1325],{"class":214},[204,22589,22590],{"class":273}," \u002F\u002F没有访问权限，报错\n",[204,22592,22593],{"class":206,"line":1845},[204,22594,1651],{"class":214},[204,22596,22597,22599,22601],{"class":206,"line":1850},[204,22598,218],{"class":210},[204,22600,2059],{"class":2049},[204,22602,2062],{"class":214},[204,22604,22605],{"class":206,"line":1864},[204,22606,1632],{"class":214},[204,22608,22609,22611],{"class":206,"line":1869},[204,22610,5789],{"class":2049},[204,22612,5723],{"class":214},[204,22614,22615],{"class":206,"line":2663},[204,22616,1651],{"class":214},[22085,22618,22620],{"id":22619},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22622,22623],{},"1.静态成员函数定义与访问",[196,22625,22627],{"className":198,"code":22626,"language":200,"meta":125,"style":125},"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",[81,22628,22629,22635,22639,22643,22648,22659,22663,22677,22681,22685,22693,22697,22702,22707,22711,22719,22724,22734],{"__ignoreMap":125},[204,22630,22631,22633],{"class":206,"line":207},[204,22632,14781],{"class":210},[204,22634,15258],{"class":2049},[204,22636,22637],{"class":206,"line":126},[204,22638,1632],{"class":214},[204,22640,22641],{"class":206,"line":131},[204,22642,14803],{"class":210},[204,22644,22645],{"class":206,"line":1281},[204,22646,22647],{"class":273},"    \u002F\u002F在公共权限下定义静态成员函数\n",[204,22649,22650,22652,22655,22657],{"class":206,"line":1287},[204,22651,11107],{"class":210},[204,22653,22654],{"class":210}," void",[204,22656,11472],{"class":2049},[204,22658,2062],{"class":214},[204,22660,22661],{"class":206,"line":1301},[204,22662,2116],{"class":214},[204,22664,22665,22668,22670,22673,22675],{"class":206,"line":1307},[204,22666,22667],{"class":214},"        coout",[204,22669,1256],{"class":210},[204,22671,22672],{"class":319},"\"静态成员函数的调用\"",[204,22674,1256],{"class":210},[204,22676,1278],{"class":214},[204,22678,22679],{"class":206,"line":1398},[204,22680,2273],{"class":214},[204,22682,22683],{"class":206,"line":1404},[204,22684,4081],{"class":214},[204,22686,22687,22689,22691],{"class":206,"line":1416},[204,22688,5451],{"class":210},[204,22690,5675],{"class":2049},[204,22692,2062],{"class":214},[204,22694,22695],{"class":206,"line":1698},[204,22696,1632],{"class":214},[204,22698,22699],{"class":206,"line":1703},[204,22700,22701],{"class":273},"    \u002F\u002F静态成员函数的调用方式:\n",[204,22703,22704],{"class":206,"line":1709},[204,22705,22706],{"class":273},"    \u002F\u002F1.通过对象访问\n",[204,22708,22709],{"class":206,"line":1714},[204,22710,15400],{"class":214},[204,22712,22713,22715,22717],{"class":206,"line":1728},[204,22714,15953],{"class":214},[204,22716,11638],{"class":2049},[204,22718,5723],{"class":214},[204,22720,22721],{"class":206,"line":1733},[204,22722,22723],{"class":273},"    \u002F\u002F2.通过类名访问\n",[204,22725,22726,22728,22730,22732],{"class":206,"line":1739},[204,22727,18606],{"class":2049},[204,22729,17819],{"class":214},[204,22731,11638],{"class":2049},[204,22733,5723],{"class":214},[204,22735,22736],{"class":206,"line":1760},[204,22737,1651],{"class":214},[161,22739,22740],{"start":126},[71,22741,22742],{},"静态成员函数只能访问静态成员变量",[196,22744,22746],{"className":198,"code":22745,"language":200,"meta":125,"style":125},"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",[81,22747,22748,22754,22758,22762,22766,22776,22780,22794,22799,22811,22815,22826,22836,22840,22844,22848,22858,22862,22875,22879,22883,22887,22891,22905,22913,22917,22921,22925,22929,22937,22941,22951,22956,22960,22968,22972,22978],{"__ignoreMap":125},[204,22749,22750,22752],{"class":206,"line":207},[204,22751,14781],{"class":210},[204,22753,15258],{"class":2049},[204,22755,22756],{"class":206,"line":126},[204,22757,1632],{"class":214},[204,22759,22760],{"class":206,"line":131},[204,22761,14803],{"class":210},[204,22763,22764],{"class":206,"line":1281},[204,22765,22647],{"class":273},[204,22767,22768,22770,22772,22774],{"class":206,"line":1287},[204,22769,11107],{"class":210},[204,22771,22654],{"class":210},[204,22773,11472],{"class":2049},[204,22775,2062],{"class":214},[204,22777,22778],{"class":206,"line":1301},[204,22779,2116],{"class":214},[204,22781,22782,22785,22787,22789,22791],{"class":206,"line":1307},[204,22783,22784],{"class":214},"        m_A",[204,22786,260],{"class":210},[204,22788,524],{"class":263},[204,22790,270],{"class":214},[204,22792,22793],{"class":273}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[204,22795,22796],{"class":206,"line":1398},[204,22797,22798],{"class":273},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[204,22800,22801,22803,22805,22807,22809],{"class":206,"line":1404},[204,22802,22667],{"class":214},[204,22804,1256],{"class":210},[204,22806,22672],{"class":319},[204,22808,1256],{"class":210},[204,22810,1278],{"class":214},[204,22812,22813],{"class":206,"line":1416},[204,22814,2273],{"class":214},[204,22816,22817,22819,22821,22823],{"class":206,"line":1698},[204,22818,11107],{"class":210},[204,22820,2468],{"class":210},[204,22822,15535],{"class":214},[204,22824,22825],{"class":273}," \u002F\u002F静态成员变量\n",[204,22827,22828,22830,22833],{"class":206,"line":1703},[204,22829,2071],{"class":210},[204,22831,22832],{"class":214}," m_B;",[204,22834,22835],{"class":273}," \u002F\u002F非静态成员变量\n",[204,22837,22838],{"class":206,"line":1709},[204,22839,2486],{"emptyLinePlaceholder":135},[204,22841,22842],{"class":206,"line":1714},[204,22843,15309],{"class":210},[204,22845,22846],{"class":206,"line":1728},[204,22847,22460],{"class":273},[204,22849,22850,22852,22854,22856],{"class":206,"line":1733},[204,22851,11107],{"class":210},[204,22853,22654],{"class":210},[204,22855,13705],{"class":2049},[204,22857,2062],{"class":214},[204,22859,22860],{"class":206,"line":1739},[204,22861,2116],{"class":214},[204,22863,22864,22866,22868,22871,22873],{"class":206,"line":1760},[204,22865,3537],{"class":214},[204,22867,1256],{"class":210},[204,22869,22870],{"class":319},"\"这是私有权限下的静态函数调用\"",[204,22872,1256],{"class":210},[204,22874,1278],{"class":214},[204,22876,22877],{"class":206,"line":1765},[204,22878,2273],{"class":214},[204,22880,22881],{"class":206,"line":1779},[204,22882,2486],{"emptyLinePlaceholder":135},[204,22884,22885],{"class":206,"line":1784},[204,22886,2486],{"emptyLinePlaceholder":135},[204,22888,22889],{"class":206,"line":1813},[204,22890,4081],{"class":214},[204,22892,22893,22895,22897,22899,22901,22903],{"class":206,"line":1818},[204,22894,218],{"class":210},[204,22896,15656],{"class":2049},[204,22898,22290],{"class":214},[204,22900,260],{"class":210},[204,22902,405],{"class":263},[204,22904,1377],{"class":214},[204,22906,22907,22909,22911],{"class":206,"line":1835},[204,22908,5451],{"class":210},[204,22910,5675],{"class":2049},[204,22912,2062],{"class":214},[204,22914,22915],{"class":206,"line":1840},[204,22916,1632],{"class":214},[204,22918,22919],{"class":206,"line":1845},[204,22920,22701],{"class":273},[204,22922,22923],{"class":206,"line":1850},[204,22924,22706],{"class":273},[204,22926,22927],{"class":206,"line":1864},[204,22928,15400],{"class":214},[204,22930,22931,22933,22935],{"class":206,"line":1869},[204,22932,15953],{"class":214},[204,22934,11638],{"class":2049},[204,22936,5723],{"class":214},[204,22938,22939],{"class":206,"line":2663},[204,22940,22723],{"class":273},[204,22942,22943,22945,22947,22949],{"class":206,"line":2677},[204,22944,18606],{"class":2049},[204,22946,17819],{"class":214},[204,22948,11638],{"class":2049},[204,22950,5723],{"class":214},[204,22952,22953],{"class":206,"line":2685},[204,22954,22955],{"class":273},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[204,22957,22958],{"class":206,"line":2690},[204,22959,1651],{"class":214},[204,22961,22962,22964,22966],{"class":206,"line":2696},[204,22963,218],{"class":210},[204,22965,2059],{"class":2049},[204,22967,2062],{"class":214},[204,22969,22970],{"class":206,"line":2702},[204,22971,1632],{"class":214},[204,22973,22974,22976],{"class":206,"line":2707},[204,22975,5720],{"class":2049},[204,22977,5723],{"class":214},[204,22979,22980],{"class":206,"line":8035},[204,22981,1651],{"class":214},[49,22983,22985],{"id":22984},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22085,22987,22989],{"id":22988},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,22991,22992],{},"在c++中，类内的成员变量和成员函数分开存储",[19,22994,22995],{},"只有非静态成员变量才属于类的对象上",[22997,22998,23000],"h5",{"id":22999},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[196,23002,23004],{"className":198,"code":23003,"language":200,"meta":125,"style":125},"#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",[81,23005,23006,23013,23023,23029,23033,23037,23041,23049,23053,23057,23080,23084,23092,23096,23102],{"__ignoreMap":125},[204,23007,23008,23010],{"class":206,"line":207},[204,23009,2035],{"class":210},[204,23011,23012],{"class":319},"\u003Ciostraem>\n",[204,23014,23015,23017,23019,23021],{"class":206,"line":126},[204,23016,2043],{"class":210},[204,23018,2046],{"class":210},[204,23020,2050],{"class":2049},[204,23022,1377],{"class":214},[204,23024,23025,23027],{"class":206,"line":131},[204,23026,14781],{"class":210},[204,23028,15258],{"class":2049},[204,23030,23031],{"class":206,"line":1281},[204,23032,1632],{"class":214},[204,23034,23035],{"class":206,"line":1287},[204,23036,2486],{"emptyLinePlaceholder":135},[204,23038,23039],{"class":206,"line":1301},[204,23040,4081],{"class":214},[204,23042,23043,23045,23047],{"class":206,"line":1307},[204,23044,5451],{"class":210},[204,23046,5675],{"class":2049},[204,23048,2062],{"class":214},[204,23050,23051],{"class":206,"line":1398},[204,23052,1632],{"class":214},[204,23054,23055],{"class":206,"line":1404},[204,23056,15400],{"class":214},[204,23058,23059,23061,23063,23066,23068,23071,23073,23075,23077],{"class":206,"line":1416},[204,23060,1637],{"class":214},[204,23062,1256],{"class":210},[204,23064,23065],{"class":319},"\"size of p=\"",[204,23067,1256],{"class":210},[204,23069,23070],{"class":2049},"sizeoif",[204,23072,6626],{"class":214},[204,23074,1256],{"class":210},[204,23076,1325],{"class":214},[204,23078,23079],{"class":273}," \u002F\u002F查看这个空类的占用的内存空间\n",[204,23081,23082],{"class":206,"line":1698},[204,23083,1651],{"class":214},[204,23085,23086,23088,23090],{"class":206,"line":1703},[204,23087,218],{"class":210},[204,23089,2059],{"class":2049},[204,23091,2062],{"class":214},[204,23093,23094],{"class":206,"line":1709},[204,23095,1632],{"class":214},[204,23097,23098,23100],{"class":206,"line":1714},[204,23099,5720],{"class":2049},[204,23101,5723],{"class":214},[204,23103,23104],{"class":206,"line":1728},[204,23105,1651],{"class":214},[19,23107,23108],{},"输出结果为：size of p=1",[19,23110,23111],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23113,23114],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22997,23116,23118],{"id":23117},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[196,23120,23122],{"className":198,"code":23121,"language":200,"meta":125,"style":125},"#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",[81,23123,23124,23130,23140,23148,23152,23161,23165,23173,23177,23181,23200,23204,23208,23216,23220,23226],{"__ignoreMap":125},[204,23125,23126,23128],{"class":206,"line":207},[204,23127,2035],{"class":210},[204,23129,2038],{"class":319},[204,23131,23132,23134,23136,23138],{"class":206,"line":126},[204,23133,2043],{"class":210},[204,23135,2046],{"class":210},[204,23137,2050],{"class":2049},[204,23139,1377],{"class":214},[204,23141,23142,23144,23146],{"class":206,"line":131},[204,23143,14781],{"class":210},[204,23145,15656],{"class":2049},[204,23147,2760],{"class":214},[204,23149,23150],{"class":206,"line":1281},[204,23151,1632],{"class":214},[204,23153,23154,23156,23158],{"class":206,"line":1287},[204,23155,2071],{"class":210},[204,23157,15535],{"class":214},[204,23159,23160],{"class":273},"\u002F\u002F非静态成员变量\n",[204,23162,23163],{"class":206,"line":1301},[204,23164,4081],{"class":214},[204,23166,23167,23169,23171],{"class":206,"line":1307},[204,23168,5451],{"class":210},[204,23170,5675],{"class":2049},[204,23172,2062],{"class":214},[204,23174,23175],{"class":206,"line":1398},[204,23176,1632],{"class":214},[204,23178,23179],{"class":206,"line":1404},[204,23180,15400],{"class":214},[204,23182,23183,23185,23187,23189,23191,23193,23195,23197],{"class":206,"line":1416},[204,23184,1637],{"class":214},[204,23186,1256],{"class":210},[204,23188,23065],{"class":319},[204,23190,1459],{"class":210},[204,23192,6626],{"class":214},[204,23194,1256],{"class":210},[204,23196,1325],{"class":214},[204,23198,23199],{"class":273}," \u002F\u002F查看不是空对象时占用多少内存\n",[204,23201,23202],{"class":206,"line":1698},[204,23203,2486],{"emptyLinePlaceholder":135},[204,23205,23206],{"class":206,"line":1703},[204,23207,1651],{"class":214},[204,23209,23210,23212,23214],{"class":206,"line":1709},[204,23211,218],{"class":210},[204,23213,2059],{"class":2049},[204,23215,2062],{"class":214},[204,23217,23218],{"class":206,"line":1714},[204,23219,1632],{"class":214},[204,23221,23222,23224],{"class":206,"line":1728},[204,23223,5720],{"class":2049},[204,23225,5723],{"class":214},[204,23227,23228],{"class":206,"line":1733},[204,23229,1651],{"class":214},[19,23231,23232],{},"输出结果：size of p=4",[19,23234,23235],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[161,23237,23238],{},[71,23239,23240],{},"如果加上非静态成员变量，Person类修改如下",[196,23242,23244],{"className":198,"code":23243,"language":200,"meta":125,"style":125},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[81,23245,23246,23252,23256,23262,23270,23274,23279],{"__ignoreMap":125},[204,23247,23248,23250],{"class":206,"line":207},[204,23249,14781],{"class":210},[204,23251,15258],{"class":2049},[204,23253,23254],{"class":206,"line":126},[204,23255,1632],{"class":214},[204,23257,23258,23260],{"class":206,"line":131},[204,23259,2071],{"class":210},[204,23261,21479],{"class":214},[204,23263,23264,23266,23268],{"class":206,"line":1281},[204,23265,11107],{"class":210},[204,23267,2468],{"class":210},[204,23269,21486],{"class":214},[204,23271,23272],{"class":206,"line":1287},[204,23273,4081],{"class":214},[204,23275,23276],{"class":206,"line":1301},[204,23277,23278],{"class":273},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[204,23280,23281,23283,23285,23287,23289,23291],{"class":206,"line":1307},[204,23282,218],{"class":210},[204,23284,15656],{"class":2049},[204,23286,22499],{"class":214},[204,23288,260],{"class":210},[204,23290,405],{"class":263},[204,23292,1377],{"class":214},[19,23294,23295],{},"输出结果：4",[19,23297,23298],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[161,23300,23301],{"start":126},[71,23302,23303],{},"加上非静态成员函数",[196,23305,23307],{"className":198,"code":23306,"language":200,"meta":125,"style":125},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[81,23308,23309,23316,23320,23326,23334,23338,23342,23346],{"__ignoreMap":125},[204,23310,23311,23313],{"class":206,"line":207},[204,23312,14781],{"class":210},[204,23314,23315],{"class":2049},"  Person\n",[204,23317,23318],{"class":206,"line":126},[204,23319,1632],{"class":214},[204,23321,23322,23324],{"class":206,"line":131},[204,23323,2071],{"class":210},[204,23325,21479],{"class":214},[204,23327,23328,23330,23332],{"class":206,"line":1281},[204,23329,14996],{"class":210},[204,23331,11472],{"class":2049},[204,23333,2062],{"class":214},[204,23335,23336],{"class":206,"line":1287},[204,23337,2116],{"class":214},[204,23339,23340],{"class":206,"line":1301},[204,23341,2486],{"emptyLinePlaceholder":135},[204,23343,23344],{"class":206,"line":1307},[204,23345,2273],{"class":214},[204,23347,23348],{"class":206,"line":1398},[204,23349,4081],{"class":214},[19,23351,23352],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[161,23354,23355],{"start":131},[71,23356,23357],{},"加上静态成员函数",[196,23359,23361],{"className":198,"code":23360,"language":200,"meta":125,"style":125},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[81,23362,23363,23369,23373,23379,23387,23391,23395,23399,23410,23414,23418,23422],{"__ignoreMap":125},[204,23364,23365,23367],{"class":206,"line":207},[204,23366,14781],{"class":210},[204,23368,23315],{"class":2049},[204,23370,23371],{"class":206,"line":126},[204,23372,1632],{"class":214},[204,23374,23375,23377],{"class":206,"line":131},[204,23376,2071],{"class":210},[204,23378,21479],{"class":214},[204,23380,23381,23383,23385],{"class":206,"line":1281},[204,23382,14996],{"class":210},[204,23384,11472],{"class":2049},[204,23386,2062],{"class":214},[204,23388,23389],{"class":206,"line":1287},[204,23390,2116],{"class":214},[204,23392,23393],{"class":206,"line":1301},[204,23394,2486],{"emptyLinePlaceholder":135},[204,23396,23397],{"class":206,"line":1307},[204,23398,2273],{"class":214},[204,23400,23401,23403,23405,23408],{"class":206,"line":1398},[204,23402,11107],{"class":210},[204,23404,22654],{"class":210},[204,23406,23407],{"class":2049}," func1",[204,23409,2062],{"class":214},[204,23411,23412],{"class":206,"line":1404},[204,23413,2116],{"class":214},[204,23415,23416],{"class":206,"line":1416},[204,23417,2486],{"emptyLinePlaceholder":135},[204,23419,23420],{"class":206,"line":1698},[204,23421,2273],{"class":214},[204,23423,23424],{"class":206,"line":1703},[204,23425,4081],{"class":214},[19,23427,23295],{},[19,23429,23430],{},"解释：静态成员函数也不属于类上",[5213,23432,7761],{},{"title":125,"searchDepth":126,"depth":126,"links":23434},[23435,23441],{"id":14732,"depth":126,"text":14733,"children":23436},[23437,23438,23439,23440],{"id":14736,"depth":131,"text":14737},{"id":15461,"depth":131,"text":15462},{"id":15633,"depth":131,"text":15634},{"id":16092,"depth":131,"text":16093},{"id":18464,"depth":126,"text":18465,"children":23442},[23443,23444,23445,23446,23447,23448,23449,23450,23451],{"id":18476,"depth":131,"text":18477},{"id":18769,"depth":131,"text":18770},{"id":19260,"depth":131,"text":19261},{"id":20357,"depth":131,"text":20358},{"id":20780,"depth":131,"text":20781},{"id":21259,"depth":131,"text":21260},{"id":21634,"depth":131,"text":21635},{"id":22047,"depth":131,"text":22048},{"id":22984,"depth":131,"text":22985},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14697,"description":23452},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23459,"title":200,"body":23460,"description":132,"extension":133,"meta":23464,"navigation":135,"path":23466,"seo":23467,"stem":23468,"__hash__":23469},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23461,"toc":23462},[],{"title":125,"searchDepth":126,"depth":126,"links":23463},[],{"category":23465},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":200,"description":132},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23471,"title":23472,"body":23473,"description":125,"extension":133,"meta":24063,"navigation":135,"path":24064,"seo":24065,"stem":24066,"__hash__":24067},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23474,"toc":24045},[23475,23478,23482,23485,23488,23491,23509,23514,23517,23520,23523,23526,23531,23534,23539,23542,23545,23549,23552,23555,23561,23564,23582,23586,23590,23593,23598,23601,23605,23608,23621,23624,23628,23631,23634,23637,23662,23665,23674,23685,23700,23732,23736,23743,23751,23755,23758,23761,23766,23770,23773,23776,23781,23784,23788,23791,23794,23799,23802,23806,23811,23815,23882,23886,23889,23892,23895,23898,23901,23907,23928,23931,23945,23953,23957,23960,23963,23968,23971,23976,23981,23984,23987,23992,23997,24000,24005,24010,24013,24018,24023,24026,24029,24034,24037,24042],[10,23476,23472],{"id":23477},"_1强化学习基本认识",[14,23479,23481],{"id":23480},"_11什么是强化学习","1.1.什么是强化学习",[19,23483,23484],{},"强化学习有两部分组成：智能体和环境；",[19,23486,23487],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23489,23490],{},"强化学习与监督学习的区别:",[161,23492,23493,23496,23499,23502],{},[71,23494,23495],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[71,23497,23498],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[71,23500,23501],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[71,23503,23504,23505,23508],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[30,23506,23507],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23510,23511],{},[23,23512],{"alt":125,"src":23513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23515,23516],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23518,23519],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23521,23522],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23524,23525],{},"获取奖励",[19,23527,23528],{},[23,23529],{"alt":125,"src":23530},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23532,23533],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23535,23536],{},[23,23537],{"alt":125,"src":23538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23540,23541],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23543,23544],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23546,23548],{"id":23547},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23550,23551],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23553,23554],{},"具身智能中的应用",[19,23556,23557,23560],{},[30,23558,23559],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23562,23563],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23565,23566,23567,23570,23571,23574,23575,23578,23579],{},"机器人是",[30,23568,23569],{},"躯体","，深度学习是",[30,23572,23573],{},"神经元****网络","，VLA是",[30,23576,23577],{},"通用的行为逻辑","，而强化学习是",[30,23580,23581],{},"教练",[14,23583,23585],{"id":23584},"_13序列决策","1.3.序列决策",[49,23587,23589],{"id":23588},"_131智能体与环境","1.3.1.智能体与环境",[19,23591,23592],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23594,23595],{},[23,23596],{"alt":125,"src":23597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23599,23600],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[49,23602,23604],{"id":23603},"_132奖励","1.3.2.奖励",[19,23606,23607],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23609,23610,23611,23620],{},"取某个策略的表现如何。强化学习的目的就是",[30,23612,23613,23614,23619],{},"最大化",[30,23615,23616],{},[30,23617,23618],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23622,23623],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[49,23625,23627],{"id":23626},"_133序列决策","1.3.3.序列决策",[19,23629,23630],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23632,23633],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23635,23636],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23638,23639,23643,23644,23646,23647,23649,23650,23652,23653,13882,23656,13882,23659],{},[23640,23641,23642],"em",{},"Ht"," = ",[23640,23645,809],{},"1*, a",[23640,23648,431],{},", r",[23640,23651,431],{},", . . . ,* ",[23640,23654,23655],{},"ot",[23640,23657,23658],{},", at ,",[23640,23660,23661],{},"rt",[19,23663,23664],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23666,23667,23643,23670,1744,23672,642],{},[23640,23668,23669],{},"st",[23640,23671,267],{},[23640,23673,23642],{},[19,23675,23676,23677,23680,23681,23684],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[30,23678,23679],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[30,23682,23683],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23686,23687,23688,23691,23692,23695,23696,23699],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[30,23689,23690],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[30,23693,23694],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23640,23697,23698],{},"S, A, T, R, Ω, O, γ",")。",[19,23701,23702,23703,23705,23706,23708,23709,215,23711,23714,23715,23717,23718,215,23721,23724,23725,23727,23728,23731],{},"其中 ",[23640,23704,902],{}," 表示状态空间，为隐变量，",[23640,23707,446],{}," 为动作空间，",[23640,23710,927],{},[23640,23712,23713],{},"s ′ |s, a",") 为状态转移概率，",[23640,23716,877],{}," 为奖励函数，",[23640,23719,23720],{},"Ω",[23640,23722,23723],{},"o|s, a",") 为观测概率，",[23640,23726,803],{}," 为观测空间，",[23640,23729,23730],{},"γ"," 为折扣因子。",[14,23733,23735],{"id":23734},"_14动作空间","1.4.动作空间",[19,23737,23738,23739,23742],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[30,23740,23741],{},"动作空间"," ，动作空间分为:",[161,23744,23745,23748],{},[71,23746,23747],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[71,23749,23750],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23752,23754],{"id":23753},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23756,23757],{},"由策略、价值函数、模型三部分组成",[19,23759,23760],{},"这三者组成马尔可夫决策过程",[19,23762,23763],{},[23,23764],{"alt":125,"src":23765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[49,23767,23769],{"id":23768},"_151策略","1.5.1.策略",[19,23771,23772],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23774,23775],{},"策略可分为两种：",[19,23777,23778],{},[23,23779],{"alt":125,"src":23780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23782,23783],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[49,23785,23787],{"id":23786},"_152价值函数","1.5.2.价值函数",[19,23789,23790],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23792,23793],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23795,23796],{},[23,23797],{"alt":125,"src":23798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23800,23801],{},"进入某个状态采取的最优动作可以通过Q函数得到",[49,23803,23805],{"id":23804},"_153模型","1.5.3.模型",[19,23807,23808],{},[23,23809],{"alt":125,"src":23810},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23812,23814],{"id":23813},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[352,23816,23817,23828],{},[355,23818,23819],{},[358,23820,23821,23825],{},[361,23822,23824],{"align":23823},"left","类型",[361,23826,23827],{"align":23823},"特点",[398,23829,23830,23840,23850,23860,23872],{},[358,23831,23832,23837],{},[403,23833,23834],{"align":23823},[30,23835,23836],{},"基于价值的智能体",[403,23838,23839],{"align":23823},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[358,23841,23842,23847],{},[403,23843,23844],{"align":23823},[30,23845,23846],{},"基于策略的智能体",[403,23848,23849],{"align":23823},"直接学习策略，没有学习价值函数",[358,23851,23852,23857],{},[403,23853,23854],{"align":23823},[30,23855,23856],{},"演员-评论员智能体",[403,23858,23859],{"align":23823},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[358,23861,23862,23867],{},[403,23863,23864],{"align":23823},[30,23865,23866],{},"有模型强化学习智能体",[403,23868,23869],{"align":23823},[23,23870],{"alt":125,"src":23871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[358,23873,23874,23879],{},[403,23875,23876],{"align":23823},[30,23877,23878],{},"免模型强化学习智能体",[403,23880,23881],{"align":23823},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23883,23885],{"id":23884},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,23887,23888],{},"学习和规划是序列决策的两个基本问题",[19,23890,23891],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,23893,23894],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,23896,23897],{},"强化学习用到的库：Gym",[19,23899,23900],{},"Gym可以检验强化学习算法的优劣",[19,23902,23903,23906],{},[30,23904,23905],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[196,23908,23912],{"className":23909,"code":23910,"language":23911,"meta":125,"style":125},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[81,23913,23914],{"__ignoreMap":125},[204,23915,23916,23919,23922,23925],{"class":206,"line":207},[204,23917,23918],{"class":2049},"pip",[204,23920,23921],{"class":319}," install",[204,23923,23924],{"class":319}," gym==",[204,23926,23927],{"class":263},"0.25.2\n",[19,23929,23930],{},"显示图形界面需要",[196,23932,23934],{"className":23909,"code":23933,"language":23911,"meta":125,"style":125},"pip install pygame\n",[81,23935,23936],{"__ignoreMap":125},[204,23937,23938,23940,23942],{"class":206,"line":207},[204,23939,23918],{"class":2049},[204,23941,23921],{"class":319},[204,23943,23944],{"class":319}," pygame\n",[19,23946,23947,23948],{},"有关Gym库的相关文档介绍：",[62,23949,23952],{"href":23950,"rel":23951},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[66],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,23954,23956],{"id":23955},"_18一些补充基础概念","1.8.一些补充基础概念",[19,23958,23959],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,23961,23962],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,23964,23965],{},[23,23966],{"alt":125,"src":23967},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,23969,23970],{},"折扣率需要自己来设定",[19,23972,23973],{},[23,23974],{"alt":125,"src":23975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[161,23977,23978],{},[71,23979,23980],{},"状态转移函数：",[19,23982,23983],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,23985,23986],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,23988,23989],{},[23,23990],{"alt":125,"src":23991},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[161,23993,23994],{"start":126},[71,23995,23996],{},"动作价值函数：",[19,23998,23999],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24001,24002],{},[23,24003],{"alt":125,"src":24004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[161,24006,24007],{"start":131},[71,24008,24009],{},"最优动作价值函数：",[19,24011,24012],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24014,24015],{},[23,24016],{"alt":125,"src":24017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[161,24019,24020],{"start":1281},[71,24021,24022],{},"状态价值函数:",[19,24024,24025],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24027,24028],{},"它衡量的是“一个具体动作”的长期价值",[19,24030,24031],{},[23,24032],{"alt":125,"src":24033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24035,24036],{},"几个价值函数之间的比较：",[19,24038,24039],{},[23,24040],{"alt":125,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5213,24043,24044],{},"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":125,"searchDepth":126,"depth":126,"links":24046},[24047,24048,24049,24054,24055,24060,24061,24062],{"id":23480,"depth":126,"text":23481},{"id":23547,"depth":126,"text":23548},{"id":23584,"depth":126,"text":23585,"children":24050},[24051,24052,24053],{"id":23588,"depth":131,"text":23589},{"id":23603,"depth":131,"text":23604},{"id":23626,"depth":131,"text":23627},{"id":23734,"depth":126,"text":23735},{"id":23753,"depth":126,"text":23754,"children":24056},[24057,24058,24059],{"id":23768,"depth":131,"text":23769},{"id":23786,"depth":131,"text":23787},{"id":23804,"depth":131,"text":23805},{"id":23813,"depth":126,"text":23814},{"id":23884,"depth":126,"text":23885},{"id":23955,"depth":126,"text":23956},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23472,"description":125},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24069,"title":24070,"body":24071,"description":24078,"extension":133,"meta":24089,"navigation":135,"path":24090,"seo":24091,"stem":24092,"__hash__":24093},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24072,"toc":24087},[24073,24076,24079,24084],[10,24074,24070],{"id":24075},"_2马尔可夫决策过程",[19,24077,24078],{},"这是强化学习的基本框架",[19,24080,24081],{},[23,24082],{"alt":125,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24085,24086],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":125,"searchDepth":126,"depth":126,"links":24088},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24070,"description":24078},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24095,"title":24096,"body":24097,"description":125,"extension":133,"meta":24213,"navigation":135,"path":24214,"seo":24215,"stem":24216,"__hash__":24217},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24098,"toc":24208},[24099,24102,24106,24109,24114,24119,24122,24127,24130,24135,24138,24142,24147,24150,24155,24160,24165,24168,24172,24177,24180,24185,24190,24195,24200,24203],[10,24100,24096],{"id":24101},"_3动作价值函数",[14,24103,24105],{"id":24104},"_31dqn","3.1.DQN",[19,24107,24108],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24110,24111],{},[23,24112],{"alt":125,"src":24113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24115,24116],{},[23,24117],{"alt":125,"src":24118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24120,24121],{},"DQN算法的描述：",[19,24123,24124],{},[23,24125],{"alt":125,"src":24126},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24128,24129],{},"这里的Dense指的是全连接层",[19,24131,24132],{},[23,24133],{"alt":125,"src":24134},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24136,24137],{},"当前观测的状态为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算法",[14,24139,24141],{"id":24140},"_32dqn的举例","3.2.DQN的举例",[19,24143,24144],{},[23,24145],{"alt":125,"src":24146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24148,24149],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24151,24152],{},[23,24153],{"alt":125,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24156,24157],{},[23,24158],{"alt":125,"src":24159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24161,24162],{},[23,24163],{"alt":125,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24166,24167],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24169,24171],{"id":24170},"_33td算法","3.3.TD算法",[19,24173,24174],{},[23,24175],{"alt":125,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24178,24179],{},"强化学习TD算法公式的粗略解释：",[19,24181,24182],{},[23,24183],{"alt":125,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24186,24187],{},[23,24188],{"alt":125,"src":24189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24191,24192],{},[23,24193],{"alt":125,"src":24194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24196,24197],{},[23,24198],{"alt":125,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24201,24202],{},"TD算法总结：",[19,24204,24205],{},[23,24206],{"alt":125,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":125,"searchDepth":126,"depth":126,"links":24209},[24210,24211,24212],{"id":24104,"depth":126,"text":24105},{"id":24140,"depth":126,"text":24141},{"id":24170,"depth":126,"text":24171},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24096,"description":125},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24219,"title":24220,"body":24221,"description":125,"extension":133,"meta":24454,"navigation":135,"path":24455,"seo":24456,"stem":24457,"__hash__":24458},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24222,"toc":24450},[24223,24226,24230,24233,24236,24241,24246,24249,24254,24259,24262,24267,24270,24275,24278,24283,24286,24291,24294,24299,24304,24307,24312,24315,24318,24323,24326,24331,24336,24340,24343,24346,24351,24356,24359,24364,24369,24372,24377,24380,24383,24388,24391,24396,24399,24404,24409,24412,24417,24422,24425,24430,24433,24438,24441],[10,24224,24220],{"id":24225},"_4策略学习",[14,24227,24229],{"id":24228},"_41概念描述","4.1.概念描述",[19,24231,24232],{},"用神经网络（策略网络）近似策略函数",[19,24234,24235],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24237,24238],{},[23,24239],{"alt":125,"src":24240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24242,24243],{},[23,24244],{"alt":125,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24247,24248],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24250,24251],{},[23,24252],{"alt":125,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24255,24256],{},[23,24257],{"alt":125,"src":24258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24260,24261],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24263,24264],{},[23,24265],{"alt":125,"src":24266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24268,24269],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24271,24272],{},[23,24273],{"alt":125,"src":24274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24276,24277],{},"改进theta要用到策略梯度算法",[19,24279,24280],{},[23,24281],{"alt":125,"src":24282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24284,24285],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24287,24288],{},[23,24289],{"alt":125,"src":24290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24292,24293],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24295,24296],{},[23,24297],{"alt":125,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24300,24301],{},[23,24302],{"alt":125,"src":24303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24305,24306],{},"梯度公式总结：",[19,24308,24309],{},[23,24310],{"alt":125,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24313,24314],{},"两个公式的分别应用场景：",[19,24316,24317],{},"对于离散的动作：",[19,24319,24320],{},[23,24321],{"alt":125,"src":24322},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24324,24325],{},"对于连续的动作：",[19,24327,24328],{},[23,24329],{"alt":125,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24332,24333],{},[23,24334],{"alt":125,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24337,24339],{"id":24338},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24341,24342],{},"使用蒙特卡洛来近似计算策略梯度",[19,24344,24345],{},"蒙特卡洛法的解释如下：",[19,24347,24348],{},[23,24349],{"alt":125,"src":24350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24352,24353],{},[23,24354],{"alt":125,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24357,24358],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[161,24360,24361],{},[71,24362,24363],{},"方法一：reinforce算法",[19,24365,24366],{},[23,24367],{"alt":125,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24370,24371],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[161,24373,24374],{"start":126},[71,24375,24376],{},"方法二：actor-critic算法",[19,24378,24379],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24381,24382],{},"两个网络的构建：",[19,24384,24385],{},[23,24386],{"alt":125,"src":24387},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24389,24390],{},"actor网路：",[19,24392,24393],{},[23,24394],{"alt":125,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24397,24398],{},"critic网络",[19,24400,24401],{},[23,24402],{"alt":125,"src":24403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[161,24405,24406],{"start":131},[71,24407,24408],{},"网络的训练",[19,24410,24411],{},"网络描述",[19,24413,24414],{},[23,24415],{"alt":125,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24418,24419],{},[23,24420],{"alt":125,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24423,24424],{},"TD算法更新梯度：",[19,24426,24427],{},[23,24428],{"alt":125,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24431,24432],{},"策略网络更新梯度：",[19,24434,24435],{},[23,24436],{"alt":125,"src":24437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24439,24440],{},"训练整个流程的具体描述：",[19,24442,24443,24446,24447],{},[23,24444],{"alt":125,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[23,24448],{"alt":125,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":125,"searchDepth":126,"depth":126,"links":24451},[24452,24453],{"id":24228,"depth":126,"text":24229},{"id":24338,"depth":126,"text":24339},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24220,"description":125},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24460,"title":24461,"body":24462,"description":24469,"extension":133,"meta":24519,"navigation":135,"path":24520,"seo":24521,"stem":24522,"__hash__":24523},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24463,"toc":24515},[24464,24467,24470,24474,24477,24482,24486,24489,24494,24497,24502,24507,24510],[10,24465,24461],{"id":24466},"_5alphago算法",[19,24468,24469],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24471,24473],{"id":24472},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24475,24476],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24478,24479],{},[23,24480],{"alt":125,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24483,24485],{"id":24484},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24487,24488],{},"采用强化学习的方式训练策略网络",[19,24490,24491],{},[23,24492],{"alt":125,"src":24493},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24495,24496],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24498,24499],{},[23,24500],{"alt":125,"src":24501},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24503,24504],{},[23,24505],{"alt":125,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24508,24509],{},"强化学习训练策略网络的总结：",[19,24511,24512],{},[23,24513],{"alt":125,"src":24514},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":125,"searchDepth":126,"depth":126,"links":24516},[24517,24518],{"id":24472,"depth":126,"text":24473},{"id":24484,"depth":126,"text":24485},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24461,"description":24469},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24525,"title":24526,"body":24527,"description":24534,"extension":133,"meta":24537,"navigation":135,"path":24538,"seo":24539,"stem":24540,"__hash__":24541},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24528,"toc":24535},[24529,24532],[10,24530,24526],{"id":24531},"_6价值网络",[19,24533,24534],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":125,"searchDepth":126,"depth":126,"links":24536},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24526,"description":24534},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24543,"title":24544,"body":24545,"description":24549,"extension":133,"meta":24550,"navigation":135,"path":24551,"seo":24552,"stem":24553,"__hash__":24554},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24546,"toc":24547},[],{"title":125,"searchDepth":126,"depth":126,"links":24548},[],"记录自己的强化学习笔记。",{"category":23465},"\u002Fwiki\u002F2025-12-04",{"title":24544,"description":24549},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24556,"title":24557,"body":24558,"description":132,"extension":133,"meta":24597,"navigation":135,"path":24598,"seo":24599,"stem":24600,"__hash__":24601},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24559,"toc":24595},[24560,24563,24566,24572,24575,24581,24584,24589,24592],[10,24561,24557],{"id":24562},"_1-项目概览与官方资源",[19,24564,24565],{},"官方文档：",[19,24567,24568],{},[62,24569,24570],{"href":24570,"rel":24571},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[66],[19,24573,24574],{},"官方代码仓库：",[19,24576,24577],{},[62,24578,24579],{"href":24579,"rel":24580},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[66],[19,24582,24583],{},"复现大体流程：",[19,24585,24586],{},[23,24587],{"alt":125,"src":24588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24590,24591],{},"本教程的目标是打通这条链路：",[19,24593,24594],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":125,"searchDepth":126,"depth":126,"links":24596},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24557,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24603,"title":24604,"body":24605,"description":132,"extension":133,"meta":24721,"navigation":135,"path":24722,"seo":24723,"stem":24724,"__hash__":24725},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24606,"toc":24716},[24607,24610,24614,24617,24624,24628,24631,24640,24650,24654,24684,24687,24713],[10,24608,24604],{"id":24609},"_2-环境准备与设备连接",[14,24611,24613],{"id":24612},"_21-系统与环境","2.1 系统与环境",[19,24615,24616],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24618,24619,24620,24623],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[81,24621,24622],{},"lerobot"," 依赖。",[14,24625,24627],{"id":24626},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24629,24630],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[196,24632,24634],{"className":23909,"code":24633,"language":23911,"meta":125,"style":125},"lerobot-find-out\n",[81,24635,24636],{"__ignoreMap":125},[204,24637,24638],{"class":206,"line":207},[204,24639,24633],{"class":2049},[19,24641,24642,24643,426,24646,24649],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[81,24644,24645],{},"\u002Fdev\u002FttyACM0",[81,24647,24648],{},"\u002Fdev\u002FttyACM1","）。",[14,24651,24653],{"id":24652},"_23-串口授权","2.3 串口授权",[196,24655,24657],{"className":23909,"code":24656,"language":23911,"meta":125,"style":125},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[81,24658,24659,24673],{"__ignoreMap":125},[204,24660,24661,24664,24667,24670],{"class":206,"line":207},[204,24662,24663],{"class":2049},"sudo",[204,24665,24666],{"class":319}," chmod",[204,24668,24669],{"class":263}," 666",[204,24671,24672],{"class":319}," \u002Fdev\u002FttyACM0\n",[204,24674,24675,24677,24679,24681],{"class":206,"line":126},[204,24676,24663],{"class":2049},[204,24678,24666],{"class":319},[204,24680,24669],{"class":263},[204,24682,24683],{"class":319}," \u002Fdev\u002FttyACM1\n",[19,24685,24686],{},"说明：",[68,24688,24689,24694,24700,24710],{},[71,24690,24691,24693],{},[81,24692,24663],{},"：以 root 权限执行命令。",[71,24695,24696,24699],{},[81,24697,24698],{},"chmod","：修改设备节点权限。",[71,24701,24702,24705,24706,24709],{},[81,24703,24704],{},"666","：",[81,24707,24708],{},"rw-rw-rw-","，所有用户可读写。",[71,24711,24712],{},"串口号必须替换为你机器上的真实端口。",[5213,24714,24715],{},"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":125,"searchDepth":126,"depth":126,"links":24717},[24718,24719,24720],{"id":24612,"depth":126,"text":24613},{"id":24626,"depth":126,"text":24627},{"id":24652,"depth":126,"text":24653},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24604,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24727,"title":24728,"body":24729,"description":132,"extension":133,"meta":24890,"navigation":135,"path":24891,"seo":24892,"stem":24893,"__hash__":24894},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24730,"toc":24886},[24731,24735,24739,24745,24748,24805,24808,24812,24815,24883],[10,24732,24734],{"id":24733},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24736,24738],{"id":24737},"_31-配置电机-id","3.1 配置电机 ID",[19,24740,24741,24742,24744],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[81,24743,431],{},"，需要改成机械臂链路里不冲突的编号。",[19,24746,24747],{},"方式一：用 LeRobot 命令逐步写入。",[196,24749,24751],{"className":23909,"code":24750,"language":23911,"meta":125,"style":125},"# 主臂舵机配置 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",[81,24752,24753,24758,24766,24773,24778,24782,24787,24793,24800],{"__ignoreMap":125},[204,24754,24755],{"class":206,"line":207},[204,24756,24757],{"class":273},"# 主臂舵机配置 ID\n",[204,24759,24760,24763],{"class":206,"line":126},[204,24761,24762],{"class":2049},"lerobot-setup-motors",[204,24764,24765],{"class":263}," \\\n",[204,24767,24768,24771],{"class":206,"line":131},[204,24769,24770],{"class":263},"  --teleop.type=so101_leader",[204,24772,24765],{"class":263},[204,24774,24775],{"class":206,"line":1281},[204,24776,24777],{"class":263},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[204,24779,24780],{"class":206,"line":1287},[204,24781,2486],{"emptyLinePlaceholder":135},[204,24783,24784],{"class":206,"line":1301},[204,24785,24786],{"class":273},"# 从臂舵机配置 ID\n",[204,24788,24789,24791],{"class":206,"line":1307},[204,24790,24762],{"class":2049},[204,24792,24765],{"class":263},[204,24794,24795,24798],{"class":206,"line":1398},[204,24796,24797],{"class":263},"  --robot.type=so101_follower",[204,24799,24765],{"class":263},[204,24801,24802],{"class":206,"line":1404},[204,24803,24804],{"class":263},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24806,24807],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24809,24811],{"id":24810},"_32-机械臂校准","3.2 机械臂校准",[19,24813,24814],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[196,24816,24818],{"className":23909,"code":24817,"language":23911,"meta":125,"style":125},"# 主臂校准\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",[81,24819,24820,24825,24832,24838,24845,24850,24854,24859,24865,24871,24878],{"__ignoreMap":125},[204,24821,24822],{"class":206,"line":207},[204,24823,24824],{"class":273},"# 主臂校准\n",[204,24826,24827,24830],{"class":206,"line":126},[204,24828,24829],{"class":2049},"lerobot-calibrate",[204,24831,24765],{"class":263},[204,24833,24834,24836],{"class":206,"line":131},[204,24835,24770],{"class":263},[204,24837,24765],{"class":263},[204,24839,24840,24843],{"class":206,"line":1281},[204,24841,24842],{"class":263},"  --teleop.port=\u002Fdev\u002FttyACM0",[204,24844,24765],{"class":263},[204,24846,24847],{"class":206,"line":1287},[204,24848,24849],{"class":263},"  --teleop.id=my_awesome_leader_arm\n",[204,24851,24852],{"class":206,"line":1301},[204,24853,2486],{"emptyLinePlaceholder":135},[204,24855,24856],{"class":206,"line":1307},[204,24857,24858],{"class":273},"# 从臂校准\n",[204,24860,24861,24863],{"class":206,"line":1398},[204,24862,24829],{"class":2049},[204,24864,24765],{"class":263},[204,24866,24867,24869],{"class":206,"line":1404},[204,24868,24797],{"class":263},[204,24870,24765],{"class":263},[204,24872,24873,24876],{"class":206,"line":1416},[204,24874,24875],{"class":263},"  --robot.port=\u002Fdev\u002FttyACM1",[204,24877,24765],{"class":263},[204,24879,24880],{"class":206,"line":1698},[204,24881,24882],{"class":263},"  --robot.id=my_awesome_follower_arm\n",[5213,24884,24885],{},"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":125,"searchDepth":126,"depth":126,"links":24887},[24888,24889],{"id":24737,"depth":126,"text":24738},{"id":24810,"depth":126,"text":24811},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24728,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24896,"title":24897,"body":24898,"description":132,"extension":133,"meta":25089,"navigation":135,"path":25090,"seo":25091,"stem":25092,"__hash__":25093},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24899,"toc":25085},[24900,24903,24907,24954,24958,24971,25034,25037,25082],[10,24901,24897],{"id":24902},"_4-遥操与相机接入",[14,24904,24906],{"id":24905},"_41-不带相机遥操","4.1 不带相机遥操",[196,24908,24910],{"className":23909,"code":24909,"language":23911,"meta":125,"style":125},"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",[81,24911,24912,24919,24925,24931,24938,24944,24950],{"__ignoreMap":125},[204,24913,24914,24917],{"class":206,"line":207},[204,24915,24916],{"class":2049},"lerobot-teleoperate",[204,24918,24765],{"class":263},[204,24920,24921,24923],{"class":206,"line":126},[204,24922,24797],{"class":263},[204,24924,24765],{"class":263},[204,24926,24927,24929],{"class":206,"line":131},[204,24928,24875],{"class":263},[204,24930,24765],{"class":263},[204,24932,24933,24936],{"class":206,"line":1281},[204,24934,24935],{"class":263},"  --robot.id=my_awesome_follower_arm",[204,24937,24765],{"class":263},[204,24939,24940,24942],{"class":206,"line":1287},[204,24941,24770],{"class":263},[204,24943,24765],{"class":263},[204,24945,24946,24948],{"class":206,"line":1301},[204,24947,24842],{"class":263},[204,24949,24765],{"class":263},[204,24951,24952],{"class":206,"line":1307},[204,24953,24849],{"class":263},[14,24955,24957],{"id":24956},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[196,24959,24961],{"className":23909,"code":24960,"language":23911,"meta":125,"style":125},"lerobot-find-cameras opencv\n",[81,24962,24963],{"__ignoreMap":125},[204,24964,24965,24968],{"class":206,"line":207},[204,24966,24967],{"class":2049},"lerobot-find-cameras",[204,24969,24970],{"class":319}," opencv\n",[196,24972,24974],{"className":23909,"code":24973,"language":23911,"meta":125,"style":125},"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",[81,24975,24976,24982,24988,24994,25000,25010,25016,25022,25029],{"__ignoreMap":125},[204,24977,24978,24980],{"class":206,"line":207},[204,24979,24916],{"class":2049},[204,24981,24765],{"class":263},[204,24983,24984,24986],{"class":206,"line":126},[204,24985,24797],{"class":263},[204,24987,24765],{"class":263},[204,24989,24990,24992],{"class":206,"line":131},[204,24991,24875],{"class":263},[204,24993,24765],{"class":263},[204,24995,24996,24998],{"class":206,"line":1281},[204,24997,24935],{"class":263},[204,24999,24765],{"class":263},[204,25001,25002,25005,25008],{"class":206,"line":1287},[204,25003,25004],{"class":263},"  --robot.cameras=",[204,25006,25007],{"class":319},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[204,25009,24765],{"class":263},[204,25011,25012,25014],{"class":206,"line":1301},[204,25013,24770],{"class":263},[204,25015,24765],{"class":263},[204,25017,25018,25020],{"class":206,"line":1307},[204,25019,24842],{"class":263},[204,25021,24765],{"class":263},[204,25023,25024,25027],{"class":206,"line":1398},[204,25025,25026],{"class":263},"  --teleop.id=my_awesome_leader_arm",[204,25028,24765],{"class":263},[204,25030,25031],{"class":206,"line":1404},[204,25032,25033],{"class":263},"  --display_data=true\n",[19,25035,25036],{},"相机参数说明：",[68,25038,25039,25045,25051,25060,25070,25076],{},[71,25040,25041,25044],{},[81,25042,25043],{},"front","：相机名称。",[71,25046,25047,25050],{},[81,25048,25049],{},"type: opencv","：相机驱动类型。",[71,25052,25053,25056,25057,24649],{},[81,25054,25055],{},"index_or_path","：设备编号或设备路径（如 ",[81,25058,25059],{},"\u002Fdev\u002Fvideo4",[71,25061,25062,25065,25066,25069],{},[81,25063,25064],{},"width"," \u002F ",[81,25067,25068],{},"height","：图像分辨率。",[71,25071,25072,25075],{},[81,25073,25074],{},"fps","：采样帧率。",[71,25077,25078,25081],{},[81,25079,25080],{},"--display_data=true","：启用实时可视化。",[5213,25083,25084],{},"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":125,"searchDepth":126,"depth":126,"links":25086},[25087,25088],{"id":24905,"depth":126,"text":24906},{"id":24956,"depth":126,"text":24957},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24897,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25095,"title":25096,"body":25097,"description":132,"extension":133,"meta":25269,"navigation":135,"path":25270,"seo":25271,"stem":25272,"__hash__":25273},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25098,"toc":25264},[25099,25103,25107,25112,25117,25120,25162,25168,25172,25221,25226,25230,25233,25241,25246,25251,25256,25261],[10,25100,25102],{"id":25101},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25104,25106],{"id":25105},"_51-生成访问令牌","5.1 生成访问令牌",[19,25108,25109],{},[23,25110],{"alt":125,"src":25111},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25113,25114],{},[23,25115],{"alt":125,"src":25116},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25118,25119],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[196,25121,25123],{"className":23909,"code":25122,"language":23911,"meta":125,"style":125},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[81,25124,25125,25138],{"__ignoreMap":125},[204,25126,25127,25130,25133,25135],{"class":206,"line":207},[204,25128,25129],{"class":210},"export",[204,25131,25132],{"class":214}," HF_TOKEN",[204,25134,260],{"class":210},[204,25136,25137],{"class":319},"\"your_huggingface_token\"\n",[204,25139,25140,25143,25146,25149,25152,25154,25157,25159],{"class":206,"line":126},[204,25141,25142],{"class":2049},"hf",[204,25144,25145],{"class":319}," auth",[204,25147,25148],{"class":319}," login",[204,25150,25151],{"class":263}," --token",[204,25153,9811],{"class":319},[204,25155,25156],{"class":214},"$HF_TOKEN",[204,25158,464],{"class":319},[204,25160,25161],{"class":263}," --add-to-git-credential\n",[19,25163,25164,25167],{},[81,25165,25166],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25169,25171],{"id":25170},"_52-验证登录","5.2 验证登录",[196,25173,25175],{"className":23909,"code":25174,"language":23911,"meta":125,"style":125},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[81,25176,25177,25208],{"__ignoreMap":125},[204,25178,25179,25182,25184,25187,25189,25191,25194,25197,25200,25203,25206],{"class":206,"line":207},[204,25180,25181],{"class":214},"HF_USER",[204,25183,260],{"class":210},[204,25185,25186],{"class":214},"$(",[204,25188,25142],{"class":2049},[204,25190,25145],{"class":319},[204,25192,25193],{"class":319}," whoami",[204,25195,25196],{"class":210}," |",[204,25198,25199],{"class":2049}," head",[204,25201,25202],{"class":263}," -n",[204,25204,25205],{"class":263}," 1",[204,25207,221],{"class":214},[204,25209,25210,25213,25215,25218],{"class":206,"line":126},[204,25211,25212],{"class":263},"echo",[204,25214,9811],{"class":319},[204,25216,25217],{"class":214},"$HF_USER",[204,25219,25220],{"class":319},"\"\n",[19,25222,25223],{},[23,25224],{"alt":125,"src":25225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25227,25229],{"id":25228},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25231,25232],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[68,25234,25235,25238],{},[71,25236,25237],{},"Dataset Repo（用于上传演示数据）",[71,25239,25240],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25242,25243],{},[23,25244],{"alt":125,"src":25245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25247,25248],{},[23,25249],{"alt":125,"src":25250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25252,25253],{},[23,25254],{"alt":125,"src":25255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25257,25258],{},[23,25259],{"alt":125,"src":25260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5213,25262,25263],{},"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":125,"searchDepth":126,"depth":126,"links":25265},[25266,25267,25268],{"id":25105,"depth":126,"text":25106},{"id":25170,"depth":126,"text":25171},{"id":25228,"depth":126,"text":25229},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25096,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25275,"title":25276,"body":25277,"description":132,"extension":133,"meta":25474,"navigation":135,"path":25475,"seo":25476,"stem":25477,"__hash__":25478},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25278,"toc":25469},[25279,25283,25287,25383,25391,25396,25400,25416,25419,25423,25466],[10,25280,25282],{"id":25281},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25284,25286],{"id":25285},"_61-录制示教数据","6.1 录制示教数据",[196,25288,25290],{"className":23909,"code":25289,"language":23911,"meta":125,"style":125},"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",[81,25291,25292,25299,25305,25311,25317,25326,25332,25338,25344,25351,25361,25368,25378],{"__ignoreMap":125},[204,25293,25294,25297],{"class":206,"line":207},[204,25295,25296],{"class":2049},"lerobot-record",[204,25298,24765],{"class":263},[204,25300,25301,25303],{"class":206,"line":126},[204,25302,24797],{"class":263},[204,25304,24765],{"class":263},[204,25306,25307,25309],{"class":206,"line":131},[204,25308,24875],{"class":263},[204,25310,24765],{"class":263},[204,25312,25313,25315],{"class":206,"line":1281},[204,25314,24935],{"class":263},[204,25316,24765],{"class":263},[204,25318,25319,25321,25324],{"class":206,"line":1287},[204,25320,25004],{"class":263},[204,25322,25323],{"class":319},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[204,25325,24765],{"class":263},[204,25327,25328,25330],{"class":206,"line":1301},[204,25329,24770],{"class":263},[204,25331,24765],{"class":263},[204,25333,25334,25336],{"class":206,"line":1307},[204,25335,24842],{"class":263},[204,25337,24765],{"class":263},[204,25339,25340,25342],{"class":206,"line":1398},[204,25341,25026],{"class":263},[204,25343,24765],{"class":263},[204,25345,25346,25349],{"class":206,"line":1404},[204,25347,25348],{"class":263},"  --display_data=true",[204,25350,24765],{"class":263},[204,25352,25353,25356,25359],{"class":206,"line":1416},[204,25354,25355],{"class":263},"  --dataset.repo_id=",[204,25357,25358],{"class":319},"\"Embodied-AI-6\u002Fso101_test\"",[204,25360,24765],{"class":263},[204,25362,25363,25366],{"class":206,"line":1698},[204,25364,25365],{"class":263},"  --dataset.num_episodes=10",[204,25367,24765],{"class":263},[204,25369,25370,25373,25376],{"class":206,"line":1703},[204,25371,25372],{"class":263},"  --dataset.single_task=",[204,25374,25375],{"class":319},"\"Grab the green cube\"",[204,25377,24765],{"class":263},[204,25379,25380],{"class":206,"line":1709},[204,25381,25382],{"class":263},"  --resume=true\n",[68,25384,25385],{},[71,25386,25387,25390],{},[81,25388,25389],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25392,25393],{},[23,25394],{"alt":125,"src":25395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25397,25399],{"id":25398},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[196,25401,25403],{"className":23909,"code":25402,"language":23911,"meta":125,"style":125},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[81,25404,25405],{"__ignoreMap":125},[204,25406,25407,25410,25413],{"class":206,"line":207},[204,25408,25409],{"class":2049},"rm",[204,25411,25412],{"class":263}," -rf",[204,25414,25415],{"class":319}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25417,25418],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25420,25422],{"id":25421},"_63-回放指定-episode","6.3 回放指定 episode",[196,25424,25426],{"className":23909,"code":25425,"language":23911,"meta":125,"style":125},"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",[81,25427,25428,25435,25441,25447,25453,25461],{"__ignoreMap":125},[204,25429,25430,25433],{"class":206,"line":207},[204,25431,25432],{"class":2049},"lerobot-replay",[204,25434,24765],{"class":263},[204,25436,25437,25439],{"class":206,"line":126},[204,25438,24797],{"class":263},[204,25440,24765],{"class":263},[204,25442,25443,25445],{"class":206,"line":131},[204,25444,24875],{"class":263},[204,25446,24765],{"class":263},[204,25448,25449,25451],{"class":206,"line":1281},[204,25450,24935],{"class":263},[204,25452,24765],{"class":263},[204,25454,25455,25457,25459],{"class":206,"line":1287},[204,25456,25355],{"class":263},[204,25458,25358],{"class":319},[204,25460,24765],{"class":263},[204,25462,25463],{"class":206,"line":1301},[204,25464,25465],{"class":263},"  --dataset.episode=0\n",[5213,25467,25468],{},"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":125,"searchDepth":126,"depth":126,"links":25470},[25471,25472,25473],{"id":25285,"depth":126,"text":25286},{"id":25398,"depth":126,"text":25399},{"id":25421,"depth":126,"text":25422},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25276,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25480,"title":25481,"body":25482,"description":132,"extension":133,"meta":25610,"navigation":135,"path":25611,"seo":25612,"stem":25613,"__hash__":25614},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25483,"toc":25608},[25484,25488,25551,25554,25601,25606],[10,25485,25487],{"id":25486},"_7-act-模型训练","7. ACT 模型训练",[196,25489,25491],{"className":23909,"code":25490,"language":23911,"meta":125,"style":125},"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",[81,25492,25493,25500,25508,25515,25522,25529,25536,25543],{"__ignoreMap":125},[204,25494,25495,25498],{"class":206,"line":207},[204,25496,25497],{"class":2049},"lerobot-train",[204,25499,24765],{"class":263},[204,25501,25502,25504,25506],{"class":206,"line":126},[204,25503,25355],{"class":263},[204,25505,25358],{"class":319},[204,25507,24765],{"class":263},[204,25509,25510,25513],{"class":206,"line":131},[204,25511,25512],{"class":263},"  --policy.type=act",[204,25514,24765],{"class":263},[204,25516,25517,25520],{"class":206,"line":1281},[204,25518,25519],{"class":263},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[204,25521,24765],{"class":263},[204,25523,25524,25527],{"class":206,"line":1287},[204,25525,25526],{"class":263},"  --job_name=act_so101_test",[204,25528,24765],{"class":263},[204,25530,25531,25534],{"class":206,"line":1301},[204,25532,25533],{"class":263},"  --policy.device=cuda",[204,25535,24765],{"class":263},[204,25537,25538,25541],{"class":206,"line":1307},[204,25539,25540],{"class":263},"  --wandb.enable=false",[204,25542,24765],{"class":263},[204,25544,25545,25548],{"class":206,"line":1398},[204,25546,25547],{"class":263},"  --policy.repo_id=",[204,25549,25550],{"class":319},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25552,25553],{},"参数说明：",[68,25555,25556,25562,25568,25574,25580,25589,25595],{},[71,25557,25558,25561],{},[81,25559,25560],{},"--dataset.repo_id","：训练数据集仓库。",[71,25563,25564,25567],{},[81,25565,25566],{},"--policy.type=act","：策略模型类型为 ACT。",[71,25569,25570,25573],{},[81,25571,25572],{},"--output_dir","：本地训练输出目录。",[71,25575,25576,25579],{},[81,25577,25578],{},"--job_name","：训练任务名称。",[71,25581,25582,25585,25586,24649],{},[81,25583,25584],{},"--policy.device","：训练设备（如 ",[81,25587,25588],{},"cuda",[71,25590,25591,25594],{},[81,25592,25593],{},"--wandb.enable","：是否启用 WandB 可视化。",[71,25596,25597,25600],{},[81,25598,25599],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25602,25603],{},[23,25604],{"alt":125,"src":25605},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5213,25607,25468],{},{"title":125,"searchDepth":126,"depth":126,"links":25609},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25481,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25616,"title":25617,"body":25618,"description":132,"extension":133,"meta":25705,"navigation":135,"path":25706,"seo":25707,"stem":25708,"__hash__":25709},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25619,"toc":25703},[25620,25623,25626,25693,25701],[10,25621,25617],{"id":25622},"_8-策略部署与自动采集",[19,25624,25625],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[196,25627,25629],{"className":23909,"code":25628,"language":23911,"meta":125,"style":125},"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",[81,25630,25631,25637,25643,25649,25657,25663,25670,25678,25686],{"__ignoreMap":125},[204,25632,25633,25635],{"class":206,"line":207},[204,25634,25296],{"class":2049},[204,25636,24765],{"class":263},[204,25638,25639,25641],{"class":206,"line":126},[204,25640,24797],{"class":263},[204,25642,24765],{"class":263},[204,25644,25645,25647],{"class":206,"line":131},[204,25646,24875],{"class":263},[204,25648,24765],{"class":263},[204,25650,25651,25653,25655],{"class":206,"line":1281},[204,25652,25004],{"class":263},[204,25654,25323],{"class":319},[204,25656,24765],{"class":263},[204,25658,25659,25661],{"class":206,"line":1287},[204,25660,24935],{"class":263},[204,25662,24765],{"class":263},[204,25664,25665,25668],{"class":206,"line":1301},[204,25666,25667],{"class":263},"  --display_data=false",[204,25669,24765],{"class":263},[204,25671,25672,25674,25676],{"class":206,"line":1307},[204,25673,25355],{"class":263},[204,25675,25358],{"class":319},[204,25677,24765],{"class":263},[204,25679,25680,25682,25684],{"class":206,"line":1398},[204,25681,25372],{"class":263},[204,25683,25375],{"class":319},[204,25685,24765],{"class":263},[204,25687,25688,25691],{"class":206,"line":1404},[204,25689,25690],{"class":263},"  --policy.path=",[204,25692,25550],{"class":319},[68,25694,25695],{},[71,25696,25697,25700],{},[81,25698,25699],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5213,25702,25468],{},{"title":125,"searchDepth":126,"depth":126,"links":25704},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25617,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25711,"title":25712,"body":25713,"description":132,"extension":133,"meta":25742,"navigation":135,"path":25743,"seo":25744,"stem":25745,"__hash__":25746},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25714,"toc":25740},[25715,25719,25722,25728,25731,25737],[10,25716,25718],{"id":25717},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25720,25721],{},"项目地址：",[19,25723,25724],{},[62,25725,25726],{"href":25726,"rel":25727},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[66],[19,25729,25730],{},"参考教程：",[19,25732,25733],{},[62,25734,25735],{"href":25735,"rel":25736},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[66],[19,25738,25739],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":125,"searchDepth":126,"depth":126,"links":25741},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25712,"description":132},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25748,"title":25749,"body":25750,"description":25754,"extension":133,"meta":25755,"navigation":135,"path":25756,"seo":25757,"stem":25758,"__hash__":25759},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25751,"toc":25752},[],{"title":125,"searchDepth":126,"depth":126,"links":25753},[],"act复现",{"category":23465},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25749,"description":25754},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25761,"title":25762,"body":25763,"description":125,"extension":133,"meta":26064,"navigation":135,"path":26065,"seo":26066,"stem":26067,"__hash__":26068},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25764,"toc":26056},[25765,25768,25772,25782,25789,25796,25799,25806,25809,25812,25816,25827,25831,25877,25880,25883,25886,25889,25892,25896,25934,25940,25944,25998,26003,26006,26009,26014,26017,26022,26025,26028,26032,26035,26038,26042],[10,25766,25762],{"id":25767},"_1简介",[49,25769,25771],{"id":25770},"_11什么是-docker","1.1什么是 Docker？",[19,25773,25774,25775,25778,25779],{},"Docker 是一个开源的 ",[30,25776,25777],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[30,25780,25781],{},"一次构建，到处运行。",[19,25783,25784,25785,25788],{},"“ ",[30,25786,25787],{},"一次构建，到处运行"," ”也就是说：",[161,25790,25791],{},[71,25792,25793],{},[30,25794,25795],{},"之前：",[19,25797,25798],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[161,25800,25801],{},[71,25802,25803],{},[30,25804,25805],{},"使用docker后：",[19,25807,25808],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25810,25811],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[49,25813,25815],{"id":25814},"_12它是怎么工作的","1.2.它是怎么工作的？",[68,25817,25818,25821],{},[71,25819,25820],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[71,25822,25823,25824,47],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[30,25825,25826],{},"无论在哪运行都一样稳定",[49,25828,25830],{"id":25829},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[352,25832,25833,25843],{},[355,25834,25835],{},[358,25836,25837,25840],{},[361,25838,25839],{"align":23823},"概念",[361,25841,25842],{"align":23823},"解释",[398,25844,25845,25853,25861,25869],{},[358,25846,25847,25850],{},[403,25848,25849],{"align":23823},"镜像",[403,25851,25852],{"align":23823},"Image，运行容器的模板，像是一个应用快照",[358,25854,25855,25858],{},[403,25856,25857],{"align":23823},"容器",[403,25859,25860],{"align":23823},"Container，运行中的镜像实例，有自己的文件系统、网络等",[358,25862,25863,25866],{},[403,25864,25865],{"align":23823},"Dockerfile",[403,25867,25868],{"align":23823},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[358,25870,25871,25874],{},[403,25872,25873],{"align":23823},"仓库",[403,25875,25876],{"align":23823},"Registry，存放镜像的地方，比如 Docker Hub",[19,25878,25879],{},"抽象化理解:",[19,25881,25882],{},"Docker镜像≈C++类",[19,25884,25885],{},"Docker容器≈C++类实例(即对象)",[19,25887,25888],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25890,25891],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[49,25893,25895],{"id":25894},"_14类比理解","1.4.类比理解",[352,25897,25898,25908],{},[355,25899,25900],{},[358,25901,25902,25905],{},[361,25903,25904],{"align":23823},"传统部署",[361,25906,25907],{"align":23823},"Docker部署",[398,25909,25910,25918,25926],{},[358,25911,25912,25915],{},[403,25913,25914],{"align":23823},"手动安装依赖、调试版本不一致问题",[403,25916,25917],{"align":23823},"一次打包环境和代码",[358,25919,25920,25923],{},[403,25921,25922],{"align":23823},"程序“裸奔”跑在系统上",[403,25924,25925],{"align":23823},"程序“穿着容器”隔离运行",[358,25927,25928,25931],{},[403,25929,25930],{"align":23823},"容易“在我电脑上能跑”",[403,25932,25933],{"align":23823},"保证“无论在哪都能跑”",[19,25935,25936,25937],{},"就像快递包裹： ",[30,25938,25939],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[49,25941,25943],{"id":25942},"_15docker-的核心优势","1.5.Docker 的核心优势",[352,25945,25946,25956],{},[355,25947,25948],{},[358,25949,25950,25953],{},[361,25951,25952],{"align":23823},"优势",[361,25954,25955],{"align":23823},"说明",[398,25957,25958,25966,25974,25982,25990],{},[358,25959,25960,25963],{},[403,25961,25962],{"align":23823},"轻量级",[403,25964,25965],{"align":23823},"基于系统内核共享，启动速度快，占资源少",[358,25967,25968,25971],{},[403,25969,25970],{"align":23823},"跨平台",[403,25972,25973],{"align":23823},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[358,25975,25976,25979],{},[403,25977,25978],{"align":23823},"易于迁移部署",[403,25980,25981],{"align":23823},"应用和环境一起封装，不怕依赖不一致",[358,25983,25984,25987],{},[403,25985,25986],{"align":23823},"易于版本控制",[403,25988,25989],{"align":23823},"镜像版本可控，支持回滚",[358,25991,25992,25995],{},[403,25993,25994],{"align":23823},"生态丰富",[403,25996,25997],{"align":23823},"Docker Hub 上有成千上万的现成镜像可用",[161,25999,26000],{},[71,26001,26002],{},"在Linux上可以几乎实现无性能损失。",[19,26004,26005],{},"docker里的发行版和本机共用Linux内核。",[19,26007,26008],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[161,26010,26011],{},[71,26012,26013],{},"可以快速部署在绝大多数Linux发行版",[19,26015,26016],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[161,26018,26019],{},[71,26020,26021],{},"配置环境简单",[19,26023,26024],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26026,26027],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[161,26029,26030],{},[71,26031,25994],{},[19,26033,26034],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26036,26037],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[49,26039,26041],{"id":26040},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[68,26043,26044,26047,26050,26053],{},[71,26045,26046],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[71,26048,26049],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[71,26051,26052],{},"微服务架构：每个服务一个容器，灵活组合",[71,26054,26055],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":125,"searchDepth":126,"depth":126,"links":26057},[26058,26059,26060,26061,26062,26063],{"id":25770,"depth":131,"text":25771},{"id":25814,"depth":131,"text":25815},{"id":25829,"depth":131,"text":25830},{"id":25894,"depth":131,"text":25895},{"id":25942,"depth":131,"text":25943},{"id":26040,"depth":131,"text":26041},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25762,"description":125},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26070,"title":26071,"body":26072,"description":125,"extension":133,"meta":26805,"navigation":135,"path":26806,"seo":26807,"stem":26808,"__hash__":26809},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26073,"toc":26800},[26074,26077,26081,26084,26087,26093,26099,26103,26112,26115,26172,26175,26226,26229,26312,26315,26352,26356,26367,26380,26387,26390,26470,26473,26523,26526,26549,26553,26560,26563,26579,26585,26588,26604,26610,26613,26629,26643,26649,26669,26675,26678,26690,26696,26699,26713,26719,26722,26742,26747,26750,26753,26757,26760,26763,26766,26773,26776,26779,26782,26787,26792,26797],[10,26075,26071],{"id":26076},"_2安装docker",[49,26078,26080],{"id":26079},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26082,26083],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26085,26086],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26088,26089],{},[62,26090,26091],{"href":26091,"rel":26092},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[66],[19,26094,26095],{},[62,26096,26097],{"href":26097,"rel":26098},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[66],[22085,26100,26102],{"id":26101},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26104,26105,26106,26111],{},"以下内容根据 ",[62,26107,26110],{"href":26108,"rel":26109},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[66],"官方文档"," 修改而来。",[19,26113,26114],{},"如果你过去安装过 docker，先删掉：",[196,26116,26118],{"className":23909,"code":26117,"language":23911,"meta":125,"style":125},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[81,26119,26120],{"__ignoreMap":125},[204,26121,26122,26124,26127,26130,26133,26136,26139,26142,26145,26148,26151,26154,26157,26160,26163,26166,26169],{"class":206,"line":207},[204,26123,3111],{"class":210},[204,26125,26126],{"class":214}," pkg ",[204,26128,26129],{"class":210},"in",[204,26131,26132],{"class":319}," docker.io",[204,26134,26135],{"class":319}," docker-doc",[204,26137,26138],{"class":319}," docker-compose",[204,26140,26141],{"class":319}," docker-compose-v2",[204,26143,26144],{"class":319}," podman-docker",[204,26146,26147],{"class":319}," containerd",[204,26149,26150],{"class":319}," runc",[204,26152,26153],{"class":214},"; ",[204,26155,26156],{"class":210},"do",[204,26158,26159],{"class":2049}," sudo",[204,26161,26162],{"class":319}," apt-get",[204,26164,26165],{"class":319}," remove",[204,26167,26168],{"class":214}," $pkg; ",[204,26170,26171],{"class":210},"done\n",[19,26173,26174],{},"首先安装依赖和GPG：",[196,26176,26180],{"className":26177,"code":26178,"language":26179,"meta":125,"style":125},"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",[81,26181,26182,26187,26192,26197,26202,26207,26212,26216,26221],{"__ignoreMap":125},[204,26183,26184],{"class":206,"line":207},[204,26185,26186],{},"# Add Docker's official GPG key:\n",[204,26188,26189],{"class":206,"line":126},[204,26190,26191],{},"sudo apt-get update\n",[204,26193,26194],{"class":206,"line":131},[204,26195,26196],{},"sudo apt-get install ca-certificates curl\n",[204,26198,26199],{"class":206,"line":1281},[204,26200,26201],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[204,26203,26204],{"class":206,"line":1287},[204,26205,26206],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[204,26208,26209],{"class":206,"line":1301},[204,26210,26211],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[204,26213,26214],{"class":206,"line":1307},[204,26215,2486],{"emptyLinePlaceholder":135},[204,26217,26218],{"class":206,"line":1398},[204,26219,26220],{},"# 如果上面这行报错就弄下面这行\n",[204,26222,26223],{"class":206,"line":1404},[204,26224,26225],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26227,26228],{},"信任 Docker 的 GPG 公钥并添加仓库：",[196,26230,26232],{"className":23909,"code":26231,"language":23911,"meta":125,"style":125},"# 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",[81,26233,26234,26239,26245,26262,26295],{"__ignoreMap":125},[204,26235,26236],{"class":206,"line":207},[204,26237,26238],{"class":273},"# Add the repository to Apt sources:\n",[204,26240,26241,26243],{"class":206,"line":126},[204,26242,25212],{"class":263},[204,26244,24765],{"class":263},[204,26246,26247,26250,26253,26256,26259],{"class":206,"line":131},[204,26248,26249],{"class":319},"  \"deb [arch=$(",[204,26251,26252],{"class":2049},"dpkg",[204,26254,26255],{"class":263}," --print-architecture",[204,26257,26258],{"class":319},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[204,26260,26261],{"class":263},"\\\n",[204,26263,26264,26267,26269,26271,26274,26277,26279,26281,26284,26286,26288,26291,26293],{"class":206,"line":1281},[204,26265,26266],{"class":319},"  \"",[204,26268,25186],{"class":214},[204,26270,771],{"class":263},[204,26272,26273],{"class":319}," \u002Fetc\u002Fos-release",[204,26275,26276],{"class":214}," && ",[204,26278,25212],{"class":263},[204,26280,9811],{"class":319},[204,26282,26283],{"class":214},"$VERSION_CODENAME",[204,26285,464],{"class":319},[204,26287,642],{"class":214},[204,26289,26290],{"class":319},"\" stable\"",[204,26292,25196],{"class":210},[204,26294,24765],{"class":263},[204,26296,26297,26300,26303,26306,26309],{"class":206,"line":1287},[204,26298,26299],{"class":2049},"  sudo",[204,26301,26302],{"class":319}," tee",[204,26304,26305],{"class":319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[204,26307,26308],{"class":210}," >",[204,26310,26311],{"class":319}," \u002Fdev\u002Fnull\n",[19,26313,26314],{},"最后安装",[196,26316,26318],{"className":23909,"code":26317,"language":23911,"meta":125,"style":125},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[81,26319,26320,26329],{"__ignoreMap":125},[204,26321,26322,26324,26326],{"class":206,"line":207},[204,26323,24663],{"class":2049},[204,26325,26162],{"class":319},[204,26327,26328],{"class":319}," update\n",[204,26330,26331,26333,26335,26337,26340,26343,26346,26349],{"class":206,"line":126},[204,26332,24663],{"class":2049},[204,26334,26162],{"class":319},[204,26336,23921],{"class":319},[204,26338,26339],{"class":319}," docker-ce",[204,26341,26342],{"class":319}," docker-ce-cli",[204,26344,26345],{"class":319}," containerd.io",[204,26347,26348],{"class":319}," docker-buildx-plugin",[204,26350,26351],{"class":319}," docker-compose-plugin\n",[22085,26353,26355],{"id":26354},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26357,26358,26359,26362,26363,26366],{},"查看自己自己包管理工具版本（dnf是 ",[30,26360,26361],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[30,26364,26365],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[196,26368,26370],{"className":23909,"code":26369,"language":23911,"meta":125,"style":125},"dnf --version\n",[81,26371,26372],{"__ignoreMap":125},[204,26373,26374,26377],{"class":206,"line":207},[204,26375,26376],{"class":2049},"dnf",[204,26378,26379],{"class":263}," --version\n",[19,26381,26105,26382,26386],{},[62,26383,26110],{"href":26384,"rel":26385},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[66]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26388,26389],{},"如果你之前安装过 docker，请先删掉",[196,26391,26393],{"className":23909,"code":26392,"language":23911,"meta":125,"style":125},"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",[81,26394,26395,26409,26416,26423,26430,26437,26444,26451,26458,26465],{"__ignoreMap":125},[204,26396,26397,26399,26402,26404,26407],{"class":206,"line":207},[204,26398,24663],{"class":2049},[204,26400,26401],{"class":319}," dnf",[204,26403,26165],{"class":319},[204,26405,26406],{"class":319}," docker",[204,26408,24765],{"class":263},[204,26410,26411,26414],{"class":206,"line":126},[204,26412,26413],{"class":319},"                  docker-client",[204,26415,24765],{"class":263},[204,26417,26418,26421],{"class":206,"line":131},[204,26419,26420],{"class":319},"                  docker-client-latest",[204,26422,24765],{"class":263},[204,26424,26425,26428],{"class":206,"line":1281},[204,26426,26427],{"class":319},"                  docker-common",[204,26429,24765],{"class":263},[204,26431,26432,26435],{"class":206,"line":1287},[204,26433,26434],{"class":319},"                  docker-latest",[204,26436,24765],{"class":263},[204,26438,26439,26442],{"class":206,"line":1301},[204,26440,26441],{"class":319},"                  docker-latest-logrotate",[204,26443,24765],{"class":263},[204,26445,26446,26449],{"class":206,"line":1307},[204,26447,26448],{"class":319},"                  docker-logrotate",[204,26450,24765],{"class":263},[204,26452,26453,26456],{"class":206,"line":1398},[204,26454,26455],{"class":319},"                  docker-selinux",[204,26457,24765],{"class":263},[204,26459,26460,26463],{"class":206,"line":1404},[204,26461,26462],{"class":319},"                  docker-engine-selinux",[204,26464,24765],{"class":263},[204,26466,26467],{"class":206,"line":1416},[204,26468,26469],{"class":319},"                  docker-engine\n",[19,26471,26472],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[196,26474,26476],{"className":23909,"code":26475,"language":23911,"meta":125,"style":125},"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",[81,26477,26478,26492,26507],{"__ignoreMap":125},[204,26479,26480,26482,26484,26487,26489],{"class":206,"line":207},[204,26481,24663],{"class":2049},[204,26483,26401],{"class":319},[204,26485,26486],{"class":263}," -y",[204,26488,23921],{"class":319},[204,26490,26491],{"class":319}," dnf-plugins-core\n",[204,26493,26494,26496,26498,26501,26504],{"class":206,"line":126},[204,26495,24663],{"class":2049},[204,26497,26401],{"class":319},[204,26499,26500],{"class":319}," config-manager",[204,26502,26503],{"class":319}," addrepo",[204,26505,26506],{"class":263}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[204,26508,26509,26511,26514,26517,26520],{"class":206,"line":131},[204,26510,24663],{"class":2049},[204,26512,26513],{"class":319}," sed",[204,26515,26516],{"class":263}," -i",[204,26518,26519],{"class":319}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[204,26521,26522],{"class":319}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26524,26525],{},"最后安装：",[196,26527,26529],{"className":23909,"code":26528,"language":23911,"meta":125,"style":125},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[81,26530,26531],{"__ignoreMap":125},[204,26532,26533,26535,26537,26539,26541,26543,26545,26547],{"class":206,"line":207},[204,26534,24663],{"class":2049},[204,26536,26401],{"class":319},[204,26538,23921],{"class":319},[204,26540,26339],{"class":319},[204,26542,26342],{"class":319},[204,26544,26345],{"class":319},[204,26546,26348],{"class":319},[204,26548,26351],{"class":319},[49,26550,26552],{"id":26551},"_22配置环境","2.2.配置环境",[22085,26554,26556,26559],{"id":26555},"_221检查-docker-服务状态",[30,26557,26558],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26561,26562],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[196,26564,26566],{"className":23909,"code":26565,"language":23911,"meta":125,"style":125},"systemctl status docker\n",[81,26567,26568],{"__ignoreMap":125},[204,26569,26570,26573,26576],{"class":206,"line":207},[204,26571,26572],{"class":2049},"systemctl",[204,26574,26575],{"class":319}," status",[204,26577,26578],{"class":319}," docker\n",[22085,26580,26582,26559],{"id":26581},"_222启动-docker-服务",[30,26583,26584],{},"2.2.2.启动 Docker 服务",[19,26586,26587],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[196,26589,26591],{"className":23909,"code":26590,"language":23911,"meta":125,"style":125},"sudo systemctl start docker\n",[81,26592,26593],{"__ignoreMap":125},[204,26594,26595,26597,26600,26602],{"class":206,"line":207},[204,26596,24663],{"class":2049},[204,26598,26599],{"class":319}," systemctl",[204,26601,4270],{"class":319},[204,26603,26578],{"class":319},[22085,26605,26607,26559],{"id":26606},"_223设置-docker-开机自启",[30,26608,26609],{},"2.2.3.设置 Docker 开机自启",[19,26611,26612],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[196,26614,26616],{"className":23909,"code":26615,"language":23911,"meta":125,"style":125},"sudo systemctl enable docker\n",[81,26617,26618],{"__ignoreMap":125},[204,26619,26620,26622,26624,26627],{"class":206,"line":207},[204,26621,24663],{"class":2049},[204,26623,26599],{"class":319},[204,26625,26626],{"class":319}," enable",[204,26628,26578],{"class":319},[22085,26630,26632,13882,26635,13882,26640,26559],{"id":26631},"_224将用户添加到-docker-组",[30,26633,26634],{},"2.2.4.将用户添加到",[30,26636,26637],{},[81,26638,26639],{},"docker",[30,26641,26642],{},"组",[19,26644,26645,26646,26648],{},"使用以下命令将当前用户添加到 ",[81,26647,26639],{}," 组：",[196,26650,26652],{"className":23909,"code":26651,"language":23911,"meta":125,"style":125},"sudo usermod -aG docker $USER\n",[81,26653,26654],{"__ignoreMap":125},[204,26655,26656,26658,26661,26664,26666],{"class":206,"line":207},[204,26657,24663],{"class":2049},[204,26659,26660],{"class":319}," usermod",[204,26662,26663],{"class":263}," -aG",[204,26665,26406],{"class":319},[204,26667,26668],{"class":214}," $USER\n",[22085,26670,26672,26559],{"id":26671},"_225退出并重新登录",[30,26673,26674],{},"2.2.5.退出并重新登录",[19,26676,26677],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[196,26679,26681],{"className":23909,"code":26680,"language":23911,"meta":125,"style":125},"newgrp docker\n",[81,26682,26683],{"__ignoreMap":125},[204,26684,26685,26688],{"class":206,"line":207},[204,26686,26687],{"class":2049},"newgrp",[204,26689,26578],{"class":319},[22085,26691,26693,26559],{"id":26692},"_226重新启动-docker-服务如果需要",[30,26694,26695],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26697,26698],{},"确保 Docker 服务正在运行，可以使用以下命令：",[196,26700,26701],{"className":23909,"code":26590,"language":23911,"meta":125,"style":125},[81,26702,26703],{"__ignoreMap":125},[204,26704,26705,26707,26709,26711],{"class":206,"line":207},[204,26706,24663],{"class":2049},[204,26708,26599],{"class":319},[204,26710,4270],{"class":319},[204,26712,26578],{"class":319},[22085,26714,26716,26559],{"id":26715},"_227重启电脑后检查-docker-服务状态",[30,26717,26718],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26720,26721],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[196,26723,26725],{"className":23909,"code":26724,"language":23911,"meta":125,"style":125},"sudo reboot\nsystemctl status docker\n",[81,26726,26727,26734],{"__ignoreMap":125},[204,26728,26729,26731],{"class":206,"line":207},[204,26730,24663],{"class":2049},[204,26732,26733],{"class":319}," reboot\n",[204,26735,26736,26738,26740],{"class":206,"line":126},[204,26737,26572],{"class":2049},[204,26739,26575],{"class":319},[204,26741,26578],{"class":319},[19,26743,26744],{},[23,26745],{"alt":125,"src":26746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26748,26749],{},"第三行显示enabled说明开机自启动成功",[19,26751,26752],{},"按q退出",[49,26754,26756],{"id":26755},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26758,26759],{},"优先使用linux来使用docker是比较好的",[19,26761,26762],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26764,26765],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26767,26768,26769],{},"官方下载安装:",[62,26770,26771],{"href":26771,"rel":26772},"https:\u002F\u002Fwww.docker.com\u002F",[66],[19,26774,26775],{},"Windows的Docker显卡直通与USB直通:",[19,26777,26778],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26780,26781],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26783,26784],{},[23,26785],{"alt":125,"src":26786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26788,26789],{},[23,26790],{"alt":125,"src":26791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26793,26794],{},[23,26795],{"alt":125,"src":26796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5213,26798,26799],{},"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":125,"searchDepth":126,"depth":126,"links":26801},[26802,26803,26804],{"id":26079,"depth":131,"text":26080},{"id":26551,"depth":131,"text":26552},{"id":26755,"depth":131,"text":26756},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26071,"description":125},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26811,"title":26812,"body":26813,"description":26820,"extension":133,"meta":27513,"navigation":135,"path":27514,"seo":27515,"stem":27516,"__hash__":27517},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26814,"toc":27507},[26815,26818,26821,26825,26830,26835,26838,26866,26871,26880,26883,26888,26892,26899,26904,26910,26914,26917,26921,26926,27018,27023,27041,27046,27067,27072,27088,27092,27097,27126,27131,27177,27182,27226,27234,27251,27256,27272,27277,27291,27294,27297,27300,27303,27332,27335,27340,27344,27347,27350,27356,27359,27362,27365,27427,27434,27439,27442,27460,27464,27467,27484,27487,27490,27504],[10,26816,26812],{"id":26817},"_3docker直通",[19,26819,26820],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[49,26822,26824],{"id":26823},"_31usb直通","3.1.USB直通",[19,26826,26827],{},[23,26828],{"alt":125,"src":26829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[161,26831,26832],{},[71,26833,26834],{},"方法一(不是很推荐新手)：",[19,26836,26837],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[196,26839,26841],{"className":23909,"code":26840,"language":23911,"meta":125,"style":125},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[81,26842,26843,26851,26856],{"__ignoreMap":125},[204,26844,26845,26848],{"class":206,"line":207},[204,26846,26847],{"class":2049},"ls",[204,26849,26850],{"class":319}," \u002Fdev\n",[204,26852,26853],{"class":206,"line":126},[204,26854,26855],{"class":273},"#例如\n",[204,26857,26858,26861,26863],{"class":206,"line":131},[204,26859,26860],{"class":214},"--device",[204,26862,260],{"class":210},[204,26864,26865],{"class":319},"\u002Fdev\u002Ftty_USB0\n",[161,26867,26868],{"start":126},[71,26869,26870],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[196,26872,26874],{"className":23909,"code":26873,"language":23911,"meta":125,"style":125},"--privileged\n",[81,26875,26876],{"__ignoreMap":125},[204,26877,26878],{"class":206,"line":207},[204,26879,26873],{"class":2049},[19,26881,26882],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26884,26885],{},[23,26886],{"alt":125,"src":26887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[49,26889,26891],{"id":26890},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26893,26894,26895,26898],{},"NVIDIA Container Toolkit使用户 ",[30,26896,26897],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26900,26901],{},[23,26902],{"alt":125,"src":26903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26905,26906],{},[62,26907,26908],{"href":26908,"rel":26909},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[66],[22085,26911,26913],{"id":26912},"_321安装","3.2.1.安装",[19,26915,26916],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22997,26918,26920],{"id":26919},"_3211ubuntu","3.2.1.1.Ubuntu",[161,26922,26923],{},[71,26924,26925],{},"配置存储库 并更新",[196,26927,26929],{"className":23909,"code":26928,"language":23911,"meta":125,"style":125},"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",[81,26930,26931,26960,26980,26992,27004,27010],{"__ignoreMap":125},[204,26932,26933,26936,26939,26942,26944,26946,26949,26952,26955,26958],{"class":206,"line":207},[204,26934,26935],{"class":2049},"curl",[204,26937,26938],{"class":263}," -fsSL",[204,26940,26941],{"class":319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[204,26943,25196],{"class":210},[204,26945,26159],{"class":2049},[204,26947,26948],{"class":319}," gpg",[204,26950,26951],{"class":263}," --dearmor",[204,26953,26954],{"class":263}," -o",[204,26956,26957],{"class":319}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[204,26959,24765],{"class":263},[204,26961,26962,26965,26967,26970,26973,26976,26978],{"class":206,"line":126},[204,26963,26964],{"class":214},"  && ",[204,26966,26935],{"class":2049},[204,26968,26969],{"class":263}," -s",[204,26971,26972],{"class":263}," -L",[204,26974,26975],{"class":319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[204,26977,25196],{"class":210},[204,26979,24765],{"class":263},[204,26981,26982,26985,26988,26990],{"class":206,"line":131},[204,26983,26984],{"class":2049},"    sed",[204,26986,26987],{"class":319}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[204,26989,25196],{"class":210},[204,26991,24765],{"class":263},[204,26993,26994,26997,26999,27002],{"class":206,"line":1281},[204,26995,26996],{"class":2049},"    sudo",[204,26998,26302],{"class":319},[204,27000,27001],{"class":319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[204,27003,24765],{"class":263},[204,27005,27006,27008],{"class":206,"line":1287},[204,27007,26964],{"class":214},[204,27009,26261],{"class":263},[204,27011,27012,27014,27016],{"class":206,"line":1301},[204,27013,26996],{"class":2049},[204,27015,26162],{"class":319},[204,27017,26328],{"class":319},[161,27019,27020],{"start":126},[71,27021,27022],{},"安装nvidia-docker2",[196,27024,27026],{"className":23909,"code":27025,"language":23911,"meta":125,"style":125},"sudo apt-get install -y nvidia-docker2\n",[81,27027,27028],{"__ignoreMap":125},[204,27029,27030,27032,27034,27036,27038],{"class":206,"line":207},[204,27031,24663],{"class":2049},[204,27033,26162],{"class":319},[204,27035,23921],{"class":319},[204,27037,26486],{"class":263},[204,27039,27040],{"class":319}," nvidia-docker2\n",[161,27042,27043],{"start":131},[71,27044,27045],{},"使用nvidia-ctk命令配置container runtime",[196,27047,27049],{"className":23909,"code":27048,"language":23911,"meta":125,"style":125},"sudo nvidia-ctk runtime configure --runtime=docker\n",[81,27050,27051],{"__ignoreMap":125},[204,27052,27053,27055,27058,27061,27064],{"class":206,"line":207},[204,27054,24663],{"class":2049},[204,27056,27057],{"class":319}," nvidia-ctk",[204,27059,27060],{"class":319}," runtime",[204,27062,27063],{"class":319}," configure",[204,27065,27066],{"class":263}," --runtime=docker\n",[161,27068,27069],{"start":1281},[71,27070,27071],{},"重启docker服务:",[196,27073,27075],{"className":23909,"code":27074,"language":23911,"meta":125,"style":125},"sudo systemctl restart docker\n",[81,27076,27077],{"__ignoreMap":125},[204,27078,27079,27081,27083,27086],{"class":206,"line":207},[204,27080,24663],{"class":2049},[204,27082,26599],{"class":319},[204,27084,27085],{"class":319}," restart",[204,27087,26578],{"class":319},[22997,27089,27091],{"id":27090},"_3212fedora","3.2.1.2.Fedora",[161,27093,27094],{},[71,27095,27096],{},"配置存储库",[196,27098,27100],{"className":23909,"code":27099,"language":23911,"meta":125,"style":125},"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",[81,27101,27102,27117],{"__ignoreMap":125},[204,27103,27104,27106,27108,27110,27113,27115],{"class":206,"line":207},[204,27105,26935],{"class":2049},[204,27107,26969],{"class":263},[204,27109,26972],{"class":263},[204,27111,27112],{"class":319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[204,27114,25196],{"class":210},[204,27116,24765],{"class":263},[204,27118,27119,27121,27123],{"class":206,"line":126},[204,27120,24663],{"class":2049},[204,27122,26302],{"class":319},[204,27124,27125],{"class":319}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[161,27127,27128],{"start":126},[71,27129,27130],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[196,27132,27134],{"className":23909,"code":27133,"language":23911,"meta":125,"style":125},"# 如果是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",[81,27135,27136,27141,27155,27159,27164],{"__ignoreMap":125},[204,27137,27138],{"class":206,"line":207},[204,27139,27140],{"class":273},"# 如果是RHEL或者Rocky（DNF4）\n",[204,27142,27143,27145,27147,27149,27152],{"class":206,"line":126},[204,27144,24663],{"class":2049},[204,27146,26401],{"class":319},[204,27148,26500],{"class":319},[204,27150,27151],{"class":263}," --add-repo",[204,27153,27154],{"class":319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[204,27156,27157],{"class":206,"line":131},[204,27158,2486],{"emptyLinePlaceholder":135},[204,27160,27161],{"class":206,"line":1281},[204,27162,27163],{"class":273},"# 如果是Feodra41+（DNF5）\n",[204,27165,27166,27168,27170,27172,27174],{"class":206,"line":1287},[204,27167,24663],{"class":2049},[204,27169,26401],{"class":319},[204,27171,26500],{"class":319},[204,27173,26503],{"class":319},[204,27175,27176],{"class":263}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[161,27178,27179],{"start":131},[71,27180,27181],{},"安装NVIDIA Container Toolki包",[196,27183,27185],{"className":23909,"code":27184,"language":23911,"meta":125,"style":125},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[81,27186,27187,27192,27205,27209,27214],{"__ignoreMap":125},[204,27188,27189],{"class":206,"line":207},[204,27190,27191],{"class":273},"# 如果是RHEL或者Rocky\n",[204,27193,27194,27196,27198,27200,27202],{"class":206,"line":126},[204,27195,24663],{"class":2049},[204,27197,26401],{"class":319},[204,27199,23921],{"class":319},[204,27201,26486],{"class":263},[204,27203,27204],{"class":319}," nvidia-container-toolkit\n",[204,27206,27207],{"class":206,"line":131},[204,27208,2486],{"emptyLinePlaceholder":135},[204,27210,27211],{"class":206,"line":1281},[204,27212,27213],{"class":273},"# 如果是Fedora\n",[204,27215,27216,27218,27220,27222,27224],{"class":206,"line":1287},[204,27217,24663],{"class":2049},[204,27219,26401],{"class":319},[204,27221,23921],{"class":319},[204,27223,26486],{"class":263},[204,27225,27204],{"class":319},[161,27227,27228],{"start":1281},[71,27229,27230,27231,27233],{},"安装nvidia-docker2 ： 在Fedora上使用",[81,27232,26376],{},"进行安装",[196,27235,27237],{"className":23909,"code":27236,"language":23911,"meta":125,"style":125},"sudo dnf install -y nvidia-docker2\n",[81,27238,27239],{"__ignoreMap":125},[204,27240,27241,27243,27245,27247,27249],{"class":206,"line":207},[204,27242,24663],{"class":2049},[204,27244,26401],{"class":319},[204,27246,23921],{"class":319},[204,27248,26486],{"class":263},[204,27250,27040],{"class":319},[161,27252,27253],{"start":1287},[71,27254,27255],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[196,27257,27258],{"className":23909,"code":27048,"language":23911,"meta":125,"style":125},[81,27259,27260],{"__ignoreMap":125},[204,27261,27262,27264,27266,27268,27270],{"class":206,"line":207},[204,27263,24663],{"class":2049},[204,27265,27057],{"class":319},[204,27267,27060],{"class":319},[204,27269,27063],{"class":319},[204,27271,27066],{"class":263},[161,27273,27274],{"start":1301},[71,27275,27276],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[196,27278,27279],{"className":23909,"code":27074,"language":23911,"meta":125,"style":125},[81,27280,27281],{"__ignoreMap":125},[204,27282,27283,27285,27287,27289],{"class":206,"line":207},[204,27284,24663],{"class":2049},[204,27286,26599],{"class":319},[204,27288,27085],{"class":319},[204,27290,26578],{"class":319},[19,27292,27293],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27295,27296],{},"方法：",[19,27298,27299],{},"1️⃣nvidia-smi",[19,27301,27302],{},"2️⃣运行nvidia cuda 容器进行测试",[196,27304,27306],{"className":23909,"code":27305,"language":23911,"meta":125,"style":125},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[81,27307,27308],{"__ignoreMap":125},[204,27309,27310,27312,27314,27317,27320,27323,27326,27329],{"class":206,"line":207},[204,27311,24663],{"class":2049},[204,27313,26406],{"class":319},[204,27315,27316],{"class":319}," run",[204,27318,27319],{"class":263}," --rm",[204,27321,27322],{"class":263}," --gpus",[204,27324,27325],{"class":319}," all",[204,27327,27328],{"class":319}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[204,27330,27331],{"class":319}," nvidia-smi\n",[19,27333,27334],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27336,27337],{},[23,27338],{"alt":125,"src":27339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[49,27341,27343],{"id":27342},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27345,27346],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27348,27349],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27351,27352],{},[62,27353,27354],{"href":27354,"rel":27355},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[66],[19,27357,27358],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27360,27361],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27363,27364],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[352,27366,27367,27383],{},[355,27368,27369],{},[358,27370,27371,27374,27377,27380],{},[361,27372,27373],{"align":23823},"镜像类型",[361,27375,27376],{"align":23823},"适用场景",[361,27378,27379],{"align":23823},"示例标签",[361,27381,27382],{"align":23823},"大小",[398,27384,27385,27399,27413],{},[358,27386,27387,27390,27393,27396],{},[403,27388,27389],{"align":23823},"base",[403,27391,27392],{"align":23823},"仅需 CUDA 运行时库",[403,27394,27395],{"align":23823},"12.4.0-base-ubuntu22.04",[403,27397,27398],{"align":23823},"~240MB",[358,27400,27401,27404,27407,27410],{},[403,27402,27403],{"align":23823},"runtime",[403,27405,27406],{"align":23823},"部署编译后的应用（含数学库）",[403,27408,27409],{"align":23823},"12.4.0-runtime-ubuntu22.04",[403,27411,27412],{"align":23823},"~2GB",[358,27414,27415,27418,27421,27424],{},[403,27416,27417],{"align":23823},"devel",[403,27419,27420],{"align":23823},"开发环境（含编译工具）",[403,27422,27423],{"align":23823},"12.4.0-devel-ubuntu22.04",[403,27425,27426],{"align":23823},"~3GB",[19,27428,27429,27430,27433],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[81,27431,27432],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27435,27436],{},[23,27437],{"alt":125,"src":27438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27440,27441],{},"在dockerfile里就可以开头这么写：",[196,27443,27445],{"className":23909,"code":27444,"language":23911,"meta":125,"style":125},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[81,27446,27447,27452],{"__ignoreMap":125},[204,27448,27449],{"class":206,"line":207},[204,27450,27451],{"class":273},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[204,27453,27454,27457],{"class":206,"line":126},[204,27455,27456],{"class":2049},"FROM",[204,27458,27459],{"class":319}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[49,27461,27463],{"id":27462},"_34配置以太网","3.4.配置以太网",[19,27465,27466],{},"指定网络模式",[196,27468,27470],{"className":23909,"code":27469,"language":23911,"meta":125,"style":125},"--net=host \\\n",[81,27471,27472],{"__ignoreMap":125},[204,27473,27474,27477,27479,27482],{"class":206,"line":207},[204,27475,27476],{"class":214},"--net",[204,27478,260],{"class":210},[204,27480,27481],{"class":319},"host",[204,27483,24765],{"class":2049},[19,27485,27486],{},"启动参数里加上这行即可。具体在下方",[19,27488,27489],{},"--net选项：指定网络模式，该选项有以下参数可选：",[68,27491,27492,27495,27498,27501],{},[71,27493,27494],{},"--net=bridge:默认选项，表示连接到默认的网桥",[71,27496,27497],{},"--net=host:容器使用宿主机的网络",[71,27499,27500],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[71,27502,27503],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5213,27505,27506],{},"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":125,"searchDepth":126,"depth":126,"links":27508},[27509,27510,27511,27512],{"id":26823,"depth":131,"text":26824},{"id":26890,"depth":131,"text":26891},{"id":27342,"depth":131,"text":27343},{"id":27462,"depth":131,"text":27463},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26812,"description":26820},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27519,"title":27520,"body":27521,"description":27528,"extension":133,"meta":27534,"navigation":135,"path":27535,"seo":27536,"stem":27537,"__hash__":27538},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27522,"toc":27532},[27523,27526,27529],[10,27524,27520],{"id":27525},"_4dockerhub换源",[19,27527,27528],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27530,27531],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":125,"searchDepth":126,"depth":126,"links":27533},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27520,"description":27528},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27540,"title":27541,"body":27542,"description":125,"extension":133,"meta":28554,"navigation":135,"path":28555,"seo":28556,"stem":28557,"__hash__":28558},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27543,"toc":28549},[27544,27547,27551,27557,27561,27564,27904,27907,27910,27913,27918,27923,27926,27929,27932,27935,27954,27957,27968,27974,28156,28166,28182,28445,28447,28472,28487,28496,28546],[10,27545,27541],{"id":27546},"_5docker命令学习",[49,27548,27550],{"id":27549},"_51参考文档","5.1.参考文档",[19,27552,27553],{},[62,27554,27555],{"href":27555,"rel":27556},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[66],[49,27558,27560],{"id":27559},"_52常用命令","5.2.常用命令",[19,27562,27563],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[352,27565,27566,27579],{},[355,27567,27568],{},[358,27569,27570,27573,27576],{},[361,27571,27572],{"align":23823},"命令",[361,27574,27575],{"align":23823},"描述",[361,27577,27578],{"align":23823},"示例",[398,27580,27581,27592,27603,27614,27625,27636,27647,27658,27668,27679,27690,27701,27711,27722,27733,27744,27754,27764,27774,27784,27795,27806,27817,27828,27839,27850,27860,27871,27882,27893],{},[358,27582,27583,27586,27589],{},[403,27584,27585],{"align":23823},"docker run",[403,27587,27588],{"align":23823},"创建并启动一个新的容器。",[403,27590,27591],{"align":23823},"docker run -it ubuntu bash",[358,27593,27594,27597,27600],{},[403,27595,27596],{"align":23823},"docker build",[403,27598,27599],{"align":23823},"通过指定的 Dockerfile 创建一个新的镜像。",[403,27601,27602],{"align":23823},"docker build -t myimage .",[358,27604,27605,27608,27611],{},[403,27606,27607],{"align":23823},"docker pull",[403,27609,27610],{"align":23823},"从 Docker 仓库拉取镜像。",[403,27612,27613],{"align":23823},"docker pull ubuntu",[358,27615,27616,27619,27622],{},[403,27617,27618],{"align":23823},"docker push",[403,27620,27621],{"align":23823},"将本地镜像推送到 Docker 仓库。",[403,27623,27624],{"align":23823},"docker push myimage",[358,27626,27627,27630,27633],{},[403,27628,27629],{"align":23823},"docker stop",[403,27631,27632],{"align":23823},"停止一个正在运行的容器。",[403,27634,27635],{"align":23823},"docker stop container_id",[358,27637,27638,27641,27644],{},[403,27639,27640],{"align":23823},"docker start",[403,27642,27643],{"align":23823},"启动一个已经存在的容器。",[403,27645,27646],{"align":23823},"docker start container_id",[358,27648,27649,27652,27655],{},[403,27650,27651],{"align":23823},"docker restart",[403,27653,27654],{"align":23823},"重新启动容器。",[403,27656,27657],{"align":23823},"docker restart container_id",[358,27659,27660,27663,27666],{},[403,27661,27662],{"align":23823},"docker ps",[403,27664,27665],{"align":23823},"列出当前正在运行的容器。",[403,27667,27662],{"align":23823},[358,27669,27670,27673,27676],{},[403,27671,27672],{"align":23823},"docker rm",[403,27674,27675],{"align":23823},"删除一个或多个停止的容器。",[403,27677,27678],{"align":23823},"docker rm container_id",[358,27680,27681,27684,27687],{},[403,27682,27683],{"align":23823},"docker exec",[403,27685,27686],{"align":23823},"在一个正在运行的容器中执行命令。",[403,27688,27689],{"align":23823},"docker exec -it container_id bash",[358,27691,27692,27695,27698],{},[403,27693,27694],{"align":23823},"docker logs",[403,27696,27697],{"align":23823},"查看容器的日志输出。",[403,27699,27700],{"align":23823},"docker logs container_id",[358,27702,27703,27706,27709],{},[403,27704,27705],{"align":23823},"docker images",[403,27707,27708],{"align":23823},"列出本地所有镜像。",[403,27710,27705],{"align":23823},[358,27712,27713,27716,27719],{},[403,27714,27715],{"align":23823},"docker rmi",[403,27717,27718],{"align":23823},"删除一个或多个镜像。",[403,27720,27721],{"align":23823},"docker rmi myimage",[358,27723,27724,27727,27730],{},[403,27725,27726],{"align":23823},"docker network",[403,27728,27729],{"align":23823},"管理 Docker 网络。",[403,27731,27732],{"align":23823},"docker network ls",[358,27734,27735,27738,27741],{},[403,27736,27737],{"align":23823},"docker volume",[403,27739,27740],{"align":23823},"管理 Docker 数据卷。",[403,27742,27743],{"align":23823},"docker volume ls",[358,27745,27746,27749,27752],{},[403,27747,27748],{"align":23823},"docker-compose up",[403,27750,27751],{"align":23823},"启动 docker-compose.yml 中定义的所有服务。",[403,27753,27748],{"align":23823},[358,27755,27756,27759,27762],{},[403,27757,27758],{"align":23823},"docker-compose down",[403,27760,27761],{"align":23823},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[403,27763,27758],{"align":23823},[358,27765,27766,27769,27772],{},[403,27767,27768],{"align":23823},"docker info",[403,27770,27771],{"align":23823},"显示 Docker 系统的详细信息。",[403,27773,27768],{"align":23823},[358,27775,27776,27779,27782],{},[403,27777,27778],{"align":23823},"docker stats",[403,27780,27781],{"align":23823},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[403,27783,27778],{"align":23823},[358,27785,27786,27789,27792],{},[403,27787,27788],{"align":23823},"docker inspect",[403,27790,27791],{"align":23823},"查看容器或镜像的详细信息（JSON 格式）。",[403,27793,27794],{"align":23823},"docker inspect container_id",[358,27796,27797,27800,27803],{},[403,27798,27799],{"align":23823},"docker save",[403,27801,27802],{"align":23823},"将一个镜像保存为 tar 文件。",[403,27804,27805],{"align":23823},"docker save -o myimage.tar myimage",[358,27807,27808,27811,27814],{},[403,27809,27810],{"align":23823},"docker load",[403,27812,27813],{"align":23823},"从 tar 文件中加载镜像。",[403,27815,27816],{"align":23823},"docker load -i myimage.tar",[358,27818,27819,27822,27825],{},[403,27820,27821],{"align":23823},"docker tag",[403,27823,27824],{"align":23823},"为镜像添加标签（tag）。",[403,27826,27827],{"align":23823},"docker tag myimage myimage:v1",[358,27829,27830,27833,27836],{},[403,27831,27832],{"align":23823},"docker buildx build",[403,27834,27835],{"align":23823},"使用 Buildx 构建多架构镜像。",[403,27837,27838],{"align":23823},"docker buildx build -t myimage .",[358,27840,27841,27844,27847],{},[403,27842,27843],{"align":23823},"docker buildx create",[403,27845,27846],{"align":23823},"创建一个新的 Buildx 构建实例。",[403,27848,27849],{"align":23823},"docker buildx create –use",[358,27851,27852,27855,27858],{},[403,27853,27854],{"align":23823},"docker buildx ls",[403,27856,27857],{"align":23823},"列出所有可用的 Buildx 构建实例。",[403,27859,27854],{"align":23823},[358,27861,27862,27865,27868],{},[403,27863,27864],{"align":23823},"docker buildx use",[403,27866,27867],{"align":23823},"设置当前的 Buildx 构建实例。",[403,27869,27870],{"align":23823},"docker buildx use mybuilder",[358,27872,27873,27876,27879],{},[403,27874,27875],{"align":23823},"docker buildx bake",[403,27877,27878],{"align":23823},"使用 Bake 文件批量构建镜像。",[403,27880,27881],{"align":23823},"docker buildx bake -f bake.hcl",[358,27883,27884,27887,27890],{},[403,27885,27886],{"align":23823},"docker buildx build –push",[403,27888,27889],{"align":23823},"构建镜像并推送到镜像仓库。",[403,27891,27892],{"align":23823},"docker buildx build –push -t myimage .",[358,27894,27895,27898,27901],{},[403,27896,27897],{"align":23823},"docker buildx build –platform",[403,27899,27900],{"align":23823},"构建镜像并为多个平台生成支持。",[403,27902,27903],{"align":23823},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27905,27906],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27908,27909],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27911,27912],{},"docker images 可以查看已经下载的镜像",[19,27914,27915],{},[23,27916],{"alt":125,"src":27917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27919,27920],{},[30,27921,27922],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27924,27925],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27927,27928],{},"docker container logs 查看容器日志",[19,27930,27931],{},"docker top 查看容器里的进程",[19,27933,27934],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[196,27936,27938],{"className":23909,"code":27937,"language":23911,"meta":125,"style":125},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[81,27939,27940],{"__ignoreMap":125},[204,27941,27942,27945,27948,27951],{"class":206,"line":207},[204,27943,27944],{"class":2049},"如：docker",[204,27946,27947],{"class":319}," cp",[204,27949,27950],{"class":319}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[204,27952,27953],{"class":319}," \u002Fmydata\u002Fnginx\n",[19,27955,27956],{},"docker run时在启动容器的时候会有几个常用的选项：",[68,27958,27959,27962,27965],{},[71,27960,27961],{},"-d选项：表示后台运行",[71,27963,27964],{},"-P选项：随机端口映射",[71,27966,27967],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[49,27969,27971],{"id":27970},"_53run命令的参数非常重要",[30,27972,27973],{},"5.3.run命令的参数（非常重要）",[352,27975,27976,27989],{},[355,27977,27978],{},[358,27979,27980,27983,27986],{},[361,27981,27982],{"align":23823},"参数\u002F配置",[361,27984,27985],{"align":23823},"功能说明",[361,27987,27988],{"align":23823},"重要性与参考依据",[398,27990,27991,28002,28013,28024,28035,28046,28057,28068,28079,28090,28101,28112,28123,28134,28145],{},[358,27992,27993,27996,27999],{},[403,27994,27995],{"align":23823},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[403,27997,27998],{"align":23823},"指定容器名称，便于后续管理",[403,28000,28001],{"align":23823},"替代随机生成的容器名。",[358,28003,28004,28007,28010],{},[403,28005,28006],{"align":23823},"–gpus all",[403,28008,28009],{"align":23823},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[403,28011,28012],{"align":23823},"用于CUDA加速等GPU依赖任务。",[358,28014,28015,28018,28021],{},[403,28016,28017],{"align":23823},"-e NVIDIA_DRIVER_CAPABILITIES=all",[403,28019,28020],{"align":23823},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[403,28022,28023],{"align":23823},"确保容器内GPU功能完整67。",[358,28025,28026,28029,28032],{},[403,28027,28028],{"align":23823},"-dit",[403,28030,28031],{"align":23823},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[403,28033,28034],{"align":23823},"允许容器在后台运行并支持交互操作。",[358,28036,28037,28040,28043],{},[403,28038,28039],{"align":23823},"–privileged",[403,28041,28042],{"align":23823},"赋予容器完全主机权限（可访问设备、内核模块等）",[403,28044,28045],{"align":23823},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[358,28047,28048,28051,28054],{},[403,28049,28050],{"align":23823},"–net=host",[403,28052,28053],{"align":23823},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[403,28055,28056],{"align":23823},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[358,28058,28059,28062,28065],{},[403,28060,28061],{"align":23823},"–group-add audio–group-add video–group-add dialout",[403,28063,28064],{"align":23823},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[403,28066,28067],{"align":23823},"避免权限问题（如避免无法调用摄像头、麦克风）。",[358,28069,28070,28073,28076],{},[403,28071,28072],{"align":23823},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[403,28074,28075],{"align":23823},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[403,28077,28078],{"align":23823},"支持容器内运行图形界面应用（如OpenCV可视化）。",[358,28080,28081,28084,28087],{},[403,28082,28083],{"align":23823},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[403,28085,28086],{"align":23823},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[403,28088,28089],{"align":23823},"实现容器内图形显示。",[358,28091,28092,28095,28098],{},[403,28093,28094],{"align":23823},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[403,28096,28097],{"align":23823},"挂载X11认证文件（只读）",[403,28099,28100],{"align":23823},"确保容器有权连接宿主机显示服务。",[358,28102,28103,28106,28109],{},[403,28104,28105],{"align":23823},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[403,28107,28108],{"align":23823},"挂载Wayland显示协议相关目录",[403,28110,28111],{"align":23823},"支持Wayland协议的图形显示。",[358,28113,28114,28117,28120],{},[403,28115,28116],{"align":23823},"–ulimit nofile=1024:524288",[403,28118,28119],{"align":23823},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[403,28121,28122],{"align":23823},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[358,28124,28125,28128,28131],{},[403,28126,28127],{"align":23823},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[403,28129,28130],{"align":23823},"挂载宿主机用户目录到容器内同名路径",[403,28132,28133],{"align":23823},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[358,28135,28136,28139,28142],{},[403,28137,28138],{"align":23823},"-w \u002Fhome\u002Ftungchiahui",[403,28140,28141],{"align":23823},"设置容器启动后的默认工作目录",[403,28143,28144],{"align":23823},"直接进入项目路径，方便执行命令2324。",[358,28146,28147,28150,28153],{},[403,28148,28149],{"align":23823},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[403,28151,28152],{"align":23823},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[403,28154,28155],{"align":23823},"提供预配置的深度学习与机器人开发环境。",[19,28157,28158,28159,28161,28162,28165],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[81,28160,24663],{},"加不加",[81,28163,28164],{},"sudo -E","都无所谓。",[19,28167,28168,28169,28171,28172,28174,28175,28178,28179,28181],{},"用户已经被加到docker组了，不用",[81,28170,24663],{},"也行跑，其次，",[81,28173,24663],{},"运行的话，你的",[81,28176,28177],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[81,28180,28177],{},"更不可能变了。",[196,28183,28185],{"className":23909,"code":28184,"language":23911,"meta":125,"style":125},"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",[81,28186,28187,28200,28210,28220,28232,28239,28246,28253,28263,28272,28281,28295,28307,28319,28328,28338,28347,28362,28395,28422,28433,28440],{"__ignoreMap":125},[204,28188,28189,28191,28193,28195,28198],{"class":206,"line":207},[204,28190,24663],{"class":2049},[204,28192,26406],{"class":319},[204,28194,27316],{"class":319},[204,28196,28197],{"class":263}," --name=ros_opencv_cuda",[204,28199,24765],{"class":263},[204,28201,28202,28205,28208],{"class":206,"line":126},[204,28203,28204],{"class":214},"--gpus ",[204,28206,28207],{"class":319},"all",[204,28209,24765],{"class":263},[204,28211,28212,28215,28218],{"class":206,"line":131},[204,28213,28214],{"class":214},"-e ",[204,28216,28217],{"class":319},"NVIDIA_DRIVER_CAPABILITIES=all",[204,28219,24765],{"class":263},[204,28221,28222,28224,28227,28230],{"class":206,"line":1281},[204,28223,28214],{"class":214},[204,28225,28226],{"class":319},"DISPLAY=",[204,28228,28229],{"class":214},"$DISPLAY ",[204,28231,26261],{"class":263},[204,28233,28234,28237],{"class":206,"line":1287},[204,28235,28236],{"class":214},"-dit ",[204,28238,26261],{"class":263},[204,28240,28241,28244],{"class":206,"line":1301},[204,28242,28243],{"class":214},"--privileged ",[204,28245,26261],{"class":263},[204,28247,28248,28251],{"class":206,"line":1307},[204,28249,28250],{"class":214},"--net=host ",[204,28252,26261],{"class":263},[204,28254,28255,28258,28261],{"class":206,"line":1398},[204,28256,28257],{"class":214},"--group-add ",[204,28259,28260],{"class":319},"audio",[204,28262,24765],{"class":263},[204,28264,28265,28267,28270],{"class":206,"line":1404},[204,28266,28257],{"class":214},[204,28268,28269],{"class":319},"video",[204,28271,24765],{"class":263},[204,28273,28274,28276,28279],{"class":206,"line":1416},[204,28275,28257],{"class":214},[204,28277,28278],{"class":319},"dialout",[204,28280,24765],{"class":263},[204,28282,28283,28285,28288,28290,28293],{"class":206,"line":1698},[204,28284,28214],{"class":214},[204,28286,28287],{"class":319},"XAUTHORITY=",[204,28289,28177],{"class":214},[204,28291,28292],{"class":319},"\u002F.Xauthority",[204,28294,24765],{"class":263},[204,28296,28297,28299,28302,28305],{"class":206,"line":1703},[204,28298,28214],{"class":214},[204,28300,28301],{"class":319},"WAYLAND_DISPLAY=",[204,28303,28304],{"class":214},"$WAYLAND_DISPLAY ",[204,28306,26261],{"class":263},[204,28308,28309,28311,28314,28317],{"class":206,"line":1709},[204,28310,28214],{"class":214},[204,28312,28313],{"class":319},"XDG_RUNTIME_DIR=",[204,28315,28316],{"class":214},"$XDG_RUNTIME_DIR ",[204,28318,26261],{"class":263},[204,28320,28321,28323,28326],{"class":206,"line":1714},[204,28322,28214],{"class":214},[204,28324,28325],{"class":319},"QT_QPA_PLATFORM=xcb",[204,28327,24765],{"class":263},[204,28329,28330,28333,28336],{"class":206,"line":1728},[204,28331,28332],{"class":214},"-v ",[204,28334,28335],{"class":319},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[204,28337,24765],{"class":263},[204,28339,28340,28342,28345],{"class":206,"line":1733},[204,28341,28332],{"class":214},[204,28343,28344],{"class":319},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[204,28346,24765],{"class":263},[204,28348,28349,28352,28355,28357,28360],{"class":206,"line":1739},[204,28350,28351],{"class":214},"-v $HOME",[204,28353,28354],{"class":319},"\u002F.Xauthority:",[204,28356,28177],{"class":214},[204,28358,28359],{"class":319},"\u002F.Xauthority:ro",[204,28361,24765],{"class":263},[204,28363,28364,28366,28369,28371,28374,28377,28379,28382,28384,28386,28388,28390,28393],{"class":206,"line":1760},[204,28365,28332],{"class":214},[204,28367,28368],{"class":319},"\u002Frun\u002Fuser\u002F",[204,28370,25186],{"class":214},[204,28372,28373],{"class":2049},"id",[204,28375,28376],{"class":263}," -u",[204,28378,642],{"class":214},[204,28380,28381],{"class":319},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[204,28383,25186],{"class":214},[204,28385,28373],{"class":2049},[204,28387,28376],{"class":263},[204,28389,642],{"class":214},[204,28391,28392],{"class":319},"\u002Fwayland-0",[204,28394,24765],{"class":263},[204,28396,28397,28399,28401,28403,28405,28407,28409,28412,28414,28416,28418,28420],{"class":206,"line":1765},[204,28398,28332],{"class":214},[204,28400,28368],{"class":319},[204,28402,25186],{"class":214},[204,28404,28373],{"class":2049},[204,28406,28376],{"class":263},[204,28408,642],{"class":214},[204,28410,28411],{"class":319},":\u002Frun\u002Fuser\u002F",[204,28413,25186],{"class":214},[204,28415,28373],{"class":2049},[204,28417,28376],{"class":263},[204,28419,13801],{"class":214},[204,28421,26261],{"class":263},[204,28423,28424,28426,28428,28431],{"class":206,"line":1779},[204,28425,28351],{"class":214},[204,28427,1072],{"class":319},[204,28429,28430],{"class":214},"$HOME ",[204,28432,26261],{"class":263},[204,28434,28435,28438],{"class":206,"line":1784},[204,28436,28437],{"class":214},"-w $HOME ",[204,28439,26261],{"class":263},[204,28441,28442],{"class":206,"line":1813},[204,28443,28444],{"class":214},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28446,9112],{},[161,28448,28449,28457,28460,28463],{},[71,28450,28451,13882,28453,28456],{},[81,28452,28217],{},[81,28454,28455],{},"--gpus all","没有英伟达显卡请注释。",[71,28458,28459],{},"--name后面请自己为容器起名。",[71,28461,28462],{},"最后一行仓库名称请你自己找对应的镜像填上。",[71,28464,28465,28466,28471],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23640,28467,28468],{},[30,28469,28470],{},"请不要加","。",[196,28473,28475],{"className":23909,"code":28474,"language":23911,"meta":125,"style":125},"--ulimit nofile=1024:524288 \\\n",[81,28476,28477],{"__ignoreMap":125},[204,28478,28479,28482,28485],{"class":206,"line":207},[204,28480,28481],{"class":2049},"--ulimit",[204,28483,28484],{"class":319}," nofile=1024:524288",[204,28486,24765],{"class":263},[19,28488,28489,28490,28495],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23640,28491,28492],{},[30,28493,28494],{},"不建议","**.**",[196,28497,28499],{"className":23909,"code":28498,"language":23911,"meta":125,"style":125},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[81,28500,28501,28528,28537],{"__ignoreMap":125},[204,28502,28503,28506,28509,28511,28513,28515,28517,28519,28521,28524,28526],{"class":206,"line":207},[204,28504,28505],{"class":2049},"--user",[204,28507,28508],{"class":214}," $(",[204,28510,28373],{"class":2049},[204,28512,28376],{"class":263},[204,28514,642],{"class":214},[204,28516,1072],{"class":319},[204,28518,25186],{"class":214},[204,28520,28373],{"class":2049},[204,28522,28523],{"class":263}," -g",[204,28525,13801],{"class":214},[204,28527,26261],{"class":263},[204,28529,28530,28532,28535],{"class":206,"line":126},[204,28531,28332],{"class":214},[204,28533,28534],{"class":319},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[204,28536,24765],{"class":263},[204,28538,28539,28541,28544],{"class":206,"line":131},[204,28540,28332],{"class":214},[204,28542,28543],{"class":319},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[204,28545,24765],{"class":263},[5213,28547,28548],{},"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":125,"searchDepth":126,"depth":126,"links":28550},[28551,28552,28553],{"id":27549,"depth":131,"text":27550},{"id":27559,"depth":131,"text":27560},{"id":27970,"depth":131,"text":27973},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27541,"description":125},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28560,"title":28561,"body":28562,"description":125,"extension":133,"meta":30185,"navigation":135,"path":30186,"seo":30187,"stem":30188,"__hash__":30189},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28563,"toc":30180},[28564,28567,28571,28574,28796,28800,28804,28807,28913,28918,28921,28926,28929,28934,28937,28942,28945,28957,28960,28965,28972,29000,29007,29083,29088,29091,29114,29116,29191,29196,29199,29203,29211,29216,29221,29225,29236,29242,29245,29248,29272,29275,29278,29306,29309,29312,29777,29780,29785,29790,29794,29817,29822,29826,29830,29833,29836,29839,29866,29869,29872,29890,29893,29896,29918,29926,29931,29936,29940,29943,29946,29949,29952,29997,30000,30018,30021,30026,30029,30050,30053,30109,30112,30117,30121,30124,30131,30134,30137,30142,30145,30161,30164,30177],[10,28565,28561],{"id":28566},"_6手动创建docker镜像",[49,28568,28570],{"id":28569},"_61dockerfile","6.1.DockerFile",[19,28572,28573],{},"常用命令：",[352,28575,28576,28587],{},[355,28577,28578],{},[358,28579,28580,28583,28585],{},[361,28581,28582],{"align":23823},"指令",[361,28584,25955],{"align":23823},[361,28586,27578],{"align":23823},[398,28588,28589,28599,28615,28626,28637,28648,28659,28670,28681,28695,28709,28720,28734,28745,28756,28770,28785],{},[358,28590,28591,28593,28596],{},[403,28592,27456],{"align":23823},[403,28594,28595],{"align":23823},"指定基础镜像，是 Dockerfile 的起点",[403,28597,28598],{"align":23823},"FROM ubuntu:22.04",[358,28600,28601,28604,28607],{},[403,28602,28603],{"align":23823},"LABEL",[403,28605,28606],{"align":23823},"添加元数据（如作者、版本等）",[403,28608,28609,28610,28614],{"align":23823},"LABEL maintainer=”",[62,28611,28613],{"href":28612},"mailto:you@example.com","you@example.com","”",[358,28616,28617,28620,28623],{},[403,28618,28619],{"align":23823},"ENV",[403,28621,28622],{"align":23823},"设置环境变量",[403,28624,28625],{"align":23823},"ENV PORT=8080",[358,28627,28628,28631,28634],{},[403,28629,28630],{"align":23823},"ARG",[403,28632,28633],{"align":23823},"构建参数，只在构建期间可用",[403,28635,28636],{"align":23823},"ARG VERSION=1.0",[358,28638,28639,28642,28645],{},[403,28640,28641],{"align":23823},"RUN",[403,28643,28644],{"align":23823},"构建镜像时运行命令",[403,28646,28647],{"align":23823},"RUN apt-get update && apt-get install -y curl",[358,28649,28650,28653,28656],{},[403,28651,28652],{"align":23823},"COPY",[403,28654,28655],{"align":23823},"复制文件到镜像中",[403,28657,28658],{"align":23823},"COPY . \u002Fapp",[358,28660,28661,28664,28667],{},[403,28662,28663],{"align":23823},"ADD",[403,28665,28666],{"align":23823},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[403,28668,28669],{"align":23823},"ADD archive.tar.gz \u002Fdata\u002F",[358,28671,28672,28675,28678],{},[403,28673,28674],{"align":23823},"WORKDIR",[403,28676,28677],{"align":23823},"设置工作目录",[403,28679,28680],{"align":23823},"WORKDIR \u002Fopt",[358,28682,28683,28686,28689],{},[403,28684,28685],{"align":23823},"CMD",[403,28687,28688],{"align":23823},"设置容器启动时默认命令（可被 docker run 覆盖）",[403,28690,28691,28692],{"align":23823},"CMD ",[204,28693,28694],{},"“node”, “index.js”",[358,28696,28697,28700,28703],{},[403,28698,28699],{"align":23823},"ENTRYPOINT",[403,28701,28702],{"align":23823},"设置容器启动时固定命令（通常用于 CLI 工具等）",[403,28704,28705,28706],{"align":23823},"ENTRYPOINT ",[204,28707,28708],{},"“python3”",[358,28710,28711,28714,28717],{},[403,28712,28713],{"align":23823},"EXPOSE",[403,28715,28716],{"align":23823},"声明镜像内服务监听的端口（不会自动映射）",[403,28718,28719],{"align":23823},"EXPOSE 80",[358,28721,28722,28725,28728],{},[403,28723,28724],{"align":23823},"VOLUME",[403,28726,28727],{"align":23823},"声明数据卷挂载点",[403,28729,28730,28731],{"align":23823},"VOLUME ",[204,28732,28733],{},"“\u002Fdata”",[358,28735,28736,28739,28742],{},[403,28737,28738],{"align":23823},"USER",[403,28740,28741],{"align":23823},"设置后续命令执行的用户",[403,28743,28744],{"align":23823},"USER appuser",[358,28746,28747,28750,28753],{},[403,28748,28749],{"align":23823},"ONBUILD",[403,28751,28752],{"align":23823},"当镜像作为其他镜像基础镜像时触发的构建指令",[403,28754,28755],{"align":23823},"ONBUILD COPY . \u002Fsrc",[358,28757,28758,28761,28764],{},[403,28759,28760],{"align":23823},"SHELL",[403,28762,28763],{"align":23823},"更改默认 shell，比如将 sh -c 改为 bash -c",[403,28765,28766,28767],{"align":23823},"SHELL ",[204,28768,28769],{},"“\u002Fbin\u002Fbash”, “-c”",[358,28771,28772,28775,28778],{},[403,28773,28774],{"align":23823},"HEALTHCHECK",[403,28776,28777],{"align":23823},"定义容器运行时的健康检查命令",[403,28779,28780,28781],{"align":23823},"`HEALTHCHECK CMD curl –fail ",[62,28782,28783],{"href":28783,"rel":28784},"http:\u002F\u002Flocalhost:8080",[66],[358,28786,28787,28790,28793],{},[403,28788,28789],{"align":23823},"STOPSIGNAL",[403,28791,28792],{"align":23823},"容器停止时发送的信号",[403,28794,28795],{"align":23823},"STOPSIGNAL SIGKILL",[49,28797,28799],{"id":28798},"_62自己创建容器","6.2.自己创建容器",[22085,28801,28803],{"id":28802},"_621手动创建","6.2.1.手动创建",[19,28805,28806],{},"在x86电脑上编译x86的：",[196,28808,28810],{"className":23909,"code":28809,"language":23911,"meta":125,"style":125},"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",[81,28811,28812,28828,28832,28845,28849,28862,28866,28879,28883,28896,28900],{"__ignoreMap":125},[204,28813,28814,28816,28819,28822,28825],{"class":206,"line":207},[204,28815,26639],{"class":2049},[204,28817,28818],{"class":319}," build",[204,28820,28821],{"class":263}," -t",[204,28823,28824],{"class":319}," ros-melodic-cuda118-cudnn8-bionic:latest",[204,28826,28827],{"class":319}," .\n",[204,28829,28830],{"class":206,"line":126},[204,28831,2486],{"emptyLinePlaceholder":135},[204,28833,28834,28836,28838,28840,28843],{"class":206,"line":131},[204,28835,26639],{"class":2049},[204,28837,28818],{"class":319},[204,28839,28821],{"class":263},[204,28841,28842],{"class":319}," ros-noetic-focal:latest",[204,28844,28827],{"class":319},[204,28846,28847],{"class":206,"line":1281},[204,28848,2486],{"emptyLinePlaceholder":135},[204,28850,28851,28853,28855,28857,28860],{"class":206,"line":1287},[204,28852,26639],{"class":2049},[204,28854,28818],{"class":319},[204,28856,28821],{"class":263},[204,28858,28859],{"class":319}," ros-humble-jammy:latest",[204,28861,28827],{"class":319},[204,28863,28864],{"class":206,"line":1301},[204,28865,2486],{"emptyLinePlaceholder":135},[204,28867,28868,28870,28872,28874,28877],{"class":206,"line":1307},[204,28869,26639],{"class":2049},[204,28871,28818],{"class":319},[204,28873,28821],{"class":263},[204,28875,28876],{"class":319}," ros-jazzy-noble:latest",[204,28878,28827],{"class":319},[204,28880,28881],{"class":206,"line":1398},[204,28882,2486],{"emptyLinePlaceholder":135},[204,28884,28885,28887,28889,28891,28894],{"class":206,"line":1404},[204,28886,26639],{"class":2049},[204,28888,28818],{"class":319},[204,28890,28821],{"class":263},[204,28892,28893],{"class":319}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[204,28895,28827],{"class":319},[204,28897,28898],{"class":206,"line":1416},[204,28899,2486],{"emptyLinePlaceholder":135},[204,28901,28902,28904,28906,28908,28911],{"class":206,"line":1698},[204,28903,26639],{"class":2049},[204,28905,28818],{"class":319},[204,28907,28821],{"class":263},[204,28909,28910],{"class":319}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[204,28912,28827],{"class":319},[19,28914,28915],{},[23,28916],{"alt":125,"src":28917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28919,28920],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28922,28923],{},[23,28924],{"alt":125,"src":28925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28927,28928],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[161,28930,28931],{},[71,28932,28933],{},"创建 Docker Hub 账户",[19,28935,28936],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[161,28938,28939],{"start":126},[71,28940,28941],{},"登录 Docker Hub",[19,28943,28944],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[196,28946,28948],{"className":23909,"code":28947,"language":23911,"meta":125,"style":125},"docker login\n",[81,28949,28950],{"__ignoreMap":125},[204,28951,28952,28954],{"class":206,"line":207},[204,28953,26639],{"class":2049},[204,28955,28956],{"class":319}," login\n",[19,28958,28959],{},"输入你的 Docker Hub 用户名和密码进行验证。",[161,28961,28962],{},[71,28963,28964],{},"为你的镜像打标签",[19,28966,28967,28968,28971],{},"Docker Hub 使用 ",[81,28969,28970],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[196,28973,28975],{"className":23909,"code":28974,"language":23911,"meta":125,"style":125},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[81,28976,28977],{"__ignoreMap":125},[204,28978,28979,28981,28984,28986,28989,28992,28995,28997],{"class":206,"line":207},[204,28980,26639],{"class":2049},[204,28982,28983],{"class":319}," tag",[204,28985,28876],{"class":319},[204,28987,28988],{"class":210}," \u003C",[204,28990,28991],{"class":319},"你的用户",[204,28993,28994],{"class":214},"名",[204,28996,1173],{"class":210},[204,28998,28999],{"class":319},"\u002Fros-jazzy-noble:latest\n",[19,29001,29002,29003,29006],{},"例如，如果你的 Docker Hub 用户名是 ",[81,29004,29005],{},"tungchiahui","，你应该执行：",[196,29008,29010],{"className":23909,"code":29009,"language":23911,"meta":125,"style":125},"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",[81,29011,29012,29023,29027,29038,29042,29053,29057,29068,29072],{"__ignoreMap":125},[204,29013,29014,29016,29018,29020],{"class":206,"line":207},[204,29015,26639],{"class":2049},[204,29017,28983],{"class":319},[204,29019,28842],{"class":319},[204,29021,29022],{"class":319}," tungchiahui\u002Fros-noetic-focal:latest\n",[204,29024,29025],{"class":206,"line":126},[204,29026,2486],{"emptyLinePlaceholder":135},[204,29028,29029,29031,29033,29035],{"class":206,"line":131},[204,29030,26639],{"class":2049},[204,29032,28983],{"class":319},[204,29034,28859],{"class":319},[204,29036,29037],{"class":319}," tungchiahui\u002Fros-humble-jammy:latest\n",[204,29039,29040],{"class":206,"line":1281},[204,29041,2486],{"emptyLinePlaceholder":135},[204,29043,29044,29046,29048,29050],{"class":206,"line":1287},[204,29045,26639],{"class":2049},[204,29047,28983],{"class":319},[204,29049,28876],{"class":319},[204,29051,29052],{"class":319}," tungchiahui\u002Fros-jazzy-noble:latest\n",[204,29054,29055],{"class":206,"line":1301},[204,29056,2486],{"emptyLinePlaceholder":135},[204,29058,29059,29061,29063,29065],{"class":206,"line":1307},[204,29060,26639],{"class":2049},[204,29062,28983],{"class":319},[204,29064,28893],{"class":319},[204,29066,29067],{"class":319}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[204,29069,29070],{"class":206,"line":1398},[204,29071,2486],{"emptyLinePlaceholder":135},[204,29073,29074,29076,29078,29080],{"class":206,"line":1404},[204,29075,26639],{"class":2049},[204,29077,28983],{"class":319},[204,29079,28910],{"class":319},[204,29081,29082],{"class":319}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[161,29084,29085],{"start":126},[71,29086,29087],{},"推送镜像到 Docker Hub",[19,29089,29090],{},"使用以下命令将镜像推送到 Docker Hub：",[196,29092,29094],{"className":23909,"code":29093,"language":23911,"meta":125,"style":125},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[81,29095,29096],{"__ignoreMap":125},[204,29097,29098,29100,29103,29105,29107,29109,29111],{"class":206,"line":207},[204,29099,26639],{"class":2049},[204,29101,29102],{"class":319}," push",[204,29104,28988],{"class":210},[204,29106,28991],{"class":319},[204,29108,28994],{"class":214},[204,29110,1173],{"class":210},[204,29112,29113],{"class":319},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29115,14720],{},[196,29117,29119],{"className":23909,"code":29118,"language":23911,"meta":125,"style":125},"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",[81,29120,29121,29129,29133,29141,29145,29153,29157,29166,29170,29178,29182],{"__ignoreMap":125},[204,29122,29123,29125,29127],{"class":206,"line":207},[204,29124,26639],{"class":2049},[204,29126,29102],{"class":319},[204,29128,29022],{"class":319},[204,29130,29131],{"class":206,"line":126},[204,29132,2486],{"emptyLinePlaceholder":135},[204,29134,29135,29137,29139],{"class":206,"line":131},[204,29136,26639],{"class":2049},[204,29138,29102],{"class":319},[204,29140,29037],{"class":319},[204,29142,29143],{"class":206,"line":1281},[204,29144,2486],{"emptyLinePlaceholder":135},[204,29146,29147,29149,29151],{"class":206,"line":1287},[204,29148,26639],{"class":2049},[204,29150,29102],{"class":319},[204,29152,29052],{"class":319},[204,29154,29155],{"class":206,"line":1301},[204,29156,2486],{"emptyLinePlaceholder":135},[204,29158,29159,29161,29163],{"class":206,"line":1307},[204,29160,26639],{"class":2049},[204,29162,29102],{"class":319},[204,29164,29165],{"class":319}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[204,29167,29168],{"class":206,"line":1398},[204,29169,2486],{"emptyLinePlaceholder":135},[204,29171,29172,29174,29176],{"class":206,"line":1404},[204,29173,26639],{"class":2049},[204,29175,29102],{"class":319},[204,29177,29082],{"class":319},[204,29179,29180],{"class":206,"line":1416},[204,29181,2486],{"emptyLinePlaceholder":135},[204,29183,29184,29186,29188],{"class":206,"line":1698},[204,29185,26639],{"class":2049},[204,29187,29102],{"class":319},[204,29189,29190],{"class":319}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[161,29192,29193],{"start":131},[71,29194,29195],{},"验证推送成功",[19,29197,29198],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29200,29201],{},[30,29202,3870],{},[68,29204,29205,29208],{},[71,29206,29207],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[71,29209,29210],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29212,29213],{},[23,29214],{"alt":125,"src":29215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29217,29218],{},[23,29219],{"alt":125,"src":29220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22085,29222,29224],{"id":29223},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29226,29227,29228,29231,29232,29235],{},"如果您想在 ",[30,29229,29230],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[30,29233,29234],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29237,29238,29239],{},"1. ",[30,29240,29241],{},"启用 Docker 跨平台构建",[19,29243,29244],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29246,29247],{},"第一步：启用 buildx（只需执行一次）",[196,29249,29251],{"className":23909,"code":29250,"language":23911,"meta":125,"style":125},"docker buildx create --name multiarch_builder --use\n",[81,29252,29253],{"__ignoreMap":125},[204,29254,29255,29257,29260,29263,29266,29269],{"class":206,"line":207},[204,29256,26639],{"class":2049},[204,29258,29259],{"class":319}," buildx",[204,29261,29262],{"class":319}," create",[204,29264,29265],{"class":263}," --name",[204,29267,29268],{"class":319}," multiarch_builder",[204,29270,29271],{"class":263}," --use\n",[19,29273,29274],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29276,29277],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[196,29279,29281],{"className":23909,"code":29280,"language":23911,"meta":125,"style":125},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[81,29282,29283],{"__ignoreMap":125},[204,29284,29285,29287,29289,29291,29294,29297,29300,29303],{"class":206,"line":207},[204,29286,26639],{"class":2049},[204,29288,27316],{"class":319},[204,29290,27319],{"class":263},[204,29292,29293],{"class":263}," --privileged",[204,29295,29296],{"class":319}," multiarch\u002Fqemu-user-static",[204,29298,29299],{"class":263}," --reset",[204,29301,29302],{"class":263}," -p",[204,29304,29305],{"class":319}," yes\n",[19,29307,29308],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29310,29311],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[196,29313,29315],{"className":23909,"code":29314,"language":23911,"meta":125,"style":125},"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",[81,29316,29317,29359,29363,29368,29378,29388,29397,29403,29407,29411,29421,29429,29438,29444,29448,29452,29462,29470,29479,29485,29489,29493,29503,29511,29520,29526,29530,29534,29544,29552,29561,29567,29571,29575,29585,29593,29602,29608,29612,29616,29626,29634,29643,29649,29653,29657,29667,29675,29684,29690,29694,29698,29708,29716,29725,29731,29735,29739,29750,29758,29767,29773],{"__ignoreMap":125},[204,29318,29319,29321,29323,29325,29328,29331,29333,29335,29338,29340,29342,29344,29346,29349,29352,29354,29357],{"class":206,"line":207},[204,29320,26639],{"class":2049},[204,29322,29259],{"class":319},[204,29324,28818],{"class":319},[204,29326,29327],{"class":263}," --platform",[204,29329,29330],{"class":319}," linux\u002Famd64,linux\u002Farm64",[204,29332,28821],{"class":263},[204,29334,28988],{"class":210},[204,29336,29337],{"class":319},"你的镜像",[204,29339,28994],{"class":214},[204,29341,1173],{"class":210},[204,29343,1072],{"class":319},[204,29345,1123],{"class":210},[204,29347,29348],{"class":319},"标",[204,29350,29351],{"class":214},"签",[204,29353,1173],{"class":210},[204,29355,29356],{"class":263}," --push",[204,29358,28827],{"class":319},[204,29360,29361],{"class":206,"line":126},[204,29362,2486],{"emptyLinePlaceholder":135},[204,29364,29365],{"class":206,"line":131},[204,29366,29367],{"class":273},"# 例子：\n",[204,29369,29370,29372,29374,29376],{"class":206,"line":1281},[204,29371,26639],{"class":2049},[204,29373,29259],{"class":319},[204,29375,28818],{"class":319},[204,29377,24765],{"class":263},[204,29379,29380,29383,29386],{"class":206,"line":1287},[204,29381,29382],{"class":214},"--platform ",[204,29384,29385],{"class":319},"linux\u002Famd64,linux\u002Farm64",[204,29387,24765],{"class":263},[204,29389,29390,29392,29395],{"class":206,"line":1301},[204,29391,28821],{"class":263},[204,29393,29394],{"class":319}," tungchiahui\u002Fros:noetic-focal",[204,29396,24765],{"class":263},[204,29398,29399,29401],{"class":206,"line":1307},[204,29400,29356],{"class":263},[204,29402,24765],{"class":263},[204,29404,29405],{"class":206,"line":1398},[204,29406,28827],{"class":319},[204,29408,29409],{"class":206,"line":1404},[204,29410,2486],{"emptyLinePlaceholder":135},[204,29412,29413,29415,29417,29419],{"class":206,"line":1416},[204,29414,26639],{"class":2049},[204,29416,29259],{"class":319},[204,29418,28818],{"class":319},[204,29420,24765],{"class":263},[204,29422,29423,29425,29427],{"class":206,"line":1698},[204,29424,29382],{"class":214},[204,29426,29385],{"class":319},[204,29428,24765],{"class":263},[204,29430,29431,29433,29436],{"class":206,"line":1703},[204,29432,28821],{"class":263},[204,29434,29435],{"class":319}," tungchiahui\u002Fros:humble-jammy",[204,29437,24765],{"class":263},[204,29439,29440,29442],{"class":206,"line":1709},[204,29441,29356],{"class":263},[204,29443,24765],{"class":263},[204,29445,29446],{"class":206,"line":1714},[204,29447,28827],{"class":319},[204,29449,29450],{"class":206,"line":1728},[204,29451,2486],{"emptyLinePlaceholder":135},[204,29453,29454,29456,29458,29460],{"class":206,"line":1733},[204,29455,26639],{"class":2049},[204,29457,29259],{"class":319},[204,29459,28818],{"class":319},[204,29461,24765],{"class":263},[204,29463,29464,29466,29468],{"class":206,"line":1739},[204,29465,29382],{"class":214},[204,29467,29385],{"class":319},[204,29469,24765],{"class":263},[204,29471,29472,29474,29477],{"class":206,"line":1760},[204,29473,28821],{"class":263},[204,29475,29476],{"class":319}," tungchiahui\u002Fros:jazzy-noble",[204,29478,24765],{"class":263},[204,29480,29481,29483],{"class":206,"line":1765},[204,29482,29356],{"class":263},[204,29484,24765],{"class":263},[204,29486,29487],{"class":206,"line":1779},[204,29488,28827],{"class":319},[204,29490,29491],{"class":206,"line":1784},[204,29492,2486],{"emptyLinePlaceholder":135},[204,29494,29495,29497,29499,29501],{"class":206,"line":1813},[204,29496,26406],{"class":2049},[204,29498,29259],{"class":319},[204,29500,28818],{"class":319},[204,29502,24765],{"class":263},[204,29504,29505,29507,29509],{"class":206,"line":1818},[204,29506,29382],{"class":214},[204,29508,29385],{"class":319},[204,29510,24765],{"class":263},[204,29512,29513,29515,29518],{"class":206,"line":1835},[204,29514,28821],{"class":263},[204,29516,29517],{"class":319}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[204,29519,24765],{"class":263},[204,29521,29522,29524],{"class":206,"line":1840},[204,29523,29356],{"class":263},[204,29525,24765],{"class":263},[204,29527,29528],{"class":206,"line":1845},[204,29529,28827],{"class":319},[204,29531,29532],{"class":206,"line":1850},[204,29533,2486],{"emptyLinePlaceholder":135},[204,29535,29536,29538,29540,29542],{"class":206,"line":1864},[204,29537,26639],{"class":2049},[204,29539,29259],{"class":319},[204,29541,28818],{"class":319},[204,29543,24765],{"class":263},[204,29545,29546,29548,29550],{"class":206,"line":1869},[204,29547,29382],{"class":214},[204,29549,29385],{"class":319},[204,29551,24765],{"class":263},[204,29553,29554,29556,29559],{"class":206,"line":2663},[204,29555,28821],{"class":263},[204,29557,29558],{"class":319}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[204,29560,24765],{"class":263},[204,29562,29563,29565],{"class":206,"line":2677},[204,29564,29356],{"class":263},[204,29566,24765],{"class":263},[204,29568,29569],{"class":206,"line":2685},[204,29570,28827],{"class":319},[204,29572,29573],{"class":206,"line":2690},[204,29574,2486],{"emptyLinePlaceholder":135},[204,29576,29577,29579,29581,29583],{"class":206,"line":2696},[204,29578,26406],{"class":2049},[204,29580,29259],{"class":319},[204,29582,28818],{"class":319},[204,29584,24765],{"class":263},[204,29586,29587,29589,29591],{"class":206,"line":2702},[204,29588,29382],{"class":214},[204,29590,29385],{"class":319},[204,29592,24765],{"class":263},[204,29594,29595,29597,29600],{"class":206,"line":2707},[204,29596,28821],{"class":263},[204,29598,29599],{"class":319}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[204,29601,24765],{"class":263},[204,29603,29604,29606],{"class":206,"line":8035},[204,29605,29356],{"class":263},[204,29607,24765],{"class":263},[204,29609,29610],{"class":206,"line":8059},[204,29611,28827],{"class":319},[204,29613,29614],{"class":206,"line":8064},[204,29615,2486],{"emptyLinePlaceholder":135},[204,29617,29618,29620,29622,29624],{"class":206,"line":8070},[204,29619,26639],{"class":2049},[204,29621,29259],{"class":319},[204,29623,28818],{"class":319},[204,29625,24765],{"class":263},[204,29627,29628,29630,29632],{"class":206,"line":8097},[204,29629,29382],{"class":214},[204,29631,29385],{"class":319},[204,29633,24765],{"class":263},[204,29635,29636,29638,29641],{"class":206,"line":8102},[204,29637,28821],{"class":263},[204,29639,29640],{"class":319}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[204,29642,24765],{"class":263},[204,29644,29645,29647],{"class":206,"line":8108},[204,29646,29356],{"class":263},[204,29648,24765],{"class":263},[204,29650,29651],{"class":206,"line":8120},[204,29652,28827],{"class":319},[204,29654,29655],{"class":206,"line":8132},[204,29656,2486],{"emptyLinePlaceholder":135},[204,29658,29659,29661,29663,29665],{"class":206,"line":8144},[204,29660,26639],{"class":2049},[204,29662,29259],{"class":319},[204,29664,28818],{"class":319},[204,29666,24765],{"class":263},[204,29668,29669,29671,29673],{"class":206,"line":9803},[204,29670,29382],{"class":214},[204,29672,29385],{"class":319},[204,29674,24765],{"class":263},[204,29676,29677,29679,29682],{"class":206,"line":9828},[204,29678,28821],{"class":263},[204,29680,29681],{"class":319}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[204,29683,24765],{"class":263},[204,29685,29686,29688],{"class":206,"line":9851},[204,29687,29356],{"class":263},[204,29689,24765],{"class":263},[204,29691,29692],{"class":206,"line":9875},[204,29693,28827],{"class":319},[204,29695,29696],{"class":206,"line":9880},[204,29697,2486],{"emptyLinePlaceholder":135},[204,29699,29700,29702,29704,29706],{"class":206,"line":9885},[204,29701,26406],{"class":2049},[204,29703,29259],{"class":319},[204,29705,28818],{"class":319},[204,29707,24765],{"class":263},[204,29709,29710,29712,29714],{"class":206,"line":9890},[204,29711,29382],{"class":214},[204,29713,29385],{"class":319},[204,29715,24765],{"class":263},[204,29717,29718,29720,29723],{"class":206,"line":9899},[204,29719,28821],{"class":263},[204,29721,29722],{"class":319}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[204,29724,24765],{"class":263},[204,29726,29727,29729],{"class":206,"line":9904},[204,29728,29356],{"class":263},[204,29730,24765],{"class":263},[204,29732,29733],{"class":206,"line":9910},[204,29734,28827],{"class":319},[204,29736,29737],{"class":206,"line":9931},[204,29738,2486],{"emptyLinePlaceholder":135},[204,29740,29741,29744,29746,29748],{"class":206,"line":9937},[204,29742,29743],{"class":2049},"  docker",[204,29745,29259],{"class":319},[204,29747,28818],{"class":319},[204,29749,24765],{"class":263},[204,29751,29752,29754,29756],{"class":206,"line":9951},[204,29753,29382],{"class":214},[204,29755,29385],{"class":319},[204,29757,24765],{"class":263},[204,29759,29760,29762,29765],{"class":206,"line":9957},[204,29761,28821],{"class":263},[204,29763,29764],{"class":319}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[204,29766,24765],{"class":263},[204,29768,29769,29771],{"class":206,"line":9984},[204,29770,29356],{"class":263},[204,29772,24765],{"class":263},[204,29774,29775],{"class":206,"line":9993},[204,29776,28827],{"class":319},[19,29778,29779],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29781,29782],{},[23,29783],{"alt":125,"src":29784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29786,29787],{},[23,29788],{"alt":125,"src":29789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22085,29791,29793],{"id":29792},"_623清除构建缓存","6.2.3.清除构建缓存",[196,29795,29797],{"className":23909,"code":29796,"language":23911,"meta":125,"style":125},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[81,29798,29799,29804],{"__ignoreMap":125},[204,29800,29801],{"class":206,"line":207},[204,29802,29803],{"class":273},"# 清理BuildKit构建缓存\n",[204,29805,29806,29808,29811,29814],{"class":206,"line":126},[204,29807,26639],{"class":2049},[204,29809,29810],{"class":319}," builder",[204,29812,29813],{"class":319}," prune",[204,29815,29816],{"class":263}," -f\n",[19,29818,29819],{},[23,29820],{"alt":125,"src":29821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[49,29823,29825],{"id":29824},"_63补充","6.3.补充",[22085,29827,29829],{"id":29828},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29831,29832],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29834,29835],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29837,29838],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[196,29840,29842],{"className":23909,"code":29841,"language":23911,"meta":125,"style":125},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[81,29843,29844,29851],{"__ignoreMap":125},[204,29845,29846,29848],{"class":206,"line":207},[204,29847,27456],{"class":2049},[204,29849,29850],{"class":319}," nginx\n",[204,29852,29853,29855,29858,29861,29863],{"class":206,"line":126},[204,29854,28641],{"class":2049},[204,29856,29857],{"class":319}," echo",[204,29859,29860],{"class":319}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[204,29862,26308],{"class":210},[204,29864,29865],{"class":319}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29867,29868],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29870,29871],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[196,29873,29875],{"className":23909,"code":29874,"language":23911,"meta":125,"style":125},"docker build -t nginx:tuling .\n",[81,29876,29877],{"__ignoreMap":125},[204,29878,29879,29881,29883,29885,29888],{"class":206,"line":207},[204,29880,26639],{"class":2049},[204,29882,28818],{"class":319},[204,29884,28821],{"class":263},[204,29886,29887],{"class":319}," nginx:tuling",[204,29889,28827],{"class":319},[19,29891,29892],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29894,29895],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[196,29897,29899],{"className":23909,"code":29898,"language":23911,"meta":125,"style":125},"docker run -d -p 92:80 nginx:tuling\n",[81,29900,29901],{"__ignoreMap":125},[204,29902,29903,29905,29907,29910,29912,29915],{"class":206,"line":207},[204,29904,26639],{"class":2049},[204,29906,27316],{"class":319},[204,29908,29909],{"class":263}," -d",[204,29911,29302],{"class":263},[204,29913,29914],{"class":319}," 92:80",[204,29916,29917],{"class":319}," nginx:tuling\n",[19,29919,29920,29921],{},"4、访问 ",[62,29922,29925],{"href":29923,"rel":29924},"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",[66],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29927,29928],{},[23,29929],{"alt":125,"src":29930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29932,29933],{},[23,29934],{"alt":125,"src":29935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22085,29937,29939],{"id":29938},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,29941,29942],{},"只需要知道大体流程即可",[19,29944,29945],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,29947,29948],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,29950,29951],{},"2、在Dockerfile中添加以下内容",[196,29953,29955],{"className":26177,"code":29954,"language":26179,"meta":125,"style":125},"# 基于哪个镜像\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",[81,29956,29957,29962,29967,29972,29977,29982,29987,29992],{"__ignoreMap":125},[204,29958,29959],{"class":206,"line":207},[204,29960,29961],{},"# 基于哪个镜像\n",[204,29963,29964],{"class":206,"line":126},[204,29965,29966],{},"From java:8\n",[204,29968,29969],{"class":206,"line":131},[204,29970,29971],{},"# 复制文件到容器\n",[204,29973,29974],{"class":206,"line":1281},[204,29975,29976],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[204,29978,29979],{"class":206,"line":1287},[204,29980,29981],{},"# 声明需要暴露的端口\n",[204,29983,29984],{"class":206,"line":1301},[204,29985,29986],{},"EXPOSE 8877\n",[204,29988,29989],{"class":206,"line":1307},[204,29990,29991],{},"# 配置容器启动后执行的命令\n",[204,29993,29994],{"class":206,"line":1398},[204,29995,29996],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,29998,29999],{},"3、使用docker build命令构建镜像",[196,30001,30003],{"className":23909,"code":30002,"language":23911,"meta":125,"style":125},"docker build -t tulingmall-member:0.0.5 .\n",[81,30004,30005],{"__ignoreMap":125},[204,30006,30007,30009,30011,30013,30016],{"class":206,"line":207},[204,30008,26639],{"class":2049},[204,30010,28818],{"class":319},[204,30012,28821],{"class":263},[204,30014,30015],{"class":319}," tulingmall-member:0.0.5",[204,30017,28827],{"class":319},[19,30019,30020],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30022,30023],{},[23,30024],{"alt":125,"src":30025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30027,30028],{},"4、启动镜像，加-d可在后台启动",[196,30030,30032],{"className":23909,"code":30031,"language":23911,"meta":125,"style":125},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[81,30033,30034],{"__ignoreMap":125},[204,30035,30036,30038,30040,30042,30044,30047],{"class":206,"line":207},[204,30037,26639],{"class":2049},[204,30039,27316],{"class":319},[204,30041,29909],{"class":263},[204,30043,29302],{"class":263},[204,30045,30046],{"class":319}," 8877:8877",[204,30048,30049],{"class":319}," tulingmall-member:0.0.5\n",[19,30051,30052],{},"加上JVM参数：",[196,30054,30056],{"className":23909,"code":30055,"language":23911,"meta":125,"style":125},"# --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",[81,30057,30058,30063,30078,30088,30097,30104],{"__ignoreMap":125},[204,30059,30060],{"class":206,"line":207},[204,30061,30062],{"class":273},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[204,30064,30065,30067,30069,30072,30074,30076],{"class":206,"line":126},[204,30066,26639],{"class":2049},[204,30068,27316],{"class":319},[204,30070,30071],{"class":263},"  -d",[204,30073,29302],{"class":263},[204,30075,30046],{"class":319},[204,30077,24765],{"class":263},[204,30079,30080,30082,30085],{"class":206,"line":131},[204,30081,28214],{"class":214},[204,30083,30084],{"class":319},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[204,30086,30087],{"class":263},"  \\\n",[204,30089,30090,30092,30095],{"class":206,"line":1281},[204,30091,28214],{"class":214},[204,30093,30094],{"class":319},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[204,30096,30087],{"class":263},[204,30098,30099,30102],{"class":206,"line":1287},[204,30100,30101],{"class":214},"--cap-add=SYS_PTRACE  ",[204,30103,26261],{"class":263},[204,30105,30106],{"class":206,"line":1301},[204,30107,30108],{"class":214},"tulingmall-member:0.0.5\n",[19,30110,30111],{},"5、访问会员服务接口",[19,30113,30114],{},[23,30115],{"alt":125,"src":30116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22085,30118,30120],{"id":30119},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30122,30123],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30125,30126,30127],{},"阿里云docker镜像仓库：",[62,30128,30129],{"href":30129,"rel":30130},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[66],[19,30132,30133],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30135,30136],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30138,30139],{},[23,30140],{"alt":125,"src":30141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30143,30144],{},"要把镜像推送到镜像仓库",[196,30146,30148],{"className":23909,"code":30147,"language":23911,"meta":125,"style":125},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[81,30149,30150],{"__ignoreMap":125},[204,30151,30152,30154,30156,30158],{"class":206,"line":207},[204,30153,26639],{"class":2049},[204,30155,28983],{"class":319},[204,30157,30015],{"class":319},[204,30159,30160],{"class":319}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30162,30163],{},"最后将镜像推送到远程仓库",[196,30165,30167],{"className":23909,"code":30166,"language":23911,"meta":125,"style":125},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[81,30168,30169],{"__ignoreMap":125},[204,30170,30171,30173,30175],{"class":206,"line":207},[204,30172,26639],{"class":2049},[204,30174,29102],{"class":319},[204,30176,30160],{"class":319},[5213,30178,30179],{},"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":125,"searchDepth":126,"depth":126,"links":30181},[30182,30183,30184],{"id":28569,"depth":131,"text":28570},{"id":28798,"depth":131,"text":28799},{"id":29824,"depth":131,"text":29825},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28561,"description":125},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30191,"title":30192,"body":30193,"description":125,"extension":133,"meta":30336,"navigation":135,"path":30337,"seo":30338,"stem":30339,"__hash__":30340},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30194,"toc":30334},[30195,30198,30203,30208,30211,30216,30221,30224,30229,30234,30237,30242,30245,30248,30251,30254,30257,30260,30280,30302,30305,30308,30328,30331],[10,30196,30192],{"id":30197},"_7vscode远程开发",[161,30199,30200],{},[71,30201,30202],{},"插件1：微软Docker工具",[19,30204,30205],{},[23,30206],{"alt":125,"src":30207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30209,30210],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30212,30213],{},[23,30214],{"alt":125,"src":30215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[161,30217,30218],{"start":126},[71,30219,30220],{},"插件2：微软Docker远程开发工具",[19,30222,30223],{},"下面这是远程开发的插件。",[19,30225,30226],{},[23,30227],{"alt":125,"src":30228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30230,30231],{},[23,30232],{"alt":125,"src":30233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30235,30236],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30238,30239],{},[23,30240],{"alt":125,"src":30241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30243,30244],{},"安装完拓展之后，vscode进行链接：",[19,30246,30247],{},"1.按ctrl+shift+p",[19,30249,30250],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30252,30253],{},"3.选择目前运行的容器",[19,30255,30256],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30258,30259],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[196,30261,30263],{"className":23909,"code":30262,"language":23911,"meta":125,"style":125},"docker run -v 主机目录:容器目录 image-name\n",[81,30264,30265],{"__ignoreMap":125},[204,30266,30267,30269,30271,30274,30277],{"class":206,"line":207},[204,30268,26639],{"class":2049},[204,30270,27316],{"class":319},[204,30272,30273],{"class":263}," -v",[204,30275,30276],{"class":319}," 主机目录:容器目录",[204,30278,30279],{"class":319}," image-name\n",[196,30281,30283],{"className":23909,"code":30282,"language":23911,"meta":125,"style":125},"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",[81,30284,30285],{"__ignoreMap":125},[204,30286,30287,30289,30291,30294,30296,30299],{"class":206,"line":207},[204,30288,26639],{"class":2049},[204,30290,27316],{"class":319},[204,30292,30293],{"class":263}," -it",[204,30295,30273],{"class":263},[204,30297,30298],{"class":319}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[204,30300,30301],{"class":319}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30303,30304],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30306,30307],{},"查看挂载情况：",[196,30309,30311],{"className":23909,"code":30310,"language":23911,"meta":125,"style":125},"mount | grep -i project\n",[81,30312,30313],{"__ignoreMap":125},[204,30314,30315,30318,30320,30323,30325],{"class":206,"line":207},[204,30316,30317],{"class":2049},"mount",[204,30319,25196],{"class":210},[204,30321,30322],{"class":2049}," grep",[204,30324,26516],{"class":263},[204,30326,30327],{"class":319}," project\n",[19,30329,30330],{},"也可以通过ls来进行查看",[5213,30332,30333],{},"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":125,"searchDepth":126,"depth":126,"links":30335},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30192,"description":125},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30342,"title":30343,"body":30344,"description":132,"extension":133,"meta":30348,"navigation":135,"path":30350,"seo":30351,"stem":30352,"__hash__":30353},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30345,"toc":30346},[],{"title":125,"searchDepth":126,"depth":126,"links":30347},[],{"category":30349},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30343,"description":132},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30355,"title":30356,"body":30357,"description":132,"extension":133,"meta":30361,"navigation":135,"path":30362,"seo":30363,"stem":30364,"__hash__":30365},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30358,"toc":30359},[],{"title":125,"searchDepth":126,"depth":126,"links":30360},[],{"category":30349},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30356,"description":132},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30367,"title":30368,"body":30369,"description":132,"extension":133,"meta":30662,"navigation":135,"path":30663,"seo":30664,"stem":30665,"__hash__":30666},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30370,"toc":30660},[30371,30374,30382,30397,30402,30453,30456,30462,30649,30654,30657],[10,30372,30368],{"id":30373},"_1验证深度学习环境",[19,30375,30376,30377],{},"关于环境的安装，看",[62,30378,30381],{"href":30379,"rel":30380},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[66],"Pytorch-->深度学习",[19,30383,30384,30385,30388,30389,30392,30393,30396],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[81,30386,30387],{},"pytorch-cuda=12.4"," 是一个“ ",[30,30390,30391],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[30,30394,30395],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30398,30399],{},[23,30400],{"alt":125,"src":30401},"\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",[196,30403,30405],{"className":23909,"code":30404,"language":23911,"meta":125,"style":125},"# 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",[81,30406,30407,30412],{"__ignoreMap":125},[204,30408,30409],{"class":206,"line":207},[204,30410,30411],{"class":273},"# CUDA 12.4\n",[204,30413,30414,30417,30419,30422,30425,30428,30431,30434,30436,30439,30442,30445,30448,30450],{"class":206,"line":126},[204,30415,30416],{"class":2049},"conda",[204,30418,23921],{"class":319},[204,30420,30421],{"class":319}," pytorch==",[204,30423,30424],{"class":263},"2.5.1",[204,30426,30427],{"class":319}," torchvision==",[204,30429,30430],{"class":263},"0.20.1",[204,30432,30433],{"class":319}," torchaudio==",[204,30435,30424],{"class":263},[204,30437,30438],{"class":319}," pytorch-cuda=",[204,30440,30441],{"class":263},"12.4",[204,30443,30444],{"class":263}," -c",[204,30446,30447],{"class":319}," pytorch",[204,30449,30444],{"class":263},[204,30451,30452],{"class":319}," nvidia\n",[19,30454,30455],{},"）：",[19,30457,30458],{},[62,30459,30460],{"href":30460,"rel":30461},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[66],[196,30463,30467],{"className":30464,"code":30465,"language":30466,"meta":125,"style":125},"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",[81,30468,30469,30474,30482,30487,30497,30513,30518,30528,30565,30572,30584,30600,30605,30615,30627,30637],{"__ignoreMap":125},[204,30470,30471],{"class":206,"line":207},[204,30472,30473],{"class":273},"# 对深度学习环境进行测试\n",[204,30475,30476,30479],{"class":206,"line":126},[204,30477,30478],{"class":210},"import",[204,30480,30481],{"class":214}," torch\n",[204,30483,30484],{"class":206,"line":131},[204,30485,30486],{"class":273},"# 查看cuda是否被激活\n",[204,30488,30489,30492,30494],{"class":206,"line":1281},[204,30490,30491],{"class":214},"flag",[204,30493,260],{"class":210},[204,30495,30496],{"class":214},"torch.cuda.is_available()\n",[204,30498,30499,30502,30504,30507,30510],{"class":206,"line":1287},[204,30500,30501],{"class":263},"print",[204,30503,215],{"class":214},[204,30505,30506],{"class":319},"\"cuda:\"",[204,30508,30509],{"class":214},", flag)   ",[204,30511,30512],{"class":273},"#返回true的话说明被激活\n",[204,30514,30515],{"class":206,"line":1301},[204,30516,30517],{"class":273},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[204,30519,30520,30523,30525],{"class":206,"line":1307},[204,30521,30522],{"class":214},"ngpu",[204,30524,260],{"class":210},[204,30526,30527],{"class":263},"1\n",[204,30529,30530,30533,30535,30538,30541,30543,30546,30549,30552,30554,30556,30558,30560,30563],{"class":206,"line":1398},[204,30531,30532],{"class":214},"device",[204,30534,260],{"class":210},[204,30536,30537],{"class":214},"torch.device(",[204,30539,30540],{"class":319},"\"cuda:0\"",[204,30542,1790],{"class":210},[204,30544,30545],{"class":214},"(torch.cuda.is_available() ",[204,30547,30548],{"class":210},"and",[204,30550,30551],{"class":214}," ngpu",[204,30553,1173],{"class":210},[204,30555,405],{"class":263},[204,30557,13801],{"class":214},[204,30559,1787],{"class":210},[204,30561,30562],{"class":319}," \"cpu\"",[204,30564,221],{"class":214},[204,30566,30567,30569],{"class":206,"line":1404},[204,30568,30501],{"class":263},[204,30570,30571],{"class":214},"(device)\n",[204,30573,30574,30576,30579,30581],{"class":206,"line":1416},[204,30575,30501],{"class":263},[204,30577,30578],{"class":214},"(torch.cuda.get_device_name(",[204,30580,405],{"class":263},[204,30582,30583],{"class":214},"))\n",[204,30585,30586,30588,30591,30593,30595,30597],{"class":206,"line":1698},[204,30587,30501],{"class":263},[204,30589,30590],{"class":214},"(torch.rand(",[204,30592,286],{"class":263},[204,30594,591],{"class":214},[204,30596,286],{"class":263},[204,30598,30599],{"class":214},").cuda())\n",[204,30601,30602],{"class":206,"line":1703},[204,30603,30604],{"class":273},"# 查看cuda和cudnn的版本\n",[204,30606,30607,30610,30612],{"class":206,"line":1709},[204,30608,30609],{"class":214},"cuda_version",[204,30611,260],{"class":210},[204,30613,30614],{"class":214},"torch.version.cuda\n",[204,30616,30617,30619,30621,30624],{"class":206,"line":1714},[204,30618,30501],{"class":263},[204,30620,215],{"class":214},[204,30622,30623],{"class":319},"\"cuda version\"",[204,30625,30626],{"class":214},",cuda_version)\n",[204,30628,30629,30632,30634],{"class":206,"line":1728},[204,30630,30631],{"class":214},"cudnn_version",[204,30633,260],{"class":210},[204,30635,30636],{"class":214},"torch.backends.cudnn.version()\n",[204,30638,30639,30641,30643,30646],{"class":206,"line":1733},[204,30640,30501],{"class":263},[204,30642,215],{"class":214},[204,30644,30645],{"class":319},"\"cudnn version\"",[204,30647,30648],{"class":214},",cudnn_version)\n",[19,30650,30651],{},[23,30652],{"alt":125,"src":30653},"\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",[19,30655,30656],{},"cuda:0 指的是一块显卡",[5213,30658,30659],{},"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":125,"searchDepth":126,"depth":126,"links":30661},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30368,"description":132},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30668,"title":30669,"body":30670,"description":132,"extension":133,"meta":50474,"navigation":135,"path":50475,"seo":50476,"stem":50477,"__hash__":50478},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30671,"toc":50468},[30672,30675,30679,30683,30686,30691,30696,30699,30704,30709,30714,30717,30721,30726,30730,30735,30738,30743,30746,30749,30752,30755,30760,30763,30768,30773,30778,30783,30786,30790,30793,30798,31402,31407,31410,31415,31418,31421,31885,31888,31891,31894,31897,33948,33951,33956,33961,34756,34759,34764,35542,35546,37205,37209,37923,37927,37931,37936,37941,37946,37949,37954,37959,37964,37969,37974,37978,37983,39265,39270,39273,39276,39279,39434,39437,39440,40656,40661,41356,41360,41364,41369,41374,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41517,41522,41527,41531,41535,41538,43016,43020,44667,44671,45365,45369,45372,45375,45919,45922,45926,45929,47326,47330,47333,47911,49698,49702,49705,50465],[10,30673,30669],{"id":30674},"_2经典神经网络",[49,30676,30678],{"id":30677},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22085,30680,30682],{"id":30681},"_211原理介绍","2.1.1.原理介绍",[19,30684,30685],{},"LeNet-5",[161,30687,30688],{},[71,30689,30690],{},"原理",[19,30692,30693],{},[23,30694],{"alt":125,"src":30695},"\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",[19,30697,30698],{},"B是batch批次；C是channel通道",[161,30700,30701],{"start":126},[71,30702,30703],{},"网络参数详细",[19,30705,30706],{},[23,30707],{"alt":125,"src":30708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,30710,30711],{},[23,30712],{"alt":125,"src":30713},"\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",[19,30715,30716],{},"AlexNet",[161,30718,30719],{},[71,30720,30690],{},[19,30722,30723],{},[23,30724],{"alt":125,"src":30725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[161,30727,30728],{"start":126},[71,30729,30703],{},[19,30731,30732],{},[23,30733],{"alt":125,"src":30734},"\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",[19,30736,30737],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30739,30740],{},[23,30741],{"alt":125,"src":30742},"\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",[19,30744,30745],{},"数据处理中的图像增强操作:",[19,30747,30748],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30750,30751],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30753,30754],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30756,30757],{},[23,30758],{"alt":125,"src":30759},"\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",[19,30761,30762],{},"提升网络精确度的方法：LRN正则化",[19,30764,30765],{},[23,30766],{"alt":125,"src":30767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,30769,30770],{},[23,30771],{"alt":125,"src":30772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[161,30774,30775],{"start":131},[71,30776,30777],{},"AlexNet的总结",[19,30779,30780],{},[23,30781],{"alt":125,"src":30782},"\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",[19,30784,30785],{},"比LeNet模型要深一丢丢",[22085,30787,30789],{"id":30788},"_212代码实现","2.1.2.代码实现",[19,30791,30792],{},"（1）LeNet",[161,30794,30795],{},[71,30796,30797],{},"模型搭建",[196,30799,30801],{"className":30464,"code":30800,"language":30466,"meta":125,"style":125},"# 导入库\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",[81,30802,30803,30808,30814,30819,30832,30837,30849,30853,30873,30878,30883,30894,30899,30918,30922,30927,30976,30988,30993,31022,31057,31084,31089,31101,31106,31126,31145,31164,31168,31173,31183,31200,31211,31226,31237,31248,31263,31278,31289,31296,31300,31314,31319,31342,31347,31352,31357,31361,31366,31371,31381],{"__ignoreMap":125},[204,30804,30805],{"class":206,"line":207},[204,30806,30807],{"class":273},"# 导入库\n",[204,30809,30810,30812],{"class":206,"line":126},[204,30811,30478],{"class":210},[204,30813,30481],{"class":214},[204,30815,30816],{"class":206,"line":131},[204,30817,30818],{"class":273},"# 导入神经网络层\n",[204,30820,30821,30824,30827,30829],{"class":206,"line":1281},[204,30822,30823],{"class":210},"from",[204,30825,30826],{"class":214}," torch ",[204,30828,30478],{"class":210},[204,30830,30831],{"class":214}," nn\n",[204,30833,30834],{"class":206,"line":1287},[204,30835,30836],{"class":273},"# 导入展示神经网络参数的包\n",[204,30838,30839,30841,30844,30846],{"class":206,"line":1301},[204,30840,30823],{"class":210},[204,30842,30843],{"class":214}," torchsummary ",[204,30845,30478],{"class":210},[204,30847,30848],{"class":214}," summary\n",[204,30850,30851],{"class":206,"line":1307},[204,30852,2486],{"emptyLinePlaceholder":135},[204,30854,30855,30857,30860,30862,30865,30867,30870],{"class":206,"line":1398},[204,30856,14781],{"class":210},[204,30858,30859],{"class":2049}," LeNet",[204,30861,215],{"class":214},[204,30863,30864],{"class":2049},"nn",[204,30866,771],{"class":214},[204,30868,30869],{"class":2049},"Module",[204,30871,30872],{"class":214},"):\n",[204,30874,30875],{"class":206,"line":1404},[204,30876,30877],{"class":273},"    # 模型初始化:\n",[204,30879,30880],{"class":206,"line":1416},[204,30881,30882],{"class":273},"    # 定义一些网络层和激活函数\n",[204,30884,30885,30888,30891],{"class":206,"line":1698},[204,30886,30887],{"class":210},"    def",[204,30889,30890],{"class":263}," __init__",[204,30892,30893],{"class":214},"(self):\n",[204,30895,30896],{"class":206,"line":1703},[204,30897,30898],{"class":273},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[204,30900,30901,30904,30907,30910,30913,30916],{"class":206,"line":1709},[204,30902,30903],{"class":263},"        super",[204,30905,30906],{"class":214},"(LeNet,",[204,30908,30909],{"class":263},"self",[204,30911,30912],{"class":214},").",[204,30914,30915],{"class":263},"__init__",[204,30917,2062],{"class":214},[204,30919,30920],{"class":206,"line":1714},[204,30921,2486],{"emptyLinePlaceholder":135},[204,30923,30924],{"class":206,"line":1728},[204,30925,30926],{"class":273},"        # 定义网络层\n",[204,30928,30929,30932,30935,30937,30940,30943,30945,30947,30949,30952,30954,30956,30958,30961,30963,30965,30967,30970,30972,30974],{"class":206,"line":1733},[204,30930,30931],{"class":263},"        self",[204,30933,30934],{"class":214},".c1",[204,30936,260],{"class":210},[204,30938,30939],{"class":214},"nn.Conv2d(",[204,30941,30942],{"class":5303},"in_channels",[204,30944,260],{"class":210},[204,30946,431],{"class":263},[204,30948,591],{"class":214},[204,30950,30951],{"class":5303},"out_channels",[204,30953,260],{"class":210},[204,30955,557],{"class":263},[204,30957,591],{"class":214},[204,30959,30960],{"class":5303},"kernel_size",[204,30962,260],{"class":210},[204,30964,532],{"class":263},[204,30966,591],{"class":214},[204,30968,30969],{"class":5303},"padding",[204,30971,260],{"class":210},[204,30973,292],{"class":263},[204,30975,221],{"class":214},[204,30977,30978,30980,30983,30985],{"class":206,"line":1739},[204,30979,30931],{"class":263},[204,30981,30982],{"class":214},".sig",[204,30984,260],{"class":210},[204,30986,30987],{"class":214},"nn.Sigmoid()\n",[204,30989,30990],{"class":206,"line":1760},[204,30991,30992],{"class":273},"        # 定义池化\n",[204,30994,30995,30997,31000,31002,31005,31007,31009,31011,31013,31016,31018,31020],{"class":206,"line":1765},[204,30996,30931],{"class":263},[204,30998,30999],{"class":214},".s2",[204,31001,260],{"class":210},[204,31003,31004],{"class":214},"nn.AvgPool2d(",[204,31006,30960],{"class":5303},[204,31008,260],{"class":210},[204,31010,292],{"class":263},[204,31012,591],{"class":214},[204,31014,31015],{"class":5303},"stride",[204,31017,260],{"class":210},[204,31019,292],{"class":263},[204,31021,221],{"class":214},[204,31023,31024,31026,31029,31031,31033,31035,31037,31039,31041,31043,31045,31047,31049,31051,31053,31055],{"class":206,"line":1779},[204,31025,30931],{"class":263},[204,31027,31028],{"class":214},".c3",[204,31030,260],{"class":210},[204,31032,30939],{"class":214},[204,31034,30942],{"class":5303},[204,31036,260],{"class":210},[204,31038,557],{"class":263},[204,31040,591],{"class":214},[204,31042,30951],{"class":5303},[204,31044,260],{"class":210},[204,31046,814],{"class":263},[204,31048,591],{"class":214},[204,31050,30960],{"class":5303},[204,31052,260],{"class":210},[204,31054,532],{"class":263},[204,31056,221],{"class":214},[204,31058,31059,31061,31064,31066,31068,31070,31072,31074,31076,31078,31080,31082],{"class":206,"line":1784},[204,31060,30931],{"class":263},[204,31062,31063],{"class":214},".s4",[204,31065,260],{"class":210},[204,31067,31004],{"class":214},[204,31069,30960],{"class":5303},[204,31071,260],{"class":210},[204,31073,292],{"class":263},[204,31075,591],{"class":214},[204,31077,31015],{"class":5303},[204,31079,260],{"class":210},[204,31081,292],{"class":263},[204,31083,221],{"class":214},[204,31085,31086],{"class":206,"line":1813},[204,31087,31088],{"class":273},"        # 定义平展层\n",[204,31090,31091,31093,31096,31098],{"class":206,"line":1818},[204,31092,30931],{"class":263},[204,31094,31095],{"class":214},".flatten",[204,31097,260],{"class":210},[204,31099,31100],{"class":214},"nn.Flatten()\n",[204,31102,31103],{"class":206,"line":1835},[204,31104,31105],{"class":273},"        # 定义全连接层\n",[204,31107,31108,31110,31113,31115,31118,31120,31122,31124],{"class":206,"line":1840},[204,31109,30931],{"class":263},[204,31111,31112],{"class":214},".f5",[204,31114,260],{"class":210},[204,31116,31117],{"class":214},"nn.Linear(",[204,31119,4073],{"class":263},[204,31121,591],{"class":214},[204,31123,1030],{"class":263},[204,31125,221],{"class":214},[204,31127,31128,31130,31133,31135,31137,31139,31141,31143],{"class":206,"line":1845},[204,31129,30931],{"class":263},[204,31131,31132],{"class":214},".f6",[204,31134,260],{"class":210},[204,31136,31117],{"class":214},[204,31138,1030],{"class":263},[204,31140,591],{"class":214},[204,31142,924],{"class":263},[204,31144,221],{"class":214},[204,31146,31147,31149,31152,31154,31156,31158,31160,31162],{"class":206,"line":1850},[204,31148,30931],{"class":263},[204,31150,31151],{"class":214},".f7",[204,31153,260],{"class":210},[204,31155,31117],{"class":214},[204,31157,924],{"class":263},[204,31159,591],{"class":214},[204,31161,659],{"class":263},[204,31163,221],{"class":214},[204,31165,31166],{"class":206,"line":1864},[204,31167,2486],{"emptyLinePlaceholder":135},[204,31169,31170],{"class":206,"line":1869},[204,31171,31172],{"class":273},"    # 写工具->写前向传播\n",[204,31174,31175,31177,31180],{"class":206,"line":2663},[204,31176,30887],{"class":210},[204,31178,31179],{"class":2049}," forward",[204,31181,31182],{"class":214},"(self,x):\n",[204,31184,31185,31188,31190,31192,31195,31197],{"class":206,"line":2677},[204,31186,31187],{"class":214},"        x",[204,31189,260],{"class":210},[204,31191,30909],{"class":263},[204,31193,31194],{"class":214},".sig(",[204,31196,30909],{"class":263},[204,31198,31199],{"class":214},".c1(x))\n",[204,31201,31202,31204,31206,31208],{"class":206,"line":2685},[204,31203,31187],{"class":214},[204,31205,260],{"class":210},[204,31207,30909],{"class":263},[204,31209,31210],{"class":214},".s2(x)\n",[204,31212,31213,31215,31217,31219,31221,31223],{"class":206,"line":2690},[204,31214,31187],{"class":214},[204,31216,260],{"class":210},[204,31218,30909],{"class":263},[204,31220,31194],{"class":214},[204,31222,30909],{"class":263},[204,31224,31225],{"class":214},".c3(x))\n",[204,31227,31228,31230,31232,31234],{"class":206,"line":2696},[204,31229,31187],{"class":214},[204,31231,260],{"class":210},[204,31233,30909],{"class":263},[204,31235,31236],{"class":214},".s4(x)\n",[204,31238,31239,31241,31243,31245],{"class":206,"line":2702},[204,31240,31187],{"class":214},[204,31242,260],{"class":210},[204,31244,30909],{"class":263},[204,31246,31247],{"class":214},".flatten(x)\n",[204,31249,31250,31252,31254,31256,31258,31260],{"class":206,"line":2707},[204,31251,31187],{"class":214},[204,31253,260],{"class":210},[204,31255,30909],{"class":263},[204,31257,31194],{"class":214},[204,31259,30909],{"class":263},[204,31261,31262],{"class":214},".f5(x))\n",[204,31264,31265,31267,31269,31271,31273,31275],{"class":206,"line":8035},[204,31266,31187],{"class":214},[204,31268,260],{"class":210},[204,31270,30909],{"class":263},[204,31272,31194],{"class":214},[204,31274,30909],{"class":263},[204,31276,31277],{"class":214},".f6(x))\n",[204,31279,31280,31282,31284,31286],{"class":206,"line":8059},[204,31281,31187],{"class":214},[204,31283,260],{"class":210},[204,31285,30909],{"class":263},[204,31287,31288],{"class":214},".f7(x)\n",[204,31290,31291,31293],{"class":206,"line":8064},[204,31292,14839],{"class":210},[204,31294,31295],{"class":214}," x\n",[204,31297,31298],{"class":206,"line":8070},[204,31299,2486],{"emptyLinePlaceholder":135},[204,31301,31302,31304,31307,31309,31312],{"class":206,"line":8097},[204,31303,1617],{"class":210},[204,31305,31306],{"class":263}," __name__",[204,31308,3035],{"class":210},[204,31310,31311],{"class":319},"\"__main__\"",[204,31313,3825],{"class":214},[204,31315,31316],{"class":206,"line":8102},[204,31317,31318],{"class":273},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[204,31320,31321,31324,31326,31328,31331,31333,31336,31338,31340],{"class":206,"line":8108},[204,31322,31323],{"class":214},"    device",[204,31325,260],{"class":210},[204,31327,30537],{"class":214},[204,31329,31330],{"class":319},"\"cuda\"",[204,31332,1790],{"class":210},[204,31334,31335],{"class":214}," torch.cuda.is_available() ",[204,31337,1787],{"class":210},[204,31339,30562],{"class":319},[204,31341,221],{"class":214},[204,31343,31344],{"class":206,"line":8120},[204,31345,31346],{"class":273},"    # 如果就是想指定用cpu用下方代码:\n",[204,31348,31349],{"class":206,"line":8132},[204,31350,31351],{"class":273},"    # device=\"cpu\"\n",[204,31353,31354],{"class":206,"line":8144},[204,31355,31356],{"class":273},"    # print(device)\n",[204,31358,31359],{"class":206,"line":9803},[204,31360,2486],{"emptyLinePlaceholder":135},[204,31362,31363],{"class":206,"line":9828},[204,31364,31365],{"class":273},"    # 实例化模型\n",[204,31367,31368],{"class":206,"line":9851},[204,31369,31370],{"class":273},"    # 将模型放到设备中去运行\n",[204,31372,31373,31376,31378],{"class":206,"line":9875},[204,31374,31375],{"class":214},"    model",[204,31377,260],{"class":210},[204,31379,31380],{"class":214},"LeNet().to(device)\n",[204,31382,31383,31386,31389,31391,31393,31395,31397,31399],{"class":206,"line":9880},[204,31384,31385],{"class":263},"    print",[204,31387,31388],{"class":214},"(summary(model,(",[204,31390,431],{"class":263},[204,31392,591],{"class":214},[204,31394,1114],{"class":263},[204,31396,591],{"class":214},[204,31398,1114],{"class":263},[204,31400,31401],{"class":214},")))\n",[19,31403,31404],{},[23,31405],{"alt":125,"src":31406},"\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",[19,31408,31409],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[161,31411,31412],{"start":126},[71,31413,31414],{},"训练",[19,31416,31417],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31419,31420],{},"在训练之前可以将数据展示看一下",[196,31422,31424],{"className":30464,"code":31423,"language":30466,"meta":125,"style":125},"# 建立画图的函数，用于展示数据\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",[81,31425,31426,31431,31436,31448,31460,31473,31478,31490,31495,31507,31512,31524,31528,31532,31553,31565,31570,31591,31602,31606,31611,31629,31640,31645,31656,31661,31672,31676,31681,31696,31709,31714,31719,31732,31745,31758,31763,31767,31772,31792,31809,31829,31842,31855,31865,31880],{"__ignoreMap":125},[204,31427,31428],{"class":206,"line":207},[204,31429,31430],{"class":273},"# 建立画图的函数，用于展示数据\n",[204,31432,31433],{"class":206,"line":126},[204,31434,31435],{"class":273},"# torchvision中包含很多内置的数据集\n",[204,31437,31438,31440,31443,31445],{"class":206,"line":131},[204,31439,30823],{"class":210},[204,31441,31442],{"class":214}," sklearn.externals.array_api_compat.torch ",[204,31444,30478],{"class":210},[204,31446,31447],{"class":214}," squeeze\n",[204,31449,31450,31452,31455,31457],{"class":206,"line":1281},[204,31451,30823],{"class":210},[204,31453,31454],{"class":214}," torchvision.datasets ",[204,31456,30478],{"class":210},[204,31458,31459],{"class":214}," FashionMNIST\n",[204,31461,31462,31464,31467,31470],{"class":206,"line":1287},[204,31463,30478],{"class":210},[204,31465,31466],{"class":214}," numpy ",[204,31468,31469],{"class":210},"as",[204,31471,31472],{"class":214}," np\n",[204,31474,31475],{"class":206,"line":1301},[204,31476,31477],{"class":273},"# 引入处理数据集的包\n",[204,31479,31480,31482,31485,31487],{"class":206,"line":1307},[204,31481,30823],{"class":210},[204,31483,31484],{"class":214}," torchvision ",[204,31486,30478],{"class":210},[204,31488,31489],{"class":214}," transforms\n",[204,31491,31492],{"class":206,"line":1398},[204,31493,31494],{"class":273},"# 从torch库中引入数据处理的包\n",[204,31496,31497,31499,31502,31504],{"class":206,"line":1404},[204,31498,30478],{"class":210},[204,31500,31501],{"class":214}," torch.utils.data ",[204,31503,31469],{"class":210},[204,31505,31506],{"class":214}," Data\n",[204,31508,31509],{"class":206,"line":1416},[204,31510,31511],{"class":273},"# 导入画图的库\n",[204,31513,31514,31516,31519,31521],{"class":206,"line":1698},[204,31515,30478],{"class":210},[204,31517,31518],{"class":214}," matplotlib.pyplot ",[204,31520,31469],{"class":210},[204,31522,31523],{"class":214}," plt\n",[204,31525,31526],{"class":206,"line":1703},[204,31527,2486],{"emptyLinePlaceholder":135},[204,31529,31530],{"class":206,"line":1709},[204,31531,2486],{"emptyLinePlaceholder":135},[204,31533,31534,31537,31539,31542,31545,31547,31550],{"class":206,"line":1714},[204,31535,31536],{"class":214},"train_data",[204,31538,260],{"class":210},[204,31540,31541],{"class":214},"FashionMNIST(",[204,31543,31544],{"class":5303},"root",[204,31546,260],{"class":210},[204,31548,31549],{"class":319},"'.\u002Fdata'",[204,31551,31552],{"class":214},",\n",[204,31554,31555,31558,31560,31563],{"class":206,"line":1728},[204,31556,31557],{"class":5303},"                        train",[204,31559,260],{"class":210},[204,31561,31562],{"class":263},"True",[204,31564,31552],{"class":214},[204,31566,31567],{"class":206,"line":1733},[204,31568,31569],{"class":273},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[204,31571,31572,31575,31577,31580,31583,31585,31588],{"class":206,"line":1739},[204,31573,31574],{"class":5303},"                        transform",[204,31576,260],{"class":210},[204,31578,31579],{"class":214},"transforms.Compose([transforms.Resize(",[204,31581,31582],{"class":5303},"size",[204,31584,260],{"class":210},[204,31586,31587],{"class":263},"224",[204,31589,31590],{"class":214},"),transforms.ToTensor()]),\n",[204,31592,31593,31596,31598,31600],{"class":206,"line":1760},[204,31594,31595],{"class":5303},"                        download",[204,31597,260],{"class":210},[204,31599,31562],{"class":263},[204,31601,221],{"class":214},[204,31603,31604],{"class":206,"line":1765},[204,31605,2486],{"emptyLinePlaceholder":135},[204,31607,31608],{"class":206,"line":1779},[204,31609,31610],{"class":273},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[204,31612,31613,31616,31618,31621,31624,31626],{"class":206,"line":1784},[204,31614,31615],{"class":214},"train_loader",[204,31617,260],{"class":210},[204,31619,31620],{"class":214},"Data.DataLoader(",[204,31622,31623],{"class":5303},"dataset",[204,31625,260],{"class":210},[204,31627,31628],{"class":214},"train_data,\n",[204,31630,31631,31634,31636,31638],{"class":206,"line":1813},[204,31632,31633],{"class":5303},"                             batch_size",[204,31635,260],{"class":210},[204,31637,417],{"class":263},[204,31639,31552],{"class":214},[204,31641,31642],{"class":206,"line":1818},[204,31643,31644],{"class":273},"                             # 数据是否打乱\n",[204,31646,31647,31650,31652,31654],{"class":206,"line":1835},[204,31648,31649],{"class":5303},"                             shuffle",[204,31651,260],{"class":210},[204,31653,31562],{"class":263},[204,31655,31552],{"class":214},[204,31657,31658],{"class":206,"line":1840},[204,31659,31660],{"class":273},"                             # 规定加载数据的进程\n",[204,31662,31663,31666,31668,31670],{"class":206,"line":1845},[204,31664,31665],{"class":5303},"                             num_workers",[204,31667,260],{"class":210},[204,31669,405],{"class":263},[204,31671,221],{"class":214},[204,31673,31674],{"class":206,"line":1850},[204,31675,2486],{"emptyLinePlaceholder":135},[204,31677,31678],{"class":206,"line":1864},[204,31679,31680],{"class":273},"# 获得一个batch的数据\n",[204,31682,31683,31685,31688,31690,31693],{"class":206,"line":1869},[204,31684,3111],{"class":210},[204,31686,31687],{"class":214}," step,(b_x,b_y) ",[204,31689,26129],{"class":210},[204,31691,31692],{"class":263}," enumerate",[204,31694,31695],{"class":214},"(train_loader):\n",[204,31697,31698,31700,31703,31705,31707],{"class":206,"line":2663},[204,31699,3187],{"class":210},[204,31701,31702],{"class":214}," step ",[204,31704,1173],{"class":210},[204,31706,4179],{"class":263},[204,31708,3825],{"class":214},[204,31710,31711],{"class":206,"line":2677},[204,31712,31713],{"class":210},"        break\n",[204,31715,31716],{"class":206,"line":2685},[204,31717,31718],{"class":273},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[204,31720,31721,31724,31726,31729],{"class":206,"line":2690},[204,31722,31723],{"class":214},"batch_x",[204,31725,260],{"class":210},[204,31727,31728],{"class":214},"b_x.squeeze().numpy()  ",[204,31730,31731],{"class":273},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[204,31733,31734,31737,31739,31742],{"class":206,"line":2696},[204,31735,31736],{"class":214},"batch_y",[204,31738,260],{"class":210},[204,31740,31741],{"class":214},"b_y.numpy()   ",[204,31743,31744],{"class":273},"#将张量转换成功numpy数组\n",[204,31746,31747,31750,31752,31755],{"class":206,"line":2702},[204,31748,31749],{"class":214},"class_label",[204,31751,260],{"class":210},[204,31753,31754],{"class":214},"train_data.classes  ",[204,31756,31757],{"class":273},"#训练集标签\n",[204,31759,31760],{"class":206,"line":2707},[204,31761,31762],{"class":273},"# print(class_label)\n",[204,31764,31765],{"class":206,"line":8035},[204,31766,2486],{"emptyLinePlaceholder":135},[204,31768,31769],{"class":206,"line":8059},[204,31770,31771],{"class":273},"# 可视化一个batch的图像\n",[204,31773,31774,31777,31780,31782,31784,31786,31788,31790],{"class":206,"line":8064},[204,31775,31776],{"class":214},"plt.figure(",[204,31778,31779],{"class":5303},"figsize",[204,31781,260],{"class":210},[204,31783,215],{"class":214},[204,31785,711],{"class":263},[204,31787,591],{"class":214},[204,31789,532],{"class":263},[204,31791,30583],{"class":214},[204,31793,31794,31796,31799,31801,31804,31806],{"class":206,"line":8070},[204,31795,3111],{"class":210},[204,31797,31798],{"class":214}," ii ",[204,31800,26129],{"class":210},[204,31802,31803],{"class":214}," np.arange(",[204,31805,7445],{"class":263},[204,31807,31808],{"class":214},"(batch_y)):\n",[204,31810,31811,31814,31816,31818,31820,31823,31825,31827],{"class":206,"line":8097},[204,31812,31813],{"class":214},"    plt.subplot(",[204,31815,506],{"class":263},[204,31817,591],{"class":214},[204,31819,814],{"class":263},[204,31821,31822],{"class":214},",ii ",[204,31824,694],{"class":210},[204,31826,25205],{"class":263},[204,31828,221],{"class":214},[204,31830,31831,31834,31837,31839],{"class":206,"line":8102},[204,31832,31833],{"class":214},"    plt.imshow(batch_x[ii,:,:],",[204,31835,31836],{"class":5303},"cmap",[204,31838,260],{"class":210},[204,31840,31841],{"class":214},"plt.cm.gray)\n",[204,31843,31844,31847,31849,31851,31853],{"class":206,"line":8108},[204,31845,31846],{"class":214},"    plt.title(class_label[batch_y[ii]],",[204,31848,31582],{"class":5303},[204,31850,260],{"class":210},[204,31852,659],{"class":263},[204,31854,221],{"class":214},[204,31856,31857,31860,31863],{"class":206,"line":8120},[204,31858,31859],{"class":214},"    plt.axis(",[204,31861,31862],{"class":319},"\"off\"",[204,31864,221],{"class":214},[204,31866,31867,31870,31873,31875,31878],{"class":206,"line":8132},[204,31868,31869],{"class":214},"    plt.subplots_adjust(",[204,31871,31872],{"class":5303},"wspace",[204,31874,260],{"class":210},[204,31876,31877],{"class":263},"0.05",[204,31879,221],{"class":214},[204,31881,31882],{"class":206,"line":8144},[204,31883,31884],{"class":214},"plt.show()\n",[19,31886,31887],{},"用matplotlib进行展示的过程可以后续再补",[19,31889,31890],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31892,31893],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31895,31896],{},"模型训练：",[196,31898,31900],{"className":30464,"code":31899,"language":30466,"meta":125,"style":125},"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",[81,31901,31902,31909,31916,31920,31932,31938,31949,31959,31969,31979,31989,31994,32006,32016,32020,32024,32029,32040,32053,32064,32081,32092,32131,32147,32159,32170,32175,32186,32202,32213,32224,32235,32242,32246,32251,32256,32260,32265,32275,32296,32300,32304,32309,32314,32319,32339,32343,32348,32358,32362,32367,32376,32381,32386,32391,32401,32405,32409,32414,32419,32429,32434,32444,32449,32458,32463,32472,32477,32486,32490,32495,32505,32509,32513,32518,32533,32561,32576,32580,32585,32590,32599,32604,32613,32618,32627,32632,32641,32646,32655,32660,32669,32674,32687,32692,32702,32707,32717,32723,32729,32735,32741,32752,32758,32778,32784,32795,32801,32807,32813,32819,32825,32831,32837,32857,32863,32879,32885,32899,32905,32920,32926,32935,32941,32950,32956,32962,32971,32977,32988,32994,33013,33019,33030,33036,33056,33072,33078,33092,33098,33104,33115,33121,33127,33137,33143,33154,33160,33170,33175,33181,33230,33277,33282,33288,33307,33313,33333,33339,33345,33355,33360,33366,33382,33427,33433,33439,33445,33456,33462,33468,33474,33492,33506,33515,33524,33533,33542,33548,33554,33562,33567,33573,33584,33590,33610,33616,33622,33628,33645,33651,33657,33663,33669,33675,33702,33726,33732,33738,33744,33755,33766,33772,33789,33812,33835,33841,33846,33855,33865,33871,33876,33882,33895,33901,33912,33923,33942],{"__ignoreMap":125},[204,31903,31904,31906],{"class":206,"line":207},[204,31905,30478],{"class":210},[204,31907,31908],{"class":214}," copy\n",[204,31910,31911,31913],{"class":206,"line":126},[204,31912,30478],{"class":210},[204,31914,31915],{"class":214}," time\n",[204,31917,31918],{"class":206,"line":131},[204,31919,2486],{"emptyLinePlaceholder":135},[204,31921,31922,31924,31927,31929],{"class":206,"line":1281},[204,31923,30478],{"class":210},[204,31925,31926],{"class":214}," pandas ",[204,31928,31469],{"class":210},[204,31930,31931],{"class":214}," pd\n",[204,31933,31934,31936],{"class":206,"line":1287},[204,31935,30478],{"class":210},[204,31937,30481],{"class":214},[204,31939,31940,31942,31944,31946],{"class":206,"line":1301},[204,31941,30823],{"class":210},[204,31943,31501],{"class":214},[204,31945,30478],{"class":210},[204,31947,31948],{"class":214}," Dataset\n",[204,31950,31951,31953,31955,31957],{"class":206,"line":1307},[204,31952,30823],{"class":210},[204,31954,31454],{"class":214},[204,31956,30478],{"class":210},[204,31958,31459],{"class":214},[204,31960,31961,31963,31965,31967],{"class":206,"line":1398},[204,31962,30823],{"class":210},[204,31964,31484],{"class":214},[204,31966,30478],{"class":210},[204,31968,31489],{"class":214},[204,31970,31971,31973,31975,31977],{"class":206,"line":1404},[204,31972,30478],{"class":210},[204,31974,31501],{"class":214},[204,31976,31469],{"class":210},[204,31978,31506],{"class":214},[204,31980,31981,31983,31985,31987],{"class":206,"line":1416},[204,31982,30478],{"class":210},[204,31984,31518],{"class":214},[204,31986,31469],{"class":210},[204,31988,31523],{"class":214},[204,31990,31991],{"class":206,"line":1698},[204,31992,31993],{"class":273},"# 导入模型\n",[204,31995,31996,31998,32001,32003],{"class":206,"line":1703},[204,31997,30823],{"class":210},[204,31999,32000],{"class":214}," model ",[204,32002,30478],{"class":210},[204,32004,32005],{"class":214}," LeNet\n",[204,32007,32008,32010,32012,32014],{"class":206,"line":1709},[204,32009,30823],{"class":210},[204,32011,30826],{"class":214},[204,32013,30478],{"class":210},[204,32015,30831],{"class":214},[204,32017,32018],{"class":206,"line":1714},[204,32019,2486],{"emptyLinePlaceholder":135},[204,32021,32022],{"class":206,"line":1728},[204,32023,2486],{"emptyLinePlaceholder":135},[204,32025,32026],{"class":206,"line":1733},[204,32027,32028],{"class":273},"# 处理训练集与验证集函数--->划分数据集\n",[204,32030,32031,32034,32037],{"class":206,"line":1739},[204,32032,32033],{"class":210},"def",[204,32035,32036],{"class":2049}," train_val_data_process",[204,32038,32039],{"class":214},"():\n",[204,32041,32042,32045,32047,32049,32051],{"class":206,"line":1760},[204,32043,32044],{"class":214},"    train_data",[204,32046,260],{"class":210},[204,32048,31541],{"class":214},[204,32050,31549],{"class":319},[204,32052,31552],{"class":214},[204,32054,32055,32058,32060,32062],{"class":206,"line":1765},[204,32056,32057],{"class":5303},"                            train",[204,32059,260],{"class":210},[204,32061,31562],{"class":263},[204,32063,31552],{"class":214},[204,32065,32066,32069,32071,32073,32075,32077,32079],{"class":206,"line":1779},[204,32067,32068],{"class":5303},"                            transform",[204,32070,260],{"class":210},[204,32072,31579],{"class":214},[204,32074,31582],{"class":5303},[204,32076,260],{"class":210},[204,32078,1114],{"class":263},[204,32080,31590],{"class":214},[204,32082,32083,32086,32088,32090],{"class":206,"line":1784},[204,32084,32085],{"class":5303},"                            download",[204,32087,260],{"class":210},[204,32089,31562],{"class":263},[204,32091,221],{"class":214},[204,32093,32094,32097,32099,32102,32105,32107,32110,32112,32114,32117,32119,32121,32124,32126,32128],{"class":206,"line":1813},[204,32095,32096],{"class":214},"    train_data,val_data",[204,32098,260],{"class":210},[204,32100,32101],{"class":214},"Data.random_split(train_data,[",[204,32103,32104],{"class":263},"round",[204,32106,215],{"class":214},[204,32108,32109],{"class":263},"0.8",[204,32111,668],{"class":210},[204,32113,7445],{"class":263},[204,32115,32116],{"class":214},"(train_data)),",[204,32118,32104],{"class":263},[204,32120,215],{"class":214},[204,32122,32123],{"class":263},"0.2",[204,32125,668],{"class":210},[204,32127,7445],{"class":263},[204,32129,32130],{"class":214},"(train_data))])\n",[204,32132,32133,32136,32138,32141,32143,32145],{"class":206,"line":1818},[204,32134,32135],{"class":214},"    train_dataloader ",[204,32137,260],{"class":210},[204,32139,32140],{"class":214}," Data.DataLoader(",[204,32142,31623],{"class":5303},[204,32144,260],{"class":210},[204,32146,31628],{"class":214},[204,32148,32149,32152,32154,32157],{"class":206,"line":1835},[204,32150,32151],{"class":5303},"                                       batch_size",[204,32153,260],{"class":210},[204,32155,32156],{"class":263},"128",[204,32158,31552],{"class":214},[204,32160,32161,32164,32166,32168],{"class":206,"line":1840},[204,32162,32163],{"class":5303},"                                       shuffle",[204,32165,260],{"class":210},[204,32167,31562],{"class":263},[204,32169,31552],{"class":214},[204,32171,32172],{"class":206,"line":1845},[204,32173,32174],{"class":273},"                                       # 规定8个进程\n",[204,32176,32177,32180,32182,32184],{"class":206,"line":1850},[204,32178,32179],{"class":5303},"                                       num_workers",[204,32181,260],{"class":210},[204,32183,608],{"class":263},[204,32185,221],{"class":214},[204,32187,32188,32191,32193,32195,32197,32199],{"class":206,"line":1864},[204,32189,32190],{"class":214},"    val_dataloader",[204,32192,260],{"class":210},[204,32194,31620],{"class":214},[204,32196,31623],{"class":5303},[204,32198,260],{"class":210},[204,32200,32201],{"class":214},"val_data,\n",[204,32203,32204,32207,32209,32211],{"class":206,"line":1869},[204,32205,32206],{"class":5303},"                                   batch_size",[204,32208,260],{"class":210},[204,32210,32156],{"class":263},[204,32212,31552],{"class":214},[204,32214,32215,32218,32220,32222],{"class":206,"line":2663},[204,32216,32217],{"class":5303},"                                   shuffle",[204,32219,260],{"class":210},[204,32221,31562],{"class":263},[204,32223,31552],{"class":214},[204,32225,32226,32229,32231,32233],{"class":206,"line":2677},[204,32227,32228],{"class":5303},"                                   num_workers",[204,32230,260],{"class":210},[204,32232,608],{"class":263},[204,32234,221],{"class":214},[204,32236,32237,32239],{"class":206,"line":2685},[204,32238,4176],{"class":210},[204,32240,32241],{"class":214}," train_dataloader,val_dataloader\n",[204,32243,32244],{"class":206,"line":2690},[204,32245,2486],{"emptyLinePlaceholder":135},[204,32247,32248],{"class":206,"line":2696},[204,32249,32250],{"class":273},"# 验证是否出错\n",[204,32252,32253],{"class":206,"line":2702},[204,32254,32255],{"class":273},"# train_val_data_process()\n",[204,32257,32258],{"class":206,"line":2707},[204,32259,2486],{"emptyLinePlaceholder":135},[204,32261,32262],{"class":206,"line":8035},[204,32263,32264],{"class":273},"# 定义模型训练函数\n",[204,32266,32267,32269,32272],{"class":206,"line":8059},[204,32268,32033],{"class":210},[204,32270,32271],{"class":2049}," train_model_process",[204,32273,32274],{"class":214},"(model,train_dataloader,val_dataloader,num_epochs):\n",[204,32276,32277,32279,32281,32283,32285,32287,32289,32291,32294],{"class":206,"line":8064},[204,32278,31323],{"class":214},[204,32280,260],{"class":210},[204,32282,30537],{"class":214},[204,32284,31330],{"class":319},[204,32286,1790],{"class":210},[204,32288,31335],{"class":214},[204,32290,1787],{"class":210},[204,32292,32293],{"class":319}," 'cpu'",[204,32295,221],{"class":214},[204,32297,32298],{"class":206,"line":8070},[204,32299,2486],{"emptyLinePlaceholder":135},[204,32301,32302],{"class":206,"line":8097},[204,32303,2486],{"emptyLinePlaceholder":135},[204,32305,32306],{"class":206,"line":8102},[204,32307,32308],{"class":273},"    # 定义优化器\n",[204,32310,32311],{"class":206,"line":8108},[204,32312,32313],{"class":273},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[204,32315,32316],{"class":206,"line":8120},[204,32317,32318],{"class":273},"    # lr为学习率\n",[204,32320,32321,32324,32326,32329,32332,32334,32337],{"class":206,"line":8132},[204,32322,32323],{"class":214},"    optimizer",[204,32325,260],{"class":210},[204,32327,32328],{"class":214},"torch.optim.Adam(model.parameters(),",[204,32330,32331],{"class":5303},"lr",[204,32333,260],{"class":210},[204,32335,32336],{"class":263},"0.001",[204,32338,221],{"class":214},[204,32340,32341],{"class":206,"line":8144},[204,32342,2486],{"emptyLinePlaceholder":135},[204,32344,32345],{"class":206,"line":9803},[204,32346,32347],{"class":273},"    # 定义损失函数使用交叉熵损失函数\n",[204,32349,32350,32353,32355],{"class":206,"line":9828},[204,32351,32352],{"class":214},"    criterion",[204,32354,260],{"class":210},[204,32356,32357],{"class":214},"nn.CrossEntropyLoss()\n",[204,32359,32360],{"class":206,"line":9851},[204,32361,2486],{"emptyLinePlaceholder":135},[204,32363,32364],{"class":206,"line":9875},[204,32365,32366],{"class":273},"    # 将模型放到GPU中进行训练\n",[204,32368,32369,32371,32373],{"class":206,"line":9880},[204,32370,31375],{"class":214},[204,32372,260],{"class":210},[204,32374,32375],{"class":214},"model.to(device)\n",[204,32377,32378],{"class":206,"line":9885},[204,32379,32380],{"class":273},"    # 复制当前模型的参数\n",[204,32382,32383],{"class":206,"line":9890},[204,32384,32385],{"class":273},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[204,32387,32388],{"class":206,"line":9899},[204,32389,32390],{"class":273},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[204,32392,32393,32396,32398],{"class":206,"line":9904},[204,32394,32395],{"class":214},"    best_model_wts",[204,32397,260],{"class":210},[204,32399,32400],{"class":214},"copy.deepcopy(model.state_dict())\n",[204,32402,32403],{"class":206,"line":9910},[204,32404,2486],{"emptyLinePlaceholder":135},[204,32406,32407],{"class":206,"line":9931},[204,32408,2486],{"emptyLinePlaceholder":135},[204,32410,32411],{"class":206,"line":9937},[204,32412,32413],{"class":273},"    # 初始化参数\n",[204,32415,32416],{"class":206,"line":9951},[204,32417,32418],{"class":273},"    # 最高准确度\n",[204,32420,32421,32424,32426],{"class":206,"line":9957},[204,32422,32423],{"class":214},"    best_acc",[204,32425,260],{"class":210},[204,32427,32428],{"class":263},"0.0\n",[204,32430,32431],{"class":206,"line":9984},[204,32432,32433],{"class":273},"    # 训练集损失列表\n",[204,32435,32436,32439,32441],{"class":206,"line":9993},[204,32437,32438],{"class":214},"    train_loss_all",[204,32440,260],{"class":210},[204,32442,32443],{"class":214},"[]\n",[204,32445,32446],{"class":206,"line":9999},[204,32447,32448],{"class":273},"    # 验证集函数列表\n",[204,32450,32451,32454,32456],{"class":206,"line":10007},[204,32452,32453],{"class":214},"    val_loss_all",[204,32455,260],{"class":210},[204,32457,32443],{"class":214},[204,32459,32460],{"class":206,"line":10012},[204,32461,32462],{"class":273},"    # 训练集准确度列表\n",[204,32464,32465,32468,32470],{"class":206,"line":16691},[204,32466,32467],{"class":214},"    train_acc_all",[204,32469,260],{"class":210},[204,32471,32443],{"class":214},[204,32473,32474],{"class":206,"line":16697},[204,32475,32476],{"class":273},"    # 验证集准确度列表\n",[204,32478,32479,32482,32484],{"class":206,"line":16720},[204,32480,32481],{"class":214},"    val_acc_all",[204,32483,260],{"class":210},[204,32485,32443],{"class":214},[204,32487,32488],{"class":206,"line":16726},[204,32489,2486],{"emptyLinePlaceholder":135},[204,32491,32492],{"class":206,"line":16749},[204,32493,32494],{"class":273},"    # 保存当前时间--->方便看每轮训练的时间\n",[204,32496,32497,32500,32502],{"class":206,"line":16763},[204,32498,32499],{"class":214},"    since",[204,32501,260],{"class":210},[204,32503,32504],{"class":214},"time.time()\n",[204,32506,32507],{"class":206,"line":16783},[204,32508,2486],{"emptyLinePlaceholder":135},[204,32510,32511],{"class":206,"line":16789},[204,32512,2486],{"emptyLinePlaceholder":135},[204,32514,32515],{"class":206,"line":16800},[204,32516,32517],{"class":273},"    # 准备工作完成--->开始训练模型\n",[204,32519,32520,32522,32525,32527,32530],{"class":206,"line":16823},[204,32521,3287],{"class":210},[204,32523,32524],{"class":214}," epoch ",[204,32526,26129],{"class":210},[204,32528,32529],{"class":263}," range",[204,32531,32532],{"class":214},"(num_epochs):\n",[204,32534,32535,32538,32540,32543,32546,32548,32550,32552,32555,32557,32559],{"class":206,"line":16845},[204,32536,32537],{"class":263},"        print",[204,32539,215],{"class":214},[204,32541,32542],{"class":319},"\"Epoch ",[204,32544,32545],{"class":263},"{}",[204,32547,797],{"class":319},[204,32549,32545],{"class":263},[204,32551,464],{"class":319},[204,32553,32554],{"class":214},".format(epoch,num_epochs",[204,32556,745],{"class":210},[204,32558,431],{"class":263},[204,32560,30583],{"class":214},[204,32562,32563,32565,32567,32570,32572,32574],{"class":206,"line":16850},[204,32564,32537],{"class":263},[204,32566,215],{"class":214},[204,32568,32569],{"class":319},"\"-\"",[204,32571,668],{"class":210},[204,32573,659],{"class":263},[204,32575,221],{"class":214},[204,32577,32578],{"class":206,"line":16856},[204,32579,2486],{"emptyLinePlaceholder":135},[204,32581,32582],{"class":206,"line":16870},[204,32583,32584],{"class":273},"        # 初始化参数\n",[204,32586,32587],{"class":206,"line":16883},[204,32588,32589],{"class":273},"        # 训练集损失函数\n",[204,32591,32592,32595,32597],{"class":206,"line":16888},[204,32593,32594],{"class":214},"        train_loss",[204,32596,260],{"class":210},[204,32598,32428],{"class":263},[204,32600,32601],{"class":206,"line":16902},[204,32602,32603],{"class":273},"        # 训练集准确度\n",[204,32605,32606,32609,32611],{"class":206,"line":16907},[204,32607,32608],{"class":214},"        train_corrects",[204,32610,260],{"class":210},[204,32612,3171],{"class":263},[204,32614,32615],{"class":206,"line":16913},[204,32616,32617],{"class":273},"        # 验证集损失函数\n",[204,32619,32620,32623,32625],{"class":206,"line":16918},[204,32621,32622],{"class":214},"        val_loss",[204,32624,260],{"class":210},[204,32626,32428],{"class":263},[204,32628,32629],{"class":206,"line":16932},[204,32630,32631],{"class":273},"        # 验证集准确度\n",[204,32633,32634,32637,32639],{"class":206,"line":16937},[204,32635,32636],{"class":214},"        val_corrects",[204,32638,260],{"class":210},[204,32640,3171],{"class":263},[204,32642,32643],{"class":206,"line":16942},[204,32644,32645],{"class":273},"        # 训练集样本数量\n",[204,32647,32648,32651,32653],{"class":206,"line":16956},[204,32649,32650],{"class":214},"        train_num",[204,32652,260],{"class":210},[204,32654,3171],{"class":263},[204,32656,32657],{"class":206,"line":16968},[204,32658,32659],{"class":273},"        # 验证集样本数量\n",[204,32661,32662,32665,32667],{"class":206,"line":16973},[204,32663,32664],{"class":214},"        val_num",[204,32666,260],{"class":210},[204,32668,3171],{"class":263},[204,32670,32671],{"class":206,"line":16986},[204,32672,32673],{"class":273},"        # 将数据放到设备,并开始训练\n",[204,32675,32676,32678,32680,32682,32684],{"class":206,"line":16991},[204,32677,3489],{"class":210},[204,32679,31687],{"class":214},[204,32681,26129],{"class":210},[204,32683,31692],{"class":263},[204,32685,32686],{"class":214},"(train_dataloader):\n",[204,32688,32689],{"class":206,"line":16996},[204,32690,32691],{"class":273},"            # 将特征放入到训练设备\n",[204,32693,32694,32697,32699],{"class":206,"line":17001},[204,32695,32696],{"class":214},"            b_x",[204,32698,260],{"class":210},[204,32700,32701],{"class":214},"b_x.to(device)\n",[204,32703,32704],{"class":206,"line":17014},[204,32705,32706],{"class":273},"            # 将标签放入到训练设备当中\n",[204,32708,32709,32712,32714],{"class":206,"line":17019},[204,32710,32711],{"class":214},"            b_y",[204,32713,260],{"class":210},[204,32715,32716],{"class":214},"b_y.to(device)\n",[204,32718,32720],{"class":206,"line":32719},98,[204,32721,32722],{"class":273},"            # 设置模型为训练模式\n",[204,32724,32726],{"class":206,"line":32725},99,[204,32727,32728],{"class":214},"            model.train()\n",[204,32730,32732],{"class":206,"line":32731},100,[204,32733,32734],{"class":273},"            # 将数据放到模型当中,开始前向传播\n",[204,32736,32738],{"class":206,"line":32737},101,[204,32739,32740],{"class":273},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[204,32742,32744,32747,32749],{"class":206,"line":32743},102,[204,32745,32746],{"class":214},"            output",[204,32748,260],{"class":210},[204,32750,32751],{"class":214},"model(b_x)\n",[204,32753,32755],{"class":206,"line":32754},103,[204,32756,32757],{"class":273},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[204,32759,32761,32764,32766,32769,32772,32774,32776],{"class":206,"line":32760},104,[204,32762,32763],{"class":214},"            pre_lab",[204,32765,260],{"class":210},[204,32767,32768],{"class":214},"torch.argmax(output,",[204,32770,32771],{"class":5303},"dim",[204,32773,260],{"class":210},[204,32775,431],{"class":263},[204,32777,221],{"class":214},[204,32779,32781],{"class":206,"line":32780},105,[204,32782,32783],{"class":273},"            # 计算每一个batch的损失函数\n",[204,32785,32787,32790,32792],{"class":206,"line":32786},106,[204,32788,32789],{"class":214},"            loss",[204,32791,260],{"class":210},[204,32793,32794],{"class":214},"criterion(output,b_y)\n",[204,32796,32798],{"class":206,"line":32797},107,[204,32799,32800],{"class":273},"            # 将梯度初始化为0\n",[204,32802,32804],{"class":206,"line":32803},108,[204,32805,32806],{"class":214},"            optimizer.zero_grad()\n",[204,32808,32810],{"class":206,"line":32809},109,[204,32811,32812],{"class":273},"            # 梯度置为0后再进行反向传播\n",[204,32814,32816],{"class":206,"line":32815},110,[204,32817,32818],{"class":214},"            loss.backward()\n",[204,32820,32822],{"class":206,"line":32821},111,[204,32823,32824],{"class":273},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[204,32826,32828],{"class":206,"line":32827},112,[204,32829,32830],{"class":214},"            optimizer.step()\n",[204,32832,32834],{"class":206,"line":32833},113,[204,32835,32836],{"class":273},"            # loss.item()指的是batch的平均损失\n",[204,32838,32840,32843,32845,32848,32850,32853,32855],{"class":206,"line":32839},114,[204,32841,32842],{"class":214},"            train_loss",[204,32844,9564],{"class":210},[204,32846,32847],{"class":214},"loss.item()",[204,32849,668],{"class":210},[204,32851,32852],{"class":214},"b_x.size(",[204,32854,405],{"class":263},[204,32856,221],{"class":214},[204,32858,32860],{"class":206,"line":32859},115,[204,32861,32862],{"class":273},"            # 计算每个批次中正确预测的数量\n",[204,32864,32866,32869,32871,32874,32876],{"class":206,"line":32865},116,[204,32867,32868],{"class":214},"            train_corrects",[204,32870,9564],{"class":210},[204,32872,32873],{"class":214},"torch.sum(pre_lab",[204,32875,3035],{"class":210},[204,32877,32878],{"class":214},"b_y.data)\n",[204,32880,32882],{"class":206,"line":32881},117,[204,32883,32884],{"class":273},"            # 计算目前为止一共处理了多少样本\n",[204,32886,32888,32891,32893,32895,32897],{"class":206,"line":32887},118,[204,32889,32890],{"class":214},"            train_num",[204,32892,9564],{"class":210},[204,32894,32852],{"class":214},[204,32896,405],{"class":263},[204,32898,221],{"class":214},[204,32900,32902],{"class":206,"line":32901},119,[204,32903,32904],{"class":273},"        # 验证数据\n",[204,32906,32908,32910,32913,32915,32917],{"class":206,"line":32907},120,[204,32909,3489],{"class":210},[204,32911,32912],{"class":214}," step ,(b_x,b_y) ",[204,32914,26129],{"class":210},[204,32916,31692],{"class":263},[204,32918,32919],{"class":214},"(val_dataloader):\n",[204,32921,32923],{"class":206,"line":32922},121,[204,32924,32925],{"class":273},"            # 将特征放到验证设备当中\n",[204,32927,32929,32931,32933],{"class":206,"line":32928},122,[204,32930,32696],{"class":214},[204,32932,260],{"class":210},[204,32934,32701],{"class":214},[204,32936,32938],{"class":206,"line":32937},123,[204,32939,32940],{"class":273},"            # 将标签放到放到训练设备当中\n",[204,32942,32944,32946,32948],{"class":206,"line":32943},124,[204,32945,32711],{"class":214},[204,32947,260],{"class":210},[204,32949,32716],{"class":214},[204,32951,32953],{"class":206,"line":32952},125,[204,32954,32955],{"class":273},"            # 开启验证模式，设置模型为评估模式\n",[204,32957,32959],{"class":206,"line":32958},126,[204,32960,32961],{"class":214},"            model.eval()\n",[204,32963,32965,32968],{"class":206,"line":32964},127,[204,32966,32967],{"class":210},"            with",[204,32969,32970],{"class":214}," torch.no_grad():\n",[204,32972,32974],{"class":206,"line":32973},128,[204,32975,32976],{"class":273},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[204,32978,32980,32983,32985],{"class":206,"line":32979},129,[204,32981,32982],{"class":214},"                output ",[204,32984,260],{"class":210},[204,32986,32987],{"class":214}," model(b_x)\n",[204,32989,32991],{"class":206,"line":32990},130,[204,32992,32993],{"class":273},"                # 查找每一行中最大值对应的下标\n",[204,32995,32997,33000,33002,33005,33007,33009,33011],{"class":206,"line":32996},131,[204,32998,32999],{"class":214},"                pre_lab ",[204,33001,260],{"class":210},[204,33003,33004],{"class":214}," torch.argmax(output, ",[204,33006,32771],{"class":5303},[204,33008,260],{"class":210},[204,33010,431],{"class":263},[204,33012,221],{"class":214},[204,33014,33016],{"class":206,"line":33015},132,[204,33017,33018],{"class":273},"                # 计算验证集上的当前 batch 损失\n",[204,33020,33022,33025,33027],{"class":206,"line":33021},133,[204,33023,33024],{"class":214},"                val_batch_loss ",[204,33026,260],{"class":210},[204,33028,33029],{"class":214}," criterion(output, b_y)\n",[204,33031,33033],{"class":206,"line":33032},134,[204,33034,33035],{"class":273},"                # 对损失函数进行累加（按样本数加权）\n",[204,33037,33039,33042,33044,33047,33049,33052,33054],{"class":206,"line":33038},135,[204,33040,33041],{"class":214},"                val_loss ",[204,33043,9564],{"class":210},[204,33045,33046],{"class":214}," val_batch_loss.item() ",[204,33048,668],{"class":210},[204,33050,33051],{"class":214}," b_x.size(",[204,33053,405],{"class":263},[204,33055,221],{"class":214},[204,33057,33059,33062,33064,33067,33069],{"class":206,"line":33058},136,[204,33060,33061],{"class":214},"                val_corrects ",[204,33063,9564],{"class":210},[204,33065,33066],{"class":214}," torch.sum(pre_lab ",[204,33068,3035],{"class":210},[204,33070,33071],{"class":214}," b_y.data)\n",[204,33073,33075],{"class":206,"line":33074},137,[204,33076,33077],{"class":273},"                # 当前用于验证的样本数量\n",[204,33079,33081,33084,33086,33088,33090],{"class":206,"line":33080},138,[204,33082,33083],{"class":214},"            val_num ",[204,33085,9564],{"class":210},[204,33087,33051],{"class":214},[204,33089,405],{"class":263},[204,33091,221],{"class":214},[204,33093,33095],{"class":206,"line":33094},139,[204,33096,33097],{"class":273},"        # 计算并保存每一次迭代的loss值和准确率\n",[204,33099,33101],{"class":206,"line":33100},140,[204,33102,33103],{"class":273},"        # 计算并保存训练集的loss值\n",[204,33105,33107,33110,33112],{"class":206,"line":33106},141,[204,33108,33109],{"class":214},"        train_loss_all.append(train_loss",[204,33111,797],{"class":210},[204,33113,33114],{"class":214},"train_num)\n",[204,33116,33118],{"class":206,"line":33117},142,[204,33119,33120],{"class":273},"        # 取双精度\n",[204,33122,33124],{"class":206,"line":33123},143,[204,33125,33126],{"class":273},"        # 计算并保存训练集的准确率\n",[204,33128,33130,33133,33135],{"class":206,"line":33129},144,[204,33131,33132],{"class":214},"        train_acc_all.append(train_corrects.double().item()",[204,33134,797],{"class":210},[204,33136,33114],{"class":214},[204,33138,33140],{"class":206,"line":33139},145,[204,33141,33142],{"class":273},"        # 计算并保存验证集的loss值\n",[204,33144,33146,33149,33151],{"class":206,"line":33145},146,[204,33147,33148],{"class":214},"        val_loss_all.append(val_loss",[204,33150,797],{"class":210},[204,33152,33153],{"class":214},"val_num)\n",[204,33155,33157],{"class":206,"line":33156},147,[204,33158,33159],{"class":273},"        # 计算并保存验证集的准确率\n",[204,33161,33163,33166,33168],{"class":206,"line":33162},148,[204,33164,33165],{"class":214},"        val_acc_all.append(val_corrects.double().item()",[204,33167,797],{"class":210},[204,33169,33153],{"class":214},[204,33171,33173],{"class":206,"line":33172},149,[204,33174,2486],{"emptyLinePlaceholder":135},[204,33176,33178],{"class":206,"line":33177},150,[204,33179,33180],{"class":273},"        # 打印训练一轮的loss值和准确率\n",[204,33182,33184,33186,33188,33190,33192,33195,33197,33200,33202,33205,33207,33209,33211,33213,33216,33218,33220,33223,33225,33227],{"class":206,"line":33183},151,[204,33185,32537],{"class":263},[204,33187,215],{"class":214},[204,33189,3678],{"class":319},[204,33191,32545],{"class":263},[204,33193,33194],{"class":319},"train loss:",[204,33196,1109],{"class":263},[204,33198,33199],{"class":210},":.4f",[204,33201,1159],{"class":263},[204,33203,33204],{"class":319}," train acc:",[204,33206,1109],{"class":263},[204,33208,33199],{"class":210},[204,33210,1159],{"class":263},[204,33212,3678],{"class":319},[204,33214,33215],{"class":214},".format(epoch,train_loss_all[",[204,33217,745],{"class":210},[204,33219,431],{"class":263},[204,33221,33222],{"class":214},"],train_acc_all[",[204,33224,745],{"class":210},[204,33226,431],{"class":263},[204,33228,33229],{"class":214},"]))\n",[204,33231,33233,33235,33237,33239,33241,33244,33246,33248,33250,33253,33255,33257,33259,33261,33264,33266,33268,33271,33273,33275],{"class":206,"line":33232},152,[204,33234,32537],{"class":263},[204,33236,215],{"class":214},[204,33238,3678],{"class":319},[204,33240,32545],{"class":263},[204,33242,33243],{"class":319},"val loss:",[204,33245,1109],{"class":263},[204,33247,33199],{"class":210},[204,33249,1159],{"class":263},[204,33251,33252],{"class":319}," val acc:",[204,33254,1109],{"class":263},[204,33256,33199],{"class":210},[204,33258,1159],{"class":263},[204,33260,3678],{"class":319},[204,33262,33263],{"class":214},".format(epoch,val_loss_all[",[204,33265,745],{"class":210},[204,33267,431],{"class":263},[204,33269,33270],{"class":214},"],val_acc_all[",[204,33272,745],{"class":210},[204,33274,431],{"class":263},[204,33276,33229],{"class":214},[204,33278,33280],{"class":206,"line":33279},153,[204,33281,2486],{"emptyLinePlaceholder":135},[204,33283,33285],{"class":206,"line":33284},154,[204,33286,33287],{"class":273},"        # 判断准确度--->保存最优模型\n",[204,33289,33291,33293,33296,33298,33300,33302,33304],{"class":206,"line":33290},155,[204,33292,2583],{"class":210},[204,33294,33295],{"class":214}," val_acc_all[",[204,33297,745],{"class":210},[204,33299,431],{"class":263},[204,33301,1153],{"class":214},[204,33303,1173],{"class":210},[204,33305,33306],{"class":214},"best_acc:\n",[204,33308,33310],{"class":206,"line":33309},156,[204,33311,33312],{"class":273},"            # 保存当前模型准确度\n",[204,33314,33316,33319,33321,33323,33326,33328,33330],{"class":206,"line":33315},157,[204,33317,33318],{"class":214},"            best_acc:",[204,33320,254],{"class":263},[204,33322,260],{"class":210},[204,33324,33325],{"class":214},"val_acc_all[",[204,33327,745],{"class":210},[204,33329,431],{"class":263},[204,33331,33332],{"class":214},"]\n",[204,33334,33336],{"class":206,"line":33335},158,[204,33337,33338],{"class":273},"            # 保存当前的准确度\n",[204,33340,33342],{"class":206,"line":33341},159,[204,33343,33344],{"class":273},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[204,33346,33348,33351,33353],{"class":206,"line":33347},160,[204,33349,33350],{"class":214},"            best_model_wts",[204,33352,260],{"class":210},[204,33354,32400],{"class":214},[204,33356,33358],{"class":206,"line":33357},161,[204,33359,2486],{"emptyLinePlaceholder":135},[204,33361,33363],{"class":206,"line":33362},162,[204,33364,33365],{"class":273},"        # 计算耗时\n",[204,33367,33369,33372,33374,33377,33379],{"class":206,"line":33368},163,[204,33370,33371],{"class":214},"        time_use",[204,33373,260],{"class":210},[204,33375,33376],{"class":214},"time.time()",[204,33378,745],{"class":210},[204,33380,33381],{"class":214},"since\n",[204,33383,33385,33387,33389,33392,33394,33397,33399,33401,33403,33405,33407,33410,33413,33416,33418,33421,33423,33425],{"class":206,"line":33384},164,[204,33386,32537],{"class":263},[204,33388,215],{"class":214},[204,33390,33391],{"class":319},"'训练和验证耗费的时间",[204,33393,1109],{"class":263},[204,33395,33396],{"class":210},":.0f",[204,33398,1159],{"class":263},[204,33400,757],{"class":319},[204,33402,1109],{"class":263},[204,33404,33396],{"class":210},[204,33406,1159],{"class":263},[204,33408,33409],{"class":319},"s'",[204,33411,33412],{"class":214},".format(time_use",[204,33414,33415],{"class":210},"\u002F\u002F",[204,33417,1120],{"class":263},[204,33419,33420],{"class":214},",time_use",[204,33422,541],{"class":210},[204,33424,1120],{"class":263},[204,33426,30583],{"class":214},[204,33428,33430],{"class":206,"line":33429},165,[204,33431,33432],{"class":273},"    # 选择最优参数\n",[204,33434,33436],{"class":206,"line":33435},166,[204,33437,33438],{"class":273},"    # 加载最高准确率下的模型参数\n",[204,33440,33442],{"class":206,"line":33441},167,[204,33443,33444],{"class":273},"    # model.load_state_dict(best_model_wts)\n",[204,33446,33448,33451,33454],{"class":206,"line":33447},168,[204,33449,33450],{"class":214},"    torch.save(model.state_dict(best_model_wts), ",[204,33452,33453],{"class":319},"'.\u002Fbest_model.pth'",[204,33455,221],{"class":214},[204,33457,33459],{"class":206,"line":33458},169,[204,33460,33461],{"class":273},"    # 或者写成\n",[204,33463,33465],{"class":206,"line":33464},170,[204,33466,33467],{"class":273},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[204,33469,33471],{"class":206,"line":33470},171,[204,33472,33473],{"class":273},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[204,33475,33477,33480,33482,33485,33488,33490],{"class":206,"line":33476},172,[204,33478,33479],{"class":214},"    train_process",[204,33481,260],{"class":210},[204,33483,33484],{"class":214},"pd.DataFrame(",[204,33486,33487],{"class":5303},"data",[204,33489,260],{"class":210},[204,33491,1632],{"class":214},[204,33493,33495,33498,33500,33503],{"class":206,"line":33494},173,[204,33496,33497],{"class":319},"        \"epoch\"",[204,33499,1072],{"class":214},[204,33501,33502],{"class":263},"range",[204,33504,33505],{"class":214},"(num_epochs),\n",[204,33507,33509,33512],{"class":206,"line":33508},174,[204,33510,33511],{"class":319},"        \"train_loss_all\"",[204,33513,33514],{"class":214},":train_loss_all,\n",[204,33516,33518,33521],{"class":206,"line":33517},175,[204,33519,33520],{"class":319},"        \"val_loss_all\"",[204,33522,33523],{"class":214},":val_loss_all,\n",[204,33525,33527,33530],{"class":206,"line":33526},176,[204,33528,33529],{"class":319},"        \"train_acc_all\"",[204,33531,33532],{"class":214},":train_acc_all,\n",[204,33534,33536,33539],{"class":206,"line":33535},177,[204,33537,33538],{"class":319},"        \"val_acc_all\"",[204,33540,33541],{"class":214},":val_acc_all\n",[204,33543,33545],{"class":206,"line":33544},178,[204,33546,33547],{"class":214},"    })\n",[204,33549,33551],{"class":206,"line":33550},179,[204,33552,33553],{"class":273},"    # 返回训练保存的过程\n",[204,33555,33557,33559],{"class":206,"line":33556},180,[204,33558,4176],{"class":210},[204,33560,33561],{"class":214}," train_process\n",[204,33563,33565],{"class":206,"line":33564},181,[204,33566,2486],{"emptyLinePlaceholder":135},[204,33568,33570],{"class":206,"line":33569},182,[204,33571,33572],{"class":273},"# 将loss值和精度按照图片的形式展示出来\n",[204,33574,33576,33578,33581],{"class":206,"line":33575},183,[204,33577,32033],{"class":210},[204,33579,33580],{"class":2049}," matplot_acc_loss",[204,33582,33583],{"class":214},"(train_process):\n",[204,33585,33587],{"class":206,"line":33586},184,[204,33588,33589],{"class":273},"    # 设置图的大小\n",[204,33591,33593,33596,33598,33600,33602,33604,33606,33608],{"class":206,"line":33592},185,[204,33594,33595],{"class":214},"    plt.figure(",[204,33597,31779],{"class":5303},[204,33599,260],{"class":210},[204,33601,215],{"class":214},[204,33603,711],{"class":263},[204,33605,591],{"class":214},[204,33607,506],{"class":263},[204,33609,30583],{"class":214},[204,33611,33613],{"class":206,"line":33612},186,[204,33614,33615],{"class":273},"    # 设置图中有几张图\n",[204,33617,33619],{"class":206,"line":33618},187,[204,33620,33621],{"class":273},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[204,33623,33625],{"class":206,"line":33624},188,[204,33626,33627],{"class":273},"    # ①loss图\n",[204,33629,33631,33633,33635,33637,33639,33641,33643],{"class":206,"line":33630},189,[204,33632,31813],{"class":214},[204,33634,431],{"class":263},[204,33636,591],{"class":214},[204,33638,292],{"class":263},[204,33640,591],{"class":214},[204,33642,431],{"class":263},[204,33644,221],{"class":214},[204,33646,33648],{"class":206,"line":33647},190,[204,33649,33650],{"class":273},"    # 补充:\n",[204,33652,33654],{"class":206,"line":33653},191,[204,33655,33656],{"class":273},"    # plt.subplot(nrows, ncols, index)\n",[204,33658,33660],{"class":206,"line":33659},192,[204,33661,33662],{"class":273},"    # nrows：行数\n",[204,33664,33666],{"class":206,"line":33665},193,[204,33667,33668],{"class":273},"    # ncols：列数\n",[204,33670,33672],{"class":206,"line":33671},194,[204,33673,33674],{"class":273},"    # index：目前选中第几个子图（从1开始）\n",[204,33676,33678,33681,33684,33687,33690,33692,33695,33697,33700],{"class":206,"line":33677},195,[204,33679,33680],{"class":214},"    plt.plot(train_process[",[204,33682,33683],{"class":319},"\"epoch\"",[204,33685,33686],{"class":214},"],train_process.train_loss_all,",[204,33688,33689],{"class":319},"'ro-'",[204,33691,591],{"class":214},[204,33693,33694],{"class":5303},"label",[204,33696,260],{"class":210},[204,33698,33699],{"class":319},"'train loss'",[204,33701,221],{"class":214},[204,33703,33705,33707,33709,33712,33715,33717,33719,33721,33724],{"class":206,"line":33704},196,[204,33706,33680],{"class":214},[204,33708,33683],{"class":319},[204,33710,33711],{"class":214},"],train_process.val_loss_all,",[204,33713,33714],{"class":319},"'bs--'",[204,33716,591],{"class":214},[204,33718,33694],{"class":5303},[204,33720,260],{"class":210},[204,33722,33723],{"class":319},"'val loss'",[204,33725,221],{"class":214},[204,33727,33729],{"class":206,"line":33728},197,[204,33730,33731],{"class":273},"    # 添加一个图例\n",[204,33733,33735],{"class":206,"line":33734},198,[204,33736,33737],{"class":214},"    plt.legend()\n",[204,33739,33741],{"class":206,"line":33740},199,[204,33742,33743],{"class":273},"    # 给轴添加标签\n",[204,33745,33747,33750,33753],{"class":206,"line":33746},200,[204,33748,33749],{"class":214},"    plt.xlabel(",[204,33751,33752],{"class":319},"'epoch'",[204,33754,221],{"class":214},[204,33756,33758,33761,33764],{"class":206,"line":33757},201,[204,33759,33760],{"class":214},"    plt.ylabel(",[204,33762,33763],{"class":319},"'loss'",[204,33765,221],{"class":214},[204,33767,33769],{"class":206,"line":33768},202,[204,33770,33771],{"class":273},"    # ②准确度图\n",[204,33773,33775,33777,33779,33781,33783,33785,33787],{"class":206,"line":33774},203,[204,33776,31813],{"class":214},[204,33778,431],{"class":263},[204,33780,591],{"class":214},[204,33782,292],{"class":263},[204,33784,591],{"class":214},[204,33786,292],{"class":263},[204,33788,221],{"class":214},[204,33790,33792,33794,33796,33799,33801,33803,33805,33807,33810],{"class":206,"line":33791},204,[204,33793,33680],{"class":214},[204,33795,33683],{"class":319},[204,33797,33798],{"class":214},"],train_process.train_acc_all,",[204,33800,33689],{"class":319},[204,33802,591],{"class":214},[204,33804,33694],{"class":5303},[204,33806,260],{"class":210},[204,33808,33809],{"class":319},"'train acc'",[204,33811,221],{"class":214},[204,33813,33815,33817,33819,33822,33824,33826,33828,33830,33833],{"class":206,"line":33814},205,[204,33816,33680],{"class":214},[204,33818,33683],{"class":319},[204,33820,33821],{"class":214},"],train_process.val_acc_all,",[204,33823,33714],{"class":319},[204,33825,591],{"class":214},[204,33827,33694],{"class":5303},[204,33829,260],{"class":210},[204,33831,33832],{"class":319},"'val acc'",[204,33834,221],{"class":214},[204,33836,33838],{"class":206,"line":33837},206,[204,33839,33840],{"class":273},"    # 添加图例\n",[204,33842,33844],{"class":206,"line":33843},207,[204,33845,33737],{"class":214},[204,33847,33849,33851,33853],{"class":206,"line":33848},208,[204,33850,33749],{"class":214},[204,33852,33683],{"class":319},[204,33854,221],{"class":214},[204,33856,33858,33860,33863],{"class":206,"line":33857},209,[204,33859,33760],{"class":214},[204,33861,33862],{"class":319},"\"acc\"",[204,33864,221],{"class":214},[204,33866,33868],{"class":206,"line":33867},210,[204,33869,33870],{"class":214},"    plt.show()\n",[204,33872,33874],{"class":206,"line":33873},211,[204,33875,2486],{"emptyLinePlaceholder":135},[204,33877,33879],{"class":206,"line":33878},212,[204,33880,33881],{"class":273},"# 正式开始训练:\n",[204,33883,33885,33887,33889,33891,33893],{"class":206,"line":33884},213,[204,33886,1617],{"class":210},[204,33888,31306],{"class":263},[204,33890,3035],{"class":210},[204,33892,31311],{"class":319},[204,33894,3825],{"class":214},[204,33896,33898],{"class":206,"line":33897},214,[204,33899,33900],{"class":273},"    # 将模型实例化\n",[204,33902,33904,33907,33909],{"class":206,"line":33903},215,[204,33905,33906],{"class":214},"    LeNet",[204,33908,260],{"class":210},[204,33910,33911],{"class":214},"LeNet()\n",[204,33913,33915,33918,33920],{"class":206,"line":33914},216,[204,33916,33917],{"class":214},"    train_dataloader,val_dataloader",[204,33919,260],{"class":210},[204,33921,33922],{"class":214},"train_val_data_process()\n",[204,33924,33926,33928,33930,33933,33936,33938,33940],{"class":206,"line":33925},217,[204,33927,33479],{"class":214},[204,33929,260],{"class":210},[204,33931,33932],{"class":214},"train_model_process(LeNet,train_dataloader,val_dataloader,",[204,33934,33935],{"class":5303},"num_epochs",[204,33937,260],{"class":210},[204,33939,913],{"class":263},[204,33941,221],{"class":214},[204,33943,33945],{"class":206,"line":33944},218,[204,33946,33947],{"class":214},"    matplot_acc_loss(train_process)\n",[19,33949,33950],{},"画图的补充点学习：",[19,33952,33953],{},[23,33954],{"alt":125,"src":33955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[161,33957,33958],{"start":131},[71,33959,33960],{},"测试",[196,33962,33964],{"className":30464,"code":33963,"language":30466,"meta":125,"style":125},"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",[81,33965,33966,33972,33982,33994,34004,34009,34019,34029,34033,34038,34047,34064,34076,34093,34104,34120,34125,34136,34147,34158,34165,34169,34174,34184,34189,34206,34214,34218,34223,34232,34241,34245,34250,34255,34260,34267,34272,34284,34294,34304,34309,34313,34318,34327,34332,34348,34353,34358,34363,34377,34382,34396,34400,34405,34420,34425,34437,34441,34446,34458,34463,34471,34476,34481,34491,34496,34505,34510,34515,34519,34524,34529,34545,34553,34558,34563,34622,34628,34633,34644,34652,34660,34664,34669,34673,34678,34686,34691,34707,34712,34722,34732],{"__ignoreMap":125},[204,33967,33968,33970],{"class":206,"line":207},[204,33969,30478],{"class":210},[204,33971,30481],{"class":214},[204,33973,33974,33976,33978,33980],{"class":206,"line":126},[204,33975,30478],{"class":210},[204,33977,31501],{"class":214},[204,33979,31469],{"class":210},[204,33981,31506],{"class":214},[204,33983,33984,33986,33989,33991],{"class":206,"line":131},[204,33985,30823],{"class":210},[204,33987,33988],{"class":214}," jupyter_client.consoleapp ",[204,33990,30478],{"class":210},[204,33992,33993],{"class":214}," classes\n",[204,33995,33996,33998,34000,34002],{"class":206,"line":1281},[204,33997,30823],{"class":210},[204,33999,31484],{"class":214},[204,34001,30478],{"class":210},[204,34003,31489],{"class":214},[204,34005,34006],{"class":206,"line":1287},[204,34007,34008],{"class":273},"# 导入数据集\n",[204,34010,34011,34013,34015,34017],{"class":206,"line":1301},[204,34012,30823],{"class":210},[204,34014,31454],{"class":214},[204,34016,30478],{"class":210},[204,34018,31459],{"class":214},[204,34020,34021,34023,34025,34027],{"class":206,"line":1307},[204,34022,30823],{"class":210},[204,34024,32000],{"class":214},[204,34026,30478],{"class":210},[204,34028,32005],{"class":214},[204,34030,34031],{"class":206,"line":1398},[204,34032,2486],{"emptyLinePlaceholder":135},[204,34034,34035],{"class":206,"line":1404},[204,34036,34037],{"class":273},"# 测试数据处理\n",[204,34039,34040,34042,34045],{"class":206,"line":1416},[204,34041,32033],{"class":210},[204,34043,34044],{"class":2049}," test_data_process",[204,34046,32039],{"class":214},[204,34048,34049,34052,34054,34056,34058,34060,34062],{"class":206,"line":1698},[204,34050,34051],{"class":214},"    test_data",[204,34053,260],{"class":210},[204,34055,31541],{"class":214},[204,34057,31544],{"class":5303},[204,34059,260],{"class":210},[204,34061,31549],{"class":319},[204,34063,31552],{"class":214},[204,34065,34066,34069,34071,34074],{"class":206,"line":1703},[204,34067,34068],{"class":5303},"                           train",[204,34070,260],{"class":210},[204,34072,34073],{"class":263},"False",[204,34075,31552],{"class":214},[204,34077,34078,34081,34083,34085,34087,34089,34091],{"class":206,"line":1709},[204,34079,34080],{"class":5303},"                           transform",[204,34082,260],{"class":210},[204,34084,31579],{"class":214},[204,34086,31582],{"class":5303},[204,34088,260],{"class":210},[204,34090,1114],{"class":263},[204,34092,31590],{"class":214},[204,34094,34095,34098,34100,34102],{"class":206,"line":1714},[204,34096,34097],{"class":5303},"                           download",[204,34099,260],{"class":210},[204,34101,31562],{"class":263},[204,34103,221],{"class":214},[204,34105,34106,34109,34111,34113,34115,34117],{"class":206,"line":1728},[204,34107,34108],{"class":214},"    test_dataloader",[204,34110,260],{"class":210},[204,34112,31620],{"class":214},[204,34114,31623],{"class":5303},[204,34116,260],{"class":210},[204,34118,34119],{"class":214},"test_data,\n",[204,34121,34122],{"class":206,"line":1733},[204,34123,34124],{"class":273},"                                    # 这里是一张一张进行测试\n",[204,34126,34127,34130,34132,34134],{"class":206,"line":1739},[204,34128,34129],{"class":5303},"                                    batch_size",[204,34131,260],{"class":210},[204,34133,431],{"class":263},[204,34135,31552],{"class":214},[204,34137,34138,34141,34143,34145],{"class":206,"line":1760},[204,34139,34140],{"class":5303},"                                    shuffle",[204,34142,260],{"class":210},[204,34144,31562],{"class":263},[204,34146,31552],{"class":214},[204,34148,34149,34152,34154,34156],{"class":206,"line":1765},[204,34150,34151],{"class":5303},"                                    num_workers",[204,34153,260],{"class":210},[204,34155,405],{"class":263},[204,34157,221],{"class":214},[204,34159,34160,34162],{"class":206,"line":1779},[204,34161,4176],{"class":210},[204,34163,34164],{"class":214}," test_dataloader\n",[204,34166,34167],{"class":206,"line":1784},[204,34168,2486],{"emptyLinePlaceholder":135},[204,34170,34171],{"class":206,"line":1813},[204,34172,34173],{"class":273},"# 定义模型测试函数\n",[204,34175,34176,34178,34181],{"class":206,"line":1818},[204,34177,32033],{"class":210},[204,34179,34180],{"class":2049}," test_model_process",[204,34182,34183],{"class":214},"(model,test_dataloader):\n",[204,34185,34186],{"class":206,"line":1835},[204,34187,34188],{"class":273},"    # 将模型放到设备当中，先进行判断\n",[204,34190,34191,34193,34195,34197,34199,34201,34203],{"class":206,"line":1840},[204,34192,31323],{"class":214},[204,34194,260],{"class":210},[204,34196,31330],{"class":319},[204,34198,1790],{"class":210},[204,34200,31335],{"class":214},[204,34202,1787],{"class":210},[204,34204,34205],{"class":319}," \"cpu\"\n",[204,34207,34208,34210,34212],{"class":206,"line":1845},[204,34209,31375],{"class":214},[204,34211,260],{"class":210},[204,34213,32375],{"class":214},[204,34215,34216],{"class":206,"line":1850},[204,34217,2486],{"emptyLinePlaceholder":135},[204,34219,34220],{"class":206,"line":1864},[204,34221,34222],{"class":273},"    # 设置初始化参数\n",[204,34224,34225,34228,34230],{"class":206,"line":1869},[204,34226,34227],{"class":214},"    test_corrects",[204,34229,260],{"class":210},[204,34231,32428],{"class":263},[204,34233,34234,34237,34239],{"class":206,"line":2663},[204,34235,34236],{"class":214},"    test_num",[204,34238,260],{"class":210},[204,34240,3171],{"class":263},[204,34242,34243],{"class":206,"line":2677},[204,34244,2486],{"emptyLinePlaceholder":135},[204,34246,34247],{"class":206,"line":2685},[204,34248,34249],{"class":273},"    # 进行模型测试\n",[204,34251,34252],{"class":206,"line":2690},[204,34253,34254],{"class":273},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[204,34256,34257],{"class":206,"line":2696},[204,34258,34259],{"class":273},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[204,34261,34262,34265],{"class":206,"line":2702},[204,34263,34264],{"class":210},"    with",[204,34266,32970],{"class":214},[204,34268,34269],{"class":206,"line":2707},[204,34270,34271],{"class":273},"        # 从数据中进行\n",[204,34273,34274,34276,34279,34281],{"class":206,"line":8035},[204,34275,3489],{"class":210},[204,34277,34278],{"class":214}," test_data_x,test_data_y ",[204,34280,26129],{"class":210},[204,34282,34283],{"class":214}," test_dataloader:\n",[204,34285,34286,34289,34291],{"class":206,"line":8059},[204,34287,34288],{"class":214},"            test_data_x",[204,34290,260],{"class":210},[204,34292,34293],{"class":214},"test_data_x.to(device)\n",[204,34295,34296,34299,34301],{"class":206,"line":8064},[204,34297,34298],{"class":214},"            test_data_y",[204,34300,260],{"class":210},[204,34302,34303],{"class":214},"test_data_y.to(device)\n",[204,34305,34306],{"class":206,"line":8070},[204,34307,34308],{"class":273},"            # 设置为验证模式\n",[204,34310,34311],{"class":206,"line":8097},[204,34312,32961],{"class":214},[204,34314,34315],{"class":206,"line":8102},[204,34316,34317],{"class":273},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[204,34319,34320,34322,34324],{"class":206,"line":8108},[204,34321,32746],{"class":214},[204,34323,260],{"class":210},[204,34325,34326],{"class":214},"model(test_data_x)\n",[204,34328,34329],{"class":206,"line":8120},[204,34330,34331],{"class":273},"            # 查找每一行中最大值对应的下标\n",[204,34333,34334,34336,34338,34340,34342,34344,34346],{"class":206,"line":8132},[204,34335,32763],{"class":214},[204,34337,260],{"class":210},[204,34339,32768],{"class":214},[204,34341,32771],{"class":5303},[204,34343,260],{"class":210},[204,34345,431],{"class":263},[204,34347,221],{"class":214},[204,34349,34350],{"class":206,"line":8144},[204,34351,34352],{"class":273},"            # 计算正确率\n",[204,34354,34355],{"class":206,"line":9803},[204,34356,34357],{"class":273},"            # .data表示是一个不带梯度信息的tensor\n",[204,34359,34360],{"class":206,"line":9828},[204,34361,34362],{"class":273},"            # 如果预测正确，则准确度test_corrects加1\n",[204,34364,34365,34368,34370,34372,34374],{"class":206,"line":9851},[204,34366,34367],{"class":214},"            test_corrects",[204,34369,9564],{"class":210},[204,34371,32873],{"class":214},[204,34373,3035],{"class":210},[204,34375,34376],{"class":214},"test_data_y.data)\n",[204,34378,34379],{"class":206,"line":9875},[204,34380,34381],{"class":273},"            # 将所有的测试样本进行累计\n",[204,34383,34384,34387,34389,34392,34394],{"class":206,"line":9880},[204,34385,34386],{"class":214},"            test_num",[204,34388,9564],{"class":210},[204,34390,34391],{"class":214},"test_data_x.size(",[204,34393,405],{"class":263},[204,34395,221],{"class":214},[204,34397,34398],{"class":206,"line":9885},[204,34399,2486],{"emptyLinePlaceholder":135},[204,34401,34402],{"class":206,"line":9890},[204,34403,34404],{"class":273},"        # 计算准确度\n",[204,34406,34407,34410,34412,34415,34417],{"class":206,"line":9899},[204,34408,34409],{"class":214},"        test_acc",[204,34411,260],{"class":210},[204,34413,34414],{"class":214},"test_corrects.double().item()",[204,34416,797],{"class":210},[204,34418,34419],{"class":214},"test_num\n",[204,34421,34422],{"class":206,"line":9904},[204,34423,34424],{"class":273},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[204,34426,34427,34429,34431,34434],{"class":206,"line":9910},[204,34428,32537],{"class":263},[204,34430,215],{"class":214},[204,34432,34433],{"class":319},"\"测试的准确率：\"",[204,34435,34436],{"class":214},",test_acc)\n",[204,34438,34439],{"class":206,"line":9931},[204,34440,2486],{"emptyLinePlaceholder":135},[204,34442,34443],{"class":206,"line":9937},[204,34444,34445],{"class":273},"# 实现模型的测试功能\n",[204,34447,34448,34450,34452,34454,34456],{"class":206,"line":9951},[204,34449,1617],{"class":210},[204,34451,31306],{"class":263},[204,34453,3035],{"class":210},[204,34455,31311],{"class":319},[204,34457,3825],{"class":214},[204,34459,34460],{"class":206,"line":9957},[204,34461,34462],{"class":273},"    # 加载模型\n",[204,34464,34465,34467,34469],{"class":206,"line":9984},[204,34466,31375],{"class":214},[204,34468,260],{"class":210},[204,34470,33911],{"class":214},[204,34472,34473],{"class":206,"line":9993},[204,34474,34475],{"class":273},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[204,34477,34478],{"class":206,"line":9999},[204,34479,34480],{"class":273},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[204,34482,34483,34486,34489],{"class":206,"line":10007},[204,34484,34485],{"class":214},"    model.load_state_dict(torch.load(",[204,34487,34488],{"class":319},"'best_model.pth'",[204,34490,30583],{"class":214},[204,34492,34493],{"class":206,"line":10012},[204,34494,34495],{"class":273},"    # 数据加载\n",[204,34497,34498,34500,34502],{"class":206,"line":16691},[204,34499,34108],{"class":214},[204,34501,260],{"class":210},[204,34503,34504],{"class":214},"test_data_process()\n",[204,34506,34507],{"class":206,"line":16697},[204,34508,34509],{"class":273},"    # 加载模型测试的函数\n",[204,34511,34512],{"class":206,"line":16720},[204,34513,34514],{"class":214},"    test_model_process(model,test_dataloader)\n",[204,34516,34517],{"class":206,"line":16726},[204,34518,2486],{"emptyLinePlaceholder":135},[204,34520,34521],{"class":206,"line":16749},[204,34522,34523],{"class":273},"    # 验证集推理实现：\n",[204,34525,34526],{"class":206,"line":16763},[204,34527,34528],{"class":273},"    # 加载数据加载的更详细一些\n",[204,34530,34531,34533,34535,34537,34539,34541,34543],{"class":206,"line":16783},[204,34532,31323],{"class":214},[204,34534,260],{"class":210},[204,34536,31330],{"class":319},[204,34538,1790],{"class":210},[204,34540,31335],{"class":214},[204,34542,1787],{"class":210},[204,34544,34205],{"class":319},[204,34546,34547,34549,34551],{"class":206,"line":16789},[204,34548,31375],{"class":214},[204,34550,260],{"class":210},[204,34552,32375],{"class":214},[204,34554,34555],{"class":206,"line":16800},[204,34556,34557],{"class":273},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[204,34559,34560],{"class":206,"line":16823},[204,34561,34562],{"class":273},"    # 顺序不可改变\n",[204,34564,34565,34568,34570,34572,34575,34577,34580,34582,34585,34587,34590,34592,34595,34597,34600,34602,34605,34607,34610,34612,34615,34617,34620],{"class":206,"line":16845},[204,34566,34567],{"class":214},"    classes",[204,34569,260],{"class":210},[204,34571,1103],{"class":214},[204,34573,34574],{"class":319},"'T-shirt\u002Ftop'",[204,34576,591],{"class":214},[204,34578,34579],{"class":319},"'Trouser'",[204,34581,591],{"class":214},[204,34583,34584],{"class":319},"'Pullover'",[204,34586,591],{"class":214},[204,34588,34589],{"class":319},"'Dress'",[204,34591,591],{"class":214},[204,34593,34594],{"class":319},"'Coat'",[204,34596,591],{"class":214},[204,34598,34599],{"class":319},"'Sandal'",[204,34601,591],{"class":214},[204,34603,34604],{"class":319},"'Shirt'",[204,34606,591],{"class":214},[204,34608,34609],{"class":319},"'Sneaker'",[204,34611,591],{"class":214},[204,34613,34614],{"class":319},"'Bag'",[204,34616,591],{"class":214},[204,34618,34619],{"class":319},"'Ankle boot'",[204,34621,33332],{"class":214},[204,34623,34624,34626],{"class":206,"line":16850},[204,34625,34264],{"class":210},[204,34627,32970],{"class":214},[204,34629,34630],{"class":206,"line":16856},[204,34631,34632],{"class":273},"        # 将数据和标签都放到设备当中\n",[204,34634,34635,34637,34640,34642],{"class":206,"line":16870},[204,34636,3489],{"class":210},[204,34638,34639],{"class":214}," b_x,b_y ",[204,34641,26129],{"class":210},[204,34643,34283],{"class":214},[204,34645,34646,34648,34650],{"class":206,"line":16883},[204,34647,32696],{"class":214},[204,34649,260],{"class":210},[204,34651,32701],{"class":214},[204,34653,34654,34656,34658],{"class":206,"line":16888},[204,34655,32711],{"class":214},[204,34657,260],{"class":210},[204,34659,32716],{"class":214},[204,34661,34662],{"class":206,"line":16902},[204,34663,2486],{"emptyLinePlaceholder":135},[204,34665,34666],{"class":206,"line":16907},[204,34667,34668],{"class":273},"            # 设置模型为验证模式\n",[204,34670,34671],{"class":206,"line":16913},[204,34672,32961],{"class":214},[204,34674,34675],{"class":206,"line":16918},[204,34676,34677],{"class":273},"            # 模型推理结果\n",[204,34679,34680,34682,34684],{"class":206,"line":16932},[204,34681,32746],{"class":214},[204,34683,260],{"class":210},[204,34685,32751],{"class":214},[204,34687,34688],{"class":206,"line":16937},[204,34689,34690],{"class":273},"            # 获取最大下标，最大下标就是类别号\n",[204,34692,34693,34695,34697,34699,34701,34703,34705],{"class":206,"line":16942},[204,34694,32763],{"class":214},[204,34696,260],{"class":210},[204,34698,32768],{"class":214},[204,34700,32771],{"class":5303},[204,34702,260],{"class":210},[204,34704,431],{"class":263},[204,34706,221],{"class":214},[204,34708,34709],{"class":206,"line":16956},[204,34710,34711],{"class":273},"            # 取出张量中的数值\n",[204,34713,34714,34717,34719],{"class":206,"line":16968},[204,34715,34716],{"class":214},"            result",[204,34718,260],{"class":210},[204,34720,34721],{"class":214},"pre_lab.item()\n",[204,34723,34724,34727,34729],{"class":206,"line":16973},[204,34725,34726],{"class":214},"            label",[204,34728,260],{"class":210},[204,34730,34731],{"class":214},"b_y.item()\n",[204,34733,34734,34737,34739,34742,34745,34748,34750,34753],{"class":206,"line":16986},[204,34735,34736],{"class":263},"            print",[204,34738,215],{"class":214},[204,34740,34741],{"class":319},"\"预测值：\"",[204,34743,34744],{"class":214},",classes[result],",[204,34746,34747],{"class":319},"\"------\"",[204,34749,591],{"class":214},[204,34751,34752],{"class":319},"\"真实值：\"",[204,34754,34755],{"class":214},",classes[label])\n",[19,34757,34758],{},"（2）AlexNet",[161,34760,34761],{},[71,34762,34763],{},"神经网络构建",[196,34765,34767],{"className":30464,"code":34766,"language":30466,"meta":125,"style":125},"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",[81,34768,34769,34775,34785,34795,34807,34811,34828,34836,34851,34863,34905,34932,34975,35001,35045,35088,35131,35158,35162,35172,35177,35205,35224,35243,35247,35252,35260,35275,35285,35299,35309,35324,35339,35354,35365,35369,35374,35384,35399,35404,35418,35433,35445,35450,35461,35466,35472,35477,35489,35509,35514,35523],{"__ignoreMap":125},[204,34770,34771,34773],{"class":206,"line":207},[204,34772,30478],{"class":210},[204,34774,30481],{"class":214},[204,34776,34777,34779,34781,34783],{"class":206,"line":126},[204,34778,30823],{"class":210},[204,34780,30826],{"class":214},[204,34782,30478],{"class":210},[204,34784,30831],{"class":214},[204,34786,34787,34789,34791,34793],{"class":206,"line":131},[204,34788,30823],{"class":210},[204,34790,30843],{"class":214},[204,34792,30478],{"class":210},[204,34794,30848],{"class":214},[204,34796,34797,34799,34802,34804],{"class":206,"line":1281},[204,34798,30478],{"class":210},[204,34800,34801],{"class":214}," torch.nn.functional ",[204,34803,31469],{"class":210},[204,34805,34806],{"class":214}," F\n",[204,34808,34809],{"class":206,"line":1287},[204,34810,2486],{"emptyLinePlaceholder":135},[204,34812,34813,34815,34818,34820,34822,34824,34826],{"class":206,"line":1301},[204,34814,14781],{"class":210},[204,34816,34817],{"class":2049}," AlexNet",[204,34819,215],{"class":214},[204,34821,30864],{"class":2049},[204,34823,771],{"class":214},[204,34825,30869],{"class":2049},[204,34827,30872],{"class":214},[204,34829,34830,34832,34834],{"class":206,"line":1307},[204,34831,30887],{"class":210},[204,34833,30890],{"class":263},[204,34835,30893],{"class":214},[204,34837,34838,34840,34843,34845,34847,34849],{"class":206,"line":1398},[204,34839,30903],{"class":263},[204,34841,34842],{"class":214},"(AlexNet,",[204,34844,30909],{"class":263},[204,34846,30912],{"class":214},[204,34848,30915],{"class":263},[204,34850,2062],{"class":214},[204,34852,34853,34855,34858,34860],{"class":206,"line":1404},[204,34854,30931],{"class":263},[204,34856,34857],{"class":214},".ReLu",[204,34859,260],{"class":210},[204,34861,34862],{"class":214},"nn.ReLU()\n",[204,34864,34865,34867,34869,34871,34873,34875,34877,34879,34881,34883,34885,34887,34889,34891,34893,34895,34897,34899,34901,34903],{"class":206,"line":1416},[204,34866,30931],{"class":263},[204,34868,30934],{"class":214},[204,34870,260],{"class":210},[204,34872,30939],{"class":214},[204,34874,30942],{"class":5303},[204,34876,260],{"class":210},[204,34878,431],{"class":263},[204,34880,591],{"class":214},[204,34882,30951],{"class":5303},[204,34884,260],{"class":210},[204,34886,423],{"class":263},[204,34888,591],{"class":214},[204,34890,30960],{"class":5303},[204,34892,260],{"class":210},[204,34894,685],{"class":263},[204,34896,591],{"class":214},[204,34898,31015],{"class":5303},[204,34900,260],{"class":210},[204,34902,506],{"class":263},[204,34904,221],{"class":214},[204,34906,34907,34909,34911,34913,34916,34918,34920,34922,34924,34926,34928,34930],{"class":206,"line":1698},[204,34908,30931],{"class":263},[204,34910,30999],{"class":214},[204,34912,260],{"class":210},[204,34914,34915],{"class":214},"nn.MaxPool2d(",[204,34917,30960],{"class":5303},[204,34919,260],{"class":210},[204,34921,286],{"class":263},[204,34923,591],{"class":214},[204,34925,31015],{"class":5303},[204,34927,260],{"class":210},[204,34929,292],{"class":263},[204,34931,221],{"class":214},[204,34933,34934,34936,34938,34940,34942,34944,34946,34948,34950,34952,34954,34957,34959,34961,34963,34965,34967,34969,34971,34973],{"class":206,"line":1703},[204,34935,30931],{"class":263},[204,34937,31028],{"class":214},[204,34939,260],{"class":210},[204,34941,30939],{"class":214},[204,34943,30942],{"class":5303},[204,34945,260],{"class":210},[204,34947,423],{"class":263},[204,34949,591],{"class":214},[204,34951,30951],{"class":5303},[204,34953,260],{"class":210},[204,34955,34956],{"class":263},"256",[204,34958,591],{"class":214},[204,34960,30960],{"class":5303},[204,34962,260],{"class":210},[204,34964,532],{"class":263},[204,34966,591],{"class":214},[204,34968,30969],{"class":5303},[204,34970,260],{"class":210},[204,34972,292],{"class":263},[204,34974,221],{"class":214},[204,34976,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999],{"class":206,"line":1709},[204,34978,30931],{"class":263},[204,34980,31063],{"class":214},[204,34982,260],{"class":210},[204,34984,34915],{"class":214},[204,34986,30960],{"class":5303},[204,34988,260],{"class":210},[204,34990,286],{"class":263},[204,34992,591],{"class":214},[204,34994,31015],{"class":5303},[204,34996,260],{"class":210},[204,34998,292],{"class":263},[204,35000,221],{"class":214},[204,35002,35003,35005,35008,35010,35012,35014,35016,35018,35020,35022,35024,35027,35029,35031,35033,35035,35037,35039,35041,35043],{"class":206,"line":1714},[204,35004,30931],{"class":263},[204,35006,35007],{"class":214},".c5",[204,35009,260],{"class":210},[204,35011,30939],{"class":214},[204,35013,30942],{"class":5303},[204,35015,260],{"class":210},[204,35017,34956],{"class":263},[204,35019,591],{"class":214},[204,35021,30951],{"class":5303},[204,35023,260],{"class":210},[204,35025,35026],{"class":263},"384",[204,35028,591],{"class":214},[204,35030,30960],{"class":5303},[204,35032,260],{"class":210},[204,35034,286],{"class":263},[204,35036,591],{"class":214},[204,35038,30969],{"class":5303},[204,35040,260],{"class":210},[204,35042,431],{"class":263},[204,35044,221],{"class":214},[204,35046,35047,35049,35052,35054,35056,35058,35060,35062,35064,35066,35068,35070,35072,35074,35076,35078,35080,35082,35084,35086],{"class":206,"line":1728},[204,35048,30931],{"class":263},[204,35050,35051],{"class":214},".c6",[204,35053,260],{"class":210},[204,35055,30939],{"class":214},[204,35057,30942],{"class":5303},[204,35059,260],{"class":210},[204,35061,35026],{"class":263},[204,35063,591],{"class":214},[204,35065,30951],{"class":5303},[204,35067,260],{"class":210},[204,35069,35026],{"class":263},[204,35071,591],{"class":214},[204,35073,30960],{"class":5303},[204,35075,260],{"class":210},[204,35077,286],{"class":263},[204,35079,591],{"class":214},[204,35081,30969],{"class":5303},[204,35083,260],{"class":210},[204,35085,431],{"class":263},[204,35087,221],{"class":214},[204,35089,35090,35092,35095,35097,35099,35101,35103,35105,35107,35109,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129],{"class":206,"line":1733},[204,35091,30931],{"class":263},[204,35093,35094],{"class":214},".c7",[204,35096,260],{"class":210},[204,35098,30939],{"class":214},[204,35100,30942],{"class":5303},[204,35102,260],{"class":210},[204,35104,35026],{"class":263},[204,35106,591],{"class":214},[204,35108,30951],{"class":5303},[204,35110,260],{"class":210},[204,35112,34956],{"class":263},[204,35114,591],{"class":214},[204,35116,30960],{"class":5303},[204,35118,260],{"class":210},[204,35120,286],{"class":263},[204,35122,591],{"class":214},[204,35124,30969],{"class":5303},[204,35126,260],{"class":210},[204,35128,431],{"class":263},[204,35130,221],{"class":214},[204,35132,35133,35135,35138,35140,35142,35144,35146,35148,35150,35152,35154,35156],{"class":206,"line":1739},[204,35134,30931],{"class":263},[204,35136,35137],{"class":214},".s8",[204,35139,260],{"class":210},[204,35141,34915],{"class":214},[204,35143,30960],{"class":5303},[204,35145,260],{"class":210},[204,35147,286],{"class":263},[204,35149,591],{"class":214},[204,35151,31015],{"class":5303},[204,35153,260],{"class":210},[204,35155,292],{"class":263},[204,35157,221],{"class":214},[204,35159,35160],{"class":206,"line":1760},[204,35161,31088],{"class":273},[204,35163,35164,35166,35168,35170],{"class":206,"line":1765},[204,35165,30931],{"class":263},[204,35167,31095],{"class":214},[204,35169,260],{"class":210},[204,35171,31100],{"class":214},[204,35173,35174],{"class":206,"line":1779},[204,35175,35176],{"class":273},"       # 定义全连接层\n",[204,35178,35179,35181,35184,35186,35188,35190,35192,35194,35196,35198,35200,35203],{"class":206,"line":1784},[204,35180,30931],{"class":263},[204,35182,35183],{"class":214},".f1",[204,35185,260],{"class":210},[204,35187,31117],{"class":214},[204,35189,557],{"class":263},[204,35191,668],{"class":210},[204,35193,557],{"class":263},[204,35195,668],{"class":210},[204,35197,34956],{"class":263},[204,35199,591],{"class":214},[204,35201,35202],{"class":263},"4096",[204,35204,221],{"class":214},[204,35206,35207,35209,35212,35214,35216,35218,35220,35222],{"class":206,"line":1813},[204,35208,30931],{"class":263},[204,35210,35211],{"class":214},".f2",[204,35213,260],{"class":210},[204,35215,31117],{"class":214},[204,35217,35202],{"class":263},[204,35219,591],{"class":214},[204,35221,35202],{"class":263},[204,35223,221],{"class":214},[204,35225,35226,35228,35231,35233,35235,35237,35239,35241],{"class":206,"line":1818},[204,35227,30931],{"class":263},[204,35229,35230],{"class":214},".f3",[204,35232,260],{"class":210},[204,35234,31117],{"class":214},[204,35236,35202],{"class":263},[204,35238,591],{"class":214},[204,35240,659],{"class":263},[204,35242,221],{"class":214},[204,35244,35245],{"class":206,"line":1835},[204,35246,2486],{"emptyLinePlaceholder":135},[204,35248,35249],{"class":206,"line":1840},[204,35250,35251],{"class":273},"    # 定义前向传播\n",[204,35253,35254,35256,35258],{"class":206,"line":1845},[204,35255,30887],{"class":210},[204,35257,31179],{"class":2049},[204,35259,31182],{"class":214},[204,35261,35262,35264,35266,35268,35271,35273],{"class":206,"line":1850},[204,35263,31187],{"class":214},[204,35265,260],{"class":210},[204,35267,30909],{"class":263},[204,35269,35270],{"class":214},".ReLu(",[204,35272,30909],{"class":263},[204,35274,31199],{"class":214},[204,35276,35277,35279,35281,35283],{"class":206,"line":1864},[204,35278,31187],{"class":214},[204,35280,260],{"class":210},[204,35282,30909],{"class":263},[204,35284,31210],{"class":214},[204,35286,35287,35289,35291,35293,35295,35297],{"class":206,"line":1869},[204,35288,31187],{"class":214},[204,35290,260],{"class":210},[204,35292,30909],{"class":263},[204,35294,35270],{"class":214},[204,35296,30909],{"class":263},[204,35298,31225],{"class":214},[204,35300,35301,35303,35305,35307],{"class":206,"line":2663},[204,35302,31187],{"class":214},[204,35304,260],{"class":210},[204,35306,30909],{"class":263},[204,35308,31236],{"class":214},[204,35310,35311,35313,35315,35317,35319,35321],{"class":206,"line":2677},[204,35312,31187],{"class":214},[204,35314,260],{"class":210},[204,35316,30909],{"class":263},[204,35318,35270],{"class":214},[204,35320,30909],{"class":263},[204,35322,35323],{"class":214},".c5(x))\n",[204,35325,35326,35328,35330,35332,35334,35336],{"class":206,"line":2685},[204,35327,31187],{"class":214},[204,35329,260],{"class":210},[204,35331,30909],{"class":263},[204,35333,35270],{"class":214},[204,35335,30909],{"class":263},[204,35337,35338],{"class":214},".c6(x))\n",[204,35340,35341,35343,35345,35347,35349,35351],{"class":206,"line":2690},[204,35342,31187],{"class":214},[204,35344,260],{"class":210},[204,35346,30909],{"class":263},[204,35348,35270],{"class":214},[204,35350,30909],{"class":263},[204,35352,35353],{"class":214},".c7(x))\n",[204,35355,35356,35358,35360,35362],{"class":206,"line":2696},[204,35357,31187],{"class":214},[204,35359,260],{"class":210},[204,35361,30909],{"class":263},[204,35363,35364],{"class":214},".s8(x)\n",[204,35366,35367],{"class":206,"line":2702},[204,35368,2486],{"emptyLinePlaceholder":135},[204,35370,35371],{"class":206,"line":2707},[204,35372,35373],{"class":273},"        # 展平加线性全连接层\n",[204,35375,35376,35378,35380,35382],{"class":206,"line":8035},[204,35377,31187],{"class":214},[204,35379,260],{"class":210},[204,35381,30909],{"class":263},[204,35383,31247],{"class":214},[204,35385,35386,35388,35390,35392,35394,35396],{"class":206,"line":8059},[204,35387,31187],{"class":214},[204,35389,260],{"class":210},[204,35391,30909],{"class":263},[204,35393,35270],{"class":214},[204,35395,30909],{"class":263},[204,35397,35398],{"class":214},".f1(x))\n",[204,35400,35401],{"class":206,"line":8064},[204,35402,35403],{"class":273},"        # 还需要dropout对神经元随机进行失活\n",[204,35405,35406,35408,35410,35413,35416],{"class":206,"line":8070},[204,35407,31187],{"class":214},[204,35409,260],{"class":210},[204,35411,35412],{"class":214},"F.dropout(x,",[204,35414,35415],{"class":263},"0.5",[204,35417,221],{"class":214},[204,35419,35420,35422,35424,35426,35428,35430],{"class":206,"line":8097},[204,35421,31187],{"class":214},[204,35423,260],{"class":210},[204,35425,30909],{"class":263},[204,35427,35270],{"class":214},[204,35429,30909],{"class":263},[204,35431,35432],{"class":214},".f2(x))\n",[204,35434,35435,35437,35439,35441,35443],{"class":206,"line":8102},[204,35436,31187],{"class":214},[204,35438,260],{"class":210},[204,35440,35412],{"class":214},[204,35442,35415],{"class":263},[204,35444,221],{"class":214},[204,35446,35447],{"class":206,"line":8108},[204,35448,35449],{"class":273},"        # 直接输出\n",[204,35451,35452,35454,35456,35458],{"class":206,"line":8120},[204,35453,31187],{"class":214},[204,35455,260],{"class":210},[204,35457,30909],{"class":263},[204,35459,35460],{"class":214},".f3(x)\n",[204,35462,35463],{"class":206,"line":8132},[204,35464,35465],{"class":273},"        # 前向传播输出\n",[204,35467,35468,35470],{"class":206,"line":8144},[204,35469,14839],{"class":210},[204,35471,31295],{"class":214},[204,35473,35474],{"class":206,"line":9803},[204,35475,35476],{"class":273},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[204,35478,35479,35481,35483,35485,35487],{"class":206,"line":9828},[204,35480,1617],{"class":210},[204,35482,31306],{"class":263},[204,35484,3035],{"class":210},[204,35486,31311],{"class":319},[204,35488,3825],{"class":214},[204,35490,35491,35493,35495,35497,35499,35501,35503,35505,35507],{"class":206,"line":9851},[204,35492,31323],{"class":214},[204,35494,260],{"class":210},[204,35496,30537],{"class":214},[204,35498,31330],{"class":319},[204,35500,1790],{"class":210},[204,35502,31335],{"class":214},[204,35504,1787],{"class":210},[204,35506,30562],{"class":319},[204,35508,221],{"class":214},[204,35510,35511],{"class":206,"line":9875},[204,35512,35513],{"class":273},"    # 模型实例化，然后将实例化的模型放到设备中\n",[204,35515,35516,35518,35520],{"class":206,"line":9880},[204,35517,31375],{"class":214},[204,35519,260],{"class":210},[204,35521,35522],{"class":214},"AlexNet().to(device)\n",[204,35524,35525,35527,35529,35531,35533,35536,35538,35540],{"class":206,"line":9885},[204,35526,31385],{"class":263},[204,35528,31388],{"class":214},[204,35530,431],{"class":263},[204,35532,591],{"class":214},[204,35534,35535],{"class":263},"227",[204,35537,591],{"class":214},[204,35539,35535],{"class":263},[204,35541,31401],{"class":214},[161,35543,35544],{"start":126},[71,35545,31414],{},[196,35547,35549],{"className":30464,"code":35548,"language":30466,"meta":125,"style":125},"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",[81,35550,35551,35557,35563,35573,35579,35589,35599,35609,35619,35629,35633,35644,35654,35658,35662,35666,35674,35686,35696,35712,35722,35754,35768,35778,35788,35792,35802,35816,35826,35836,35846,35852,35856,35860,35864,35868,35872,35880,35900,35904,35908,35912,35916,35920,35936,35940,35944,35952,35956,35960,35968,35972,35976,35980,35988,35992,35996,36000,36004,36012,36016,36024,36028,36036,36040,36048,36052,36060,36064,36068,36076,36080,36084,36088,36100,36124,36138,36142,36146,36150,36158,36162,36170,36174,36182,36186,36194,36198,36206,36210,36218,36222,36234,36238,36246,36250,36258,36262,36266,36270,36274,36282,36286,36302,36306,36314,36318,36322,36326,36330,36334,36338,36342,36358,36362,36374,36378,36390,36394,36406,36410,36418,36422,36430,36434,36438,36443,36449,36453,36462,36466,36483,36487,36496,36500,36518,36531,36536,36549,36553,36557,36565,36569,36573,36581,36585,36593,36597,36605,36609,36613,36655,36697,36701,36705,36721,36725,36741,36745,36749,36757,36761,36765,36777,36815,36820,36825,36834,36838,36852,36862,36868,36874,36880,36886,36890,36894,36900,36904,36908,36916,36920,36938,36942,36946,36950,36966,36970,36974,36978,36982,36986,37006,37026,37030,37034,37038,37046,37054,37058,37074,37094,37114,37118,37122,37130,37138,37142,37146,37150,37162,37166,37176,37184,37201],{"__ignoreMap":125},[204,35552,35553,35555],{"class":206,"line":207},[204,35554,30478],{"class":210},[204,35556,31908],{"class":214},[204,35558,35559,35561],{"class":206,"line":126},[204,35560,30478],{"class":210},[204,35562,31915],{"class":214},[204,35564,35565,35567,35569,35571],{"class":206,"line":131},[204,35566,30478],{"class":210},[204,35568,31926],{"class":214},[204,35570,31469],{"class":210},[204,35572,31931],{"class":214},[204,35574,35575,35577],{"class":206,"line":1281},[204,35576,30478],{"class":210},[204,35578,30481],{"class":214},[204,35580,35581,35583,35585,35587],{"class":206,"line":1287},[204,35582,30823],{"class":210},[204,35584,31501],{"class":214},[204,35586,30478],{"class":210},[204,35588,31948],{"class":214},[204,35590,35591,35593,35595,35597],{"class":206,"line":1301},[204,35592,30823],{"class":210},[204,35594,31454],{"class":214},[204,35596,30478],{"class":210},[204,35598,31459],{"class":214},[204,35600,35601,35603,35605,35607],{"class":206,"line":1307},[204,35602,30823],{"class":210},[204,35604,31484],{"class":214},[204,35606,30478],{"class":210},[204,35608,31489],{"class":214},[204,35610,35611,35613,35615,35617],{"class":206,"line":1398},[204,35612,30478],{"class":210},[204,35614,31501],{"class":214},[204,35616,31469],{"class":210},[204,35618,31506],{"class":214},[204,35620,35621,35623,35625,35627],{"class":206,"line":1404},[204,35622,30478],{"class":210},[204,35624,31518],{"class":214},[204,35626,31469],{"class":210},[204,35628,31523],{"class":214},[204,35630,35631],{"class":206,"line":1416},[204,35632,31993],{"class":273},[204,35634,35635,35637,35639,35641],{"class":206,"line":1698},[204,35636,30823],{"class":210},[204,35638,32000],{"class":214},[204,35640,30478],{"class":210},[204,35642,35643],{"class":214}," AlexNet\n",[204,35645,35646,35648,35650,35652],{"class":206,"line":1703},[204,35647,30823],{"class":210},[204,35649,30826],{"class":214},[204,35651,30478],{"class":210},[204,35653,30831],{"class":214},[204,35655,35656],{"class":206,"line":1709},[204,35657,2486],{"emptyLinePlaceholder":135},[204,35659,35660],{"class":206,"line":1714},[204,35661,2486],{"emptyLinePlaceholder":135},[204,35663,35664],{"class":206,"line":1728},[204,35665,32028],{"class":273},[204,35667,35668,35670,35672],{"class":206,"line":1733},[204,35669,32033],{"class":210},[204,35671,32036],{"class":2049},[204,35673,32039],{"class":214},[204,35675,35676,35678,35680,35682,35684],{"class":206,"line":1739},[204,35677,32044],{"class":214},[204,35679,260],{"class":210},[204,35681,31541],{"class":214},[204,35683,31549],{"class":319},[204,35685,31552],{"class":214},[204,35687,35688,35690,35692,35694],{"class":206,"line":1760},[204,35689,32057],{"class":5303},[204,35691,260],{"class":210},[204,35693,31562],{"class":263},[204,35695,31552],{"class":214},[204,35697,35698,35700,35702,35704,35706,35708,35710],{"class":206,"line":1765},[204,35699,32068],{"class":5303},[204,35701,260],{"class":210},[204,35703,31579],{"class":214},[204,35705,31582],{"class":5303},[204,35707,260],{"class":210},[204,35709,35535],{"class":263},[204,35711,31590],{"class":214},[204,35713,35714,35716,35718,35720],{"class":206,"line":1779},[204,35715,32085],{"class":5303},[204,35717,260],{"class":210},[204,35719,31562],{"class":263},[204,35721,221],{"class":214},[204,35723,35724,35726,35728,35730,35732,35734,35736,35738,35740,35742,35744,35746,35748,35750,35752],{"class":206,"line":1784},[204,35725,32096],{"class":214},[204,35727,260],{"class":210},[204,35729,32101],{"class":214},[204,35731,32104],{"class":263},[204,35733,215],{"class":214},[204,35735,32109],{"class":263},[204,35737,668],{"class":210},[204,35739,7445],{"class":263},[204,35741,32116],{"class":214},[204,35743,32104],{"class":263},[204,35745,215],{"class":214},[204,35747,32123],{"class":263},[204,35749,668],{"class":210},[204,35751,7445],{"class":263},[204,35753,32130],{"class":214},[204,35755,35756,35758,35760,35762,35764,35766],{"class":206,"line":1813},[204,35757,32135],{"class":214},[204,35759,260],{"class":210},[204,35761,32140],{"class":214},[204,35763,31623],{"class":5303},[204,35765,260],{"class":210},[204,35767,31628],{"class":214},[204,35769,35770,35772,35774,35776],{"class":206,"line":1818},[204,35771,32151],{"class":5303},[204,35773,260],{"class":210},[204,35775,32156],{"class":263},[204,35777,31552],{"class":214},[204,35779,35780,35782,35784,35786],{"class":206,"line":1835},[204,35781,32163],{"class":5303},[204,35783,260],{"class":210},[204,35785,31562],{"class":263},[204,35787,31552],{"class":214},[204,35789,35790],{"class":206,"line":1840},[204,35791,32174],{"class":273},[204,35793,35794,35796,35798,35800],{"class":206,"line":1845},[204,35795,32179],{"class":5303},[204,35797,260],{"class":210},[204,35799,608],{"class":263},[204,35801,221],{"class":214},[204,35803,35804,35806,35808,35810,35812,35814],{"class":206,"line":1850},[204,35805,32190],{"class":214},[204,35807,260],{"class":210},[204,35809,31620],{"class":214},[204,35811,31623],{"class":5303},[204,35813,260],{"class":210},[204,35815,32201],{"class":214},[204,35817,35818,35820,35822,35824],{"class":206,"line":1864},[204,35819,32206],{"class":5303},[204,35821,260],{"class":210},[204,35823,32156],{"class":263},[204,35825,31552],{"class":214},[204,35827,35828,35830,35832,35834],{"class":206,"line":1869},[204,35829,32217],{"class":5303},[204,35831,260],{"class":210},[204,35833,31562],{"class":263},[204,35835,31552],{"class":214},[204,35837,35838,35840,35842,35844],{"class":206,"line":2663},[204,35839,32228],{"class":5303},[204,35841,260],{"class":210},[204,35843,608],{"class":263},[204,35845,221],{"class":214},[204,35847,35848,35850],{"class":206,"line":2677},[204,35849,4176],{"class":210},[204,35851,32241],{"class":214},[204,35853,35854],{"class":206,"line":2685},[204,35855,2486],{"emptyLinePlaceholder":135},[204,35857,35858],{"class":206,"line":2690},[204,35859,32250],{"class":273},[204,35861,35862],{"class":206,"line":2696},[204,35863,32255],{"class":273},[204,35865,35866],{"class":206,"line":2702},[204,35867,2486],{"emptyLinePlaceholder":135},[204,35869,35870],{"class":206,"line":2707},[204,35871,32264],{"class":273},[204,35873,35874,35876,35878],{"class":206,"line":8035},[204,35875,32033],{"class":210},[204,35877,32271],{"class":2049},[204,35879,32274],{"class":214},[204,35881,35882,35884,35886,35888,35890,35892,35894,35896,35898],{"class":206,"line":8059},[204,35883,31323],{"class":214},[204,35885,260],{"class":210},[204,35887,30537],{"class":214},[204,35889,31330],{"class":319},[204,35891,1790],{"class":210},[204,35893,31335],{"class":214},[204,35895,1787],{"class":210},[204,35897,32293],{"class":319},[204,35899,221],{"class":214},[204,35901,35902],{"class":206,"line":8064},[204,35903,2486],{"emptyLinePlaceholder":135},[204,35905,35906],{"class":206,"line":8070},[204,35907,2486],{"emptyLinePlaceholder":135},[204,35909,35910],{"class":206,"line":8097},[204,35911,32308],{"class":273},[204,35913,35914],{"class":206,"line":8102},[204,35915,32313],{"class":273},[204,35917,35918],{"class":206,"line":8108},[204,35919,32318],{"class":273},[204,35921,35922,35924,35926,35928,35930,35932,35934],{"class":206,"line":8120},[204,35923,32323],{"class":214},[204,35925,260],{"class":210},[204,35927,32328],{"class":214},[204,35929,32331],{"class":5303},[204,35931,260],{"class":210},[204,35933,32336],{"class":263},[204,35935,221],{"class":214},[204,35937,35938],{"class":206,"line":8132},[204,35939,2486],{"emptyLinePlaceholder":135},[204,35941,35942],{"class":206,"line":8144},[204,35943,32347],{"class":273},[204,35945,35946,35948,35950],{"class":206,"line":9803},[204,35947,32352],{"class":214},[204,35949,260],{"class":210},[204,35951,32357],{"class":214},[204,35953,35954],{"class":206,"line":9828},[204,35955,2486],{"emptyLinePlaceholder":135},[204,35957,35958],{"class":206,"line":9851},[204,35959,32366],{"class":273},[204,35961,35962,35964,35966],{"class":206,"line":9875},[204,35963,31375],{"class":214},[204,35965,260],{"class":210},[204,35967,32375],{"class":214},[204,35969,35970],{"class":206,"line":9880},[204,35971,32380],{"class":273},[204,35973,35974],{"class":206,"line":9885},[204,35975,32385],{"class":273},[204,35977,35978],{"class":206,"line":9890},[204,35979,32390],{"class":273},[204,35981,35982,35984,35986],{"class":206,"line":9899},[204,35983,32395],{"class":214},[204,35985,260],{"class":210},[204,35987,32400],{"class":214},[204,35989,35990],{"class":206,"line":9904},[204,35991,2486],{"emptyLinePlaceholder":135},[204,35993,35994],{"class":206,"line":9910},[204,35995,2486],{"emptyLinePlaceholder":135},[204,35997,35998],{"class":206,"line":9931},[204,35999,32413],{"class":273},[204,36001,36002],{"class":206,"line":9937},[204,36003,32418],{"class":273},[204,36005,36006,36008,36010],{"class":206,"line":9951},[204,36007,32423],{"class":214},[204,36009,260],{"class":210},[204,36011,32428],{"class":263},[204,36013,36014],{"class":206,"line":9957},[204,36015,32433],{"class":273},[204,36017,36018,36020,36022],{"class":206,"line":9984},[204,36019,32438],{"class":214},[204,36021,260],{"class":210},[204,36023,32443],{"class":214},[204,36025,36026],{"class":206,"line":9993},[204,36027,32448],{"class":273},[204,36029,36030,36032,36034],{"class":206,"line":9999},[204,36031,32453],{"class":214},[204,36033,260],{"class":210},[204,36035,32443],{"class":214},[204,36037,36038],{"class":206,"line":10007},[204,36039,32462],{"class":273},[204,36041,36042,36044,36046],{"class":206,"line":10012},[204,36043,32467],{"class":214},[204,36045,260],{"class":210},[204,36047,32443],{"class":214},[204,36049,36050],{"class":206,"line":16691},[204,36051,32476],{"class":273},[204,36053,36054,36056,36058],{"class":206,"line":16697},[204,36055,32481],{"class":214},[204,36057,260],{"class":210},[204,36059,32443],{"class":214},[204,36061,36062],{"class":206,"line":16720},[204,36063,2486],{"emptyLinePlaceholder":135},[204,36065,36066],{"class":206,"line":16726},[204,36067,32494],{"class":273},[204,36069,36070,36072,36074],{"class":206,"line":16749},[204,36071,32499],{"class":214},[204,36073,260],{"class":210},[204,36075,32504],{"class":214},[204,36077,36078],{"class":206,"line":16763},[204,36079,2486],{"emptyLinePlaceholder":135},[204,36081,36082],{"class":206,"line":16783},[204,36083,2486],{"emptyLinePlaceholder":135},[204,36085,36086],{"class":206,"line":16789},[204,36087,32517],{"class":273},[204,36089,36090,36092,36094,36096,36098],{"class":206,"line":16800},[204,36091,3287],{"class":210},[204,36093,32524],{"class":214},[204,36095,26129],{"class":210},[204,36097,32529],{"class":263},[204,36099,32532],{"class":214},[204,36101,36102,36104,36106,36108,36110,36112,36114,36116,36118,36120,36122],{"class":206,"line":16823},[204,36103,32537],{"class":263},[204,36105,215],{"class":214},[204,36107,32542],{"class":319},[204,36109,32545],{"class":263},[204,36111,797],{"class":319},[204,36113,32545],{"class":263},[204,36115,464],{"class":319},[204,36117,32554],{"class":214},[204,36119,745],{"class":210},[204,36121,431],{"class":263},[204,36123,30583],{"class":214},[204,36125,36126,36128,36130,36132,36134,36136],{"class":206,"line":16845},[204,36127,32537],{"class":263},[204,36129,215],{"class":214},[204,36131,32569],{"class":319},[204,36133,668],{"class":210},[204,36135,659],{"class":263},[204,36137,221],{"class":214},[204,36139,36140],{"class":206,"line":16850},[204,36141,2486],{"emptyLinePlaceholder":135},[204,36143,36144],{"class":206,"line":16856},[204,36145,32584],{"class":273},[204,36147,36148],{"class":206,"line":16870},[204,36149,32589],{"class":273},[204,36151,36152,36154,36156],{"class":206,"line":16883},[204,36153,32594],{"class":214},[204,36155,260],{"class":210},[204,36157,32428],{"class":263},[204,36159,36160],{"class":206,"line":16888},[204,36161,32603],{"class":273},[204,36163,36164,36166,36168],{"class":206,"line":16902},[204,36165,32608],{"class":214},[204,36167,260],{"class":210},[204,36169,3171],{"class":263},[204,36171,36172],{"class":206,"line":16907},[204,36173,32617],{"class":273},[204,36175,36176,36178,36180],{"class":206,"line":16913},[204,36177,32622],{"class":214},[204,36179,260],{"class":210},[204,36181,32428],{"class":263},[204,36183,36184],{"class":206,"line":16918},[204,36185,32631],{"class":273},[204,36187,36188,36190,36192],{"class":206,"line":16932},[204,36189,32636],{"class":214},[204,36191,260],{"class":210},[204,36193,3171],{"class":263},[204,36195,36196],{"class":206,"line":16937},[204,36197,32645],{"class":273},[204,36199,36200,36202,36204],{"class":206,"line":16942},[204,36201,32650],{"class":214},[204,36203,260],{"class":210},[204,36205,3171],{"class":263},[204,36207,36208],{"class":206,"line":16956},[204,36209,32659],{"class":273},[204,36211,36212,36214,36216],{"class":206,"line":16968},[204,36213,32664],{"class":214},[204,36215,260],{"class":210},[204,36217,3171],{"class":263},[204,36219,36220],{"class":206,"line":16973},[204,36221,32673],{"class":273},[204,36223,36224,36226,36228,36230,36232],{"class":206,"line":16986},[204,36225,3489],{"class":210},[204,36227,31687],{"class":214},[204,36229,26129],{"class":210},[204,36231,31692],{"class":263},[204,36233,32686],{"class":214},[204,36235,36236],{"class":206,"line":16991},[204,36237,32691],{"class":273},[204,36239,36240,36242,36244],{"class":206,"line":16996},[204,36241,32696],{"class":214},[204,36243,260],{"class":210},[204,36245,32701],{"class":214},[204,36247,36248],{"class":206,"line":17001},[204,36249,32706],{"class":273},[204,36251,36252,36254,36256],{"class":206,"line":17014},[204,36253,32711],{"class":214},[204,36255,260],{"class":210},[204,36257,32716],{"class":214},[204,36259,36260],{"class":206,"line":17019},[204,36261,32722],{"class":273},[204,36263,36264],{"class":206,"line":32719},[204,36265,32728],{"class":214},[204,36267,36268],{"class":206,"line":32725},[204,36269,32734],{"class":273},[204,36271,36272],{"class":206,"line":32731},[204,36273,32740],{"class":273},[204,36275,36276,36278,36280],{"class":206,"line":32737},[204,36277,32746],{"class":214},[204,36279,260],{"class":210},[204,36281,32751],{"class":214},[204,36283,36284],{"class":206,"line":32743},[204,36285,32757],{"class":273},[204,36287,36288,36290,36292,36294,36296,36298,36300],{"class":206,"line":32754},[204,36289,32763],{"class":214},[204,36291,260],{"class":210},[204,36293,32768],{"class":214},[204,36295,32771],{"class":5303},[204,36297,260],{"class":210},[204,36299,431],{"class":263},[204,36301,221],{"class":214},[204,36303,36304],{"class":206,"line":32760},[204,36305,32783],{"class":273},[204,36307,36308,36310,36312],{"class":206,"line":32780},[204,36309,32789],{"class":214},[204,36311,260],{"class":210},[204,36313,32794],{"class":214},[204,36315,36316],{"class":206,"line":32786},[204,36317,32800],{"class":273},[204,36319,36320],{"class":206,"line":32797},[204,36321,32806],{"class":214},[204,36323,36324],{"class":206,"line":32803},[204,36325,32812],{"class":273},[204,36327,36328],{"class":206,"line":32809},[204,36329,32818],{"class":214},[204,36331,36332],{"class":206,"line":32815},[204,36333,32824],{"class":273},[204,36335,36336],{"class":206,"line":32821},[204,36337,32830],{"class":214},[204,36339,36340],{"class":206,"line":32827},[204,36341,32836],{"class":273},[204,36343,36344,36346,36348,36350,36352,36354,36356],{"class":206,"line":32833},[204,36345,32842],{"class":214},[204,36347,9564],{"class":210},[204,36349,32847],{"class":214},[204,36351,668],{"class":210},[204,36353,32852],{"class":214},[204,36355,405],{"class":263},[204,36357,221],{"class":214},[204,36359,36360],{"class":206,"line":32839},[204,36361,32862],{"class":273},[204,36363,36364,36366,36368,36370,36372],{"class":206,"line":32859},[204,36365,32868],{"class":214},[204,36367,9564],{"class":210},[204,36369,32873],{"class":214},[204,36371,3035],{"class":210},[204,36373,32878],{"class":214},[204,36375,36376],{"class":206,"line":32865},[204,36377,32884],{"class":273},[204,36379,36380,36382,36384,36386,36388],{"class":206,"line":32881},[204,36381,32890],{"class":214},[204,36383,9564],{"class":210},[204,36385,32852],{"class":214},[204,36387,405],{"class":263},[204,36389,221],{"class":214},[204,36391,36392],{"class":206,"line":32887},[204,36393,32904],{"class":273},[204,36395,36396,36398,36400,36402,36404],{"class":206,"line":32901},[204,36397,3489],{"class":210},[204,36399,32912],{"class":214},[204,36401,26129],{"class":210},[204,36403,31692],{"class":263},[204,36405,32919],{"class":214},[204,36407,36408],{"class":206,"line":32907},[204,36409,32925],{"class":273},[204,36411,36412,36414,36416],{"class":206,"line":32922},[204,36413,32696],{"class":214},[204,36415,260],{"class":210},[204,36417,32701],{"class":214},[204,36419,36420],{"class":206,"line":32928},[204,36421,32940],{"class":273},[204,36423,36424,36426,36428],{"class":206,"line":32937},[204,36425,32711],{"class":214},[204,36427,260],{"class":210},[204,36429,32716],{"class":214},[204,36431,36432],{"class":206,"line":32943},[204,36433,32955],{"class":273},[204,36435,36436],{"class":206,"line":32952},[204,36437,32961],{"class":214},[204,36439,36440],{"class":206,"line":32958},[204,36441,36442],{"class":273},"            # 验证时不计算梯度以节省内存\u002F计算\n",[204,36444,36445,36447],{"class":206,"line":32964},[204,36446,32967],{"class":210},[204,36448,32970],{"class":214},[204,36450,36451],{"class":206,"line":32973},[204,36452,32976],{"class":273},[204,36454,36455,36458,36460],{"class":206,"line":32979},[204,36456,36457],{"class":214},"                output",[204,36459,260],{"class":210},[204,36461,32751],{"class":214},[204,36463,36464],{"class":206,"line":32990},[204,36465,32993],{"class":273},[204,36467,36468,36471,36473,36475,36477,36479,36481],{"class":206,"line":32996},[204,36469,36470],{"class":214},"                pre_lab",[204,36472,260],{"class":210},[204,36474,32768],{"class":214},[204,36476,32771],{"class":5303},[204,36478,260],{"class":210},[204,36480,431],{"class":263},[204,36482,221],{"class":214},[204,36484,36485],{"class":206,"line":33015},[204,36486,33018],{"class":273},[204,36488,36489,36492,36494],{"class":206,"line":33021},[204,36490,36491],{"class":214},"                val_batch_loss",[204,36493,260],{"class":210},[204,36495,32794],{"class":214},[204,36497,36498],{"class":206,"line":33032},[204,36499,33035],{"class":273},[204,36501,36502,36505,36507,36510,36512,36514,36516],{"class":206,"line":33038},[204,36503,36504],{"class":214},"                val_loss",[204,36506,9564],{"class":210},[204,36508,36509],{"class":214},"val_batch_loss.item()",[204,36511,668],{"class":210},[204,36513,32852],{"class":214},[204,36515,405],{"class":263},[204,36517,221],{"class":214},[204,36519,36520,36523,36525,36527,36529],{"class":206,"line":33058},[204,36521,36522],{"class":214},"                val_corrects",[204,36524,9564],{"class":210},[204,36526,32873],{"class":214},[204,36528,3035],{"class":210},[204,36530,32878],{"class":214},[204,36532,36533],{"class":206,"line":33074},[204,36534,36535],{"class":273},"            # 当前用于验证的样本数量\n",[204,36537,36538,36541,36543,36545,36547],{"class":206,"line":33080},[204,36539,36540],{"class":214},"            val_num",[204,36542,9564],{"class":210},[204,36544,32852],{"class":214},[204,36546,405],{"class":263},[204,36548,221],{"class":214},[204,36550,36551],{"class":206,"line":33094},[204,36552,33097],{"class":273},[204,36554,36555],{"class":206,"line":33100},[204,36556,33103],{"class":273},[204,36558,36559,36561,36563],{"class":206,"line":33106},[204,36560,33109],{"class":214},[204,36562,797],{"class":210},[204,36564,33114],{"class":214},[204,36566,36567],{"class":206,"line":33117},[204,36568,33120],{"class":273},[204,36570,36571],{"class":206,"line":33123},[204,36572,33126],{"class":273},[204,36574,36575,36577,36579],{"class":206,"line":33129},[204,36576,33132],{"class":214},[204,36578,797],{"class":210},[204,36580,33114],{"class":214},[204,36582,36583],{"class":206,"line":33139},[204,36584,33142],{"class":273},[204,36586,36587,36589,36591],{"class":206,"line":33145},[204,36588,33148],{"class":214},[204,36590,797],{"class":210},[204,36592,33153],{"class":214},[204,36594,36595],{"class":206,"line":33156},[204,36596,33159],{"class":273},[204,36598,36599,36601,36603],{"class":206,"line":33162},[204,36600,33165],{"class":214},[204,36602,797],{"class":210},[204,36604,33153],{"class":214},[204,36606,36607],{"class":206,"line":33172},[204,36608,2486],{"emptyLinePlaceholder":135},[204,36610,36611],{"class":206,"line":33177},[204,36612,33180],{"class":273},[204,36614,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641,36643,36645,36647,36649,36651,36653],{"class":206,"line":33183},[204,36616,32537],{"class":263},[204,36618,215],{"class":214},[204,36620,3678],{"class":319},[204,36622,32545],{"class":263},[204,36624,33194],{"class":319},[204,36626,1109],{"class":263},[204,36628,33199],{"class":210},[204,36630,1159],{"class":263},[204,36632,33204],{"class":319},[204,36634,1109],{"class":263},[204,36636,33199],{"class":210},[204,36638,1159],{"class":263},[204,36640,3678],{"class":319},[204,36642,33215],{"class":214},[204,36644,745],{"class":210},[204,36646,431],{"class":263},[204,36648,33222],{"class":214},[204,36650,745],{"class":210},[204,36652,431],{"class":263},[204,36654,33229],{"class":214},[204,36656,36657,36659,36661,36663,36665,36667,36669,36671,36673,36675,36677,36679,36681,36683,36685,36687,36689,36691,36693,36695],{"class":206,"line":33232},[204,36658,32537],{"class":263},[204,36660,215],{"class":214},[204,36662,3678],{"class":319},[204,36664,32545],{"class":263},[204,36666,33243],{"class":319},[204,36668,1109],{"class":263},[204,36670,33199],{"class":210},[204,36672,1159],{"class":263},[204,36674,33252],{"class":319},[204,36676,1109],{"class":263},[204,36678,33199],{"class":210},[204,36680,1159],{"class":263},[204,36682,3678],{"class":319},[204,36684,33263],{"class":214},[204,36686,745],{"class":210},[204,36688,431],{"class":263},[204,36690,33270],{"class":214},[204,36692,745],{"class":210},[204,36694,431],{"class":263},[204,36696,33229],{"class":214},[204,36698,36699],{"class":206,"line":33279},[204,36700,2486],{"emptyLinePlaceholder":135},[204,36702,36703],{"class":206,"line":33284},[204,36704,33287],{"class":273},[204,36706,36707,36709,36711,36713,36715,36717,36719],{"class":206,"line":33290},[204,36708,2583],{"class":210},[204,36710,33295],{"class":214},[204,36712,745],{"class":210},[204,36714,431],{"class":263},[204,36716,1153],{"class":214},[204,36718,1173],{"class":210},[204,36720,33306],{"class":214},[204,36722,36723],{"class":206,"line":33309},[204,36724,33312],{"class":273},[204,36726,36727,36729,36731,36733,36735,36737,36739],{"class":206,"line":33315},[204,36728,33318],{"class":214},[204,36730,254],{"class":263},[204,36732,260],{"class":210},[204,36734,33325],{"class":214},[204,36736,745],{"class":210},[204,36738,431],{"class":263},[204,36740,33332],{"class":214},[204,36742,36743],{"class":206,"line":33335},[204,36744,33338],{"class":273},[204,36746,36747],{"class":206,"line":33341},[204,36748,33344],{"class":273},[204,36750,36751,36753,36755],{"class":206,"line":33347},[204,36752,33350],{"class":214},[204,36754,260],{"class":210},[204,36756,32400],{"class":214},[204,36758,36759],{"class":206,"line":33357},[204,36760,2486],{"emptyLinePlaceholder":135},[204,36762,36763],{"class":206,"line":33362},[204,36764,33365],{"class":273},[204,36766,36767,36769,36771,36773,36775],{"class":206,"line":33368},[204,36768,33371],{"class":214},[204,36770,260],{"class":210},[204,36772,33376],{"class":214},[204,36774,745],{"class":210},[204,36776,33381],{"class":214},[204,36778,36779,36781,36783,36785,36787,36789,36791,36793,36795,36797,36799,36801,36803,36805,36807,36809,36811,36813],{"class":206,"line":33384},[204,36780,32537],{"class":263},[204,36782,215],{"class":214},[204,36784,33391],{"class":319},[204,36786,1109],{"class":263},[204,36788,33396],{"class":210},[204,36790,1159],{"class":263},[204,36792,757],{"class":319},[204,36794,1109],{"class":263},[204,36796,33396],{"class":210},[204,36798,1159],{"class":263},[204,36800,33409],{"class":319},[204,36802,33412],{"class":214},[204,36804,33415],{"class":210},[204,36806,1120],{"class":263},[204,36808,33420],{"class":214},[204,36810,541],{"class":210},[204,36812,1120],{"class":263},[204,36814,30583],{"class":214},[204,36816,36817],{"class":206,"line":33429},[204,36818,36819],{"class":273},"    # 选择最优参数并保存\n",[204,36821,36822],{"class":206,"line":33435},[204,36823,36824],{"class":273},"    # 保存最佳模型权重字典\n",[204,36826,36827,36830,36832],{"class":206,"line":33441},[204,36828,36829],{"class":214},"    torch.save(best_model_wts,",[204,36831,33453],{"class":319},[204,36833,221],{"class":214},[204,36835,36836],{"class":206,"line":33447},[204,36837,33473],{"class":273},[204,36839,36840,36842,36844,36846,36848,36850],{"class":206,"line":33458},[204,36841,33479],{"class":214},[204,36843,260],{"class":210},[204,36845,33484],{"class":214},[204,36847,33487],{"class":5303},[204,36849,260],{"class":210},[204,36851,1632],{"class":214},[204,36853,36854,36856,36858,36860],{"class":206,"line":33464},[204,36855,33497],{"class":319},[204,36857,1072],{"class":214},[204,36859,33502],{"class":263},[204,36861,33505],{"class":214},[204,36863,36864,36866],{"class":206,"line":33470},[204,36865,33511],{"class":319},[204,36867,33514],{"class":214},[204,36869,36870,36872],{"class":206,"line":33476},[204,36871,33520],{"class":319},[204,36873,33523],{"class":214},[204,36875,36876,36878],{"class":206,"line":33494},[204,36877,33529],{"class":319},[204,36879,33532],{"class":214},[204,36881,36882,36884],{"class":206,"line":33508},[204,36883,33538],{"class":319},[204,36885,33541],{"class":214},[204,36887,36888],{"class":206,"line":33517},[204,36889,33547],{"class":214},[204,36891,36892],{"class":206,"line":33526},[204,36893,33553],{"class":273},[204,36895,36896,36898],{"class":206,"line":33535},[204,36897,4176],{"class":210},[204,36899,33561],{"class":214},[204,36901,36902],{"class":206,"line":33544},[204,36903,2486],{"emptyLinePlaceholder":135},[204,36905,36906],{"class":206,"line":33550},[204,36907,33572],{"class":273},[204,36909,36910,36912,36914],{"class":206,"line":33556},[204,36911,32033],{"class":210},[204,36913,33580],{"class":2049},[204,36915,33583],{"class":214},[204,36917,36918],{"class":206,"line":33564},[204,36919,33589],{"class":273},[204,36921,36922,36924,36926,36928,36930,36932,36934,36936],{"class":206,"line":33569},[204,36923,33595],{"class":214},[204,36925,31779],{"class":5303},[204,36927,260],{"class":210},[204,36929,215],{"class":214},[204,36931,711],{"class":263},[204,36933,591],{"class":214},[204,36935,506],{"class":263},[204,36937,30583],{"class":214},[204,36939,36940],{"class":206,"line":33575},[204,36941,33615],{"class":273},[204,36943,36944],{"class":206,"line":33586},[204,36945,33621],{"class":273},[204,36947,36948],{"class":206,"line":33592},[204,36949,33627],{"class":273},[204,36951,36952,36954,36956,36958,36960,36962,36964],{"class":206,"line":33612},[204,36953,31813],{"class":214},[204,36955,431],{"class":263},[204,36957,591],{"class":214},[204,36959,292],{"class":263},[204,36961,591],{"class":214},[204,36963,431],{"class":263},[204,36965,221],{"class":214},[204,36967,36968],{"class":206,"line":33618},[204,36969,33650],{"class":273},[204,36971,36972],{"class":206,"line":33624},[204,36973,33656],{"class":273},[204,36975,36976],{"class":206,"line":33630},[204,36977,33662],{"class":273},[204,36979,36980],{"class":206,"line":33647},[204,36981,33668],{"class":273},[204,36983,36984],{"class":206,"line":33653},[204,36985,33674],{"class":273},[204,36987,36988,36990,36992,36994,36996,36998,37000,37002,37004],{"class":206,"line":33659},[204,36989,33680],{"class":214},[204,36991,33683],{"class":319},[204,36993,33686],{"class":214},[204,36995,33689],{"class":319},[204,36997,591],{"class":214},[204,36999,33694],{"class":5303},[204,37001,260],{"class":210},[204,37003,33699],{"class":319},[204,37005,221],{"class":214},[204,37007,37008,37010,37012,37014,37016,37018,37020,37022,37024],{"class":206,"line":33665},[204,37009,33680],{"class":214},[204,37011,33683],{"class":319},[204,37013,33711],{"class":214},[204,37015,33714],{"class":319},[204,37017,591],{"class":214},[204,37019,33694],{"class":5303},[204,37021,260],{"class":210},[204,37023,33723],{"class":319},[204,37025,221],{"class":214},[204,37027,37028],{"class":206,"line":33671},[204,37029,33731],{"class":273},[204,37031,37032],{"class":206,"line":33677},[204,37033,33737],{"class":214},[204,37035,37036],{"class":206,"line":33704},[204,37037,33743],{"class":273},[204,37039,37040,37042,37044],{"class":206,"line":33728},[204,37041,33749],{"class":214},[204,37043,33752],{"class":319},[204,37045,221],{"class":214},[204,37047,37048,37050,37052],{"class":206,"line":33734},[204,37049,33760],{"class":214},[204,37051,33763],{"class":319},[204,37053,221],{"class":214},[204,37055,37056],{"class":206,"line":33740},[204,37057,33771],{"class":273},[204,37059,37060,37062,37064,37066,37068,37070,37072],{"class":206,"line":33746},[204,37061,31813],{"class":214},[204,37063,431],{"class":263},[204,37065,591],{"class":214},[204,37067,292],{"class":263},[204,37069,591],{"class":214},[204,37071,292],{"class":263},[204,37073,221],{"class":214},[204,37075,37076,37078,37080,37082,37084,37086,37088,37090,37092],{"class":206,"line":33757},[204,37077,33680],{"class":214},[204,37079,33683],{"class":319},[204,37081,33798],{"class":214},[204,37083,33689],{"class":319},[204,37085,591],{"class":214},[204,37087,33694],{"class":5303},[204,37089,260],{"class":210},[204,37091,33809],{"class":319},[204,37093,221],{"class":214},[204,37095,37096,37098,37100,37102,37104,37106,37108,37110,37112],{"class":206,"line":33768},[204,37097,33680],{"class":214},[204,37099,33683],{"class":319},[204,37101,33821],{"class":214},[204,37103,33714],{"class":319},[204,37105,591],{"class":214},[204,37107,33694],{"class":5303},[204,37109,260],{"class":210},[204,37111,33832],{"class":319},[204,37113,221],{"class":214},[204,37115,37116],{"class":206,"line":33774},[204,37117,33840],{"class":273},[204,37119,37120],{"class":206,"line":33791},[204,37121,33737],{"class":214},[204,37123,37124,37126,37128],{"class":206,"line":33814},[204,37125,33749],{"class":214},[204,37127,33683],{"class":319},[204,37129,221],{"class":214},[204,37131,37132,37134,37136],{"class":206,"line":33837},[204,37133,33760],{"class":214},[204,37135,33862],{"class":319},[204,37137,221],{"class":214},[204,37139,37140],{"class":206,"line":33843},[204,37141,33870],{"class":214},[204,37143,37144],{"class":206,"line":33848},[204,37145,2486],{"emptyLinePlaceholder":135},[204,37147,37148],{"class":206,"line":33857},[204,37149,33881],{"class":273},[204,37151,37152,37154,37156,37158,37160],{"class":206,"line":33867},[204,37153,1617],{"class":210},[204,37155,31306],{"class":263},[204,37157,3035],{"class":210},[204,37159,31311],{"class":319},[204,37161,3825],{"class":214},[204,37163,37164],{"class":206,"line":33873},[204,37165,33900],{"class":273},[204,37167,37168,37171,37173],{"class":206,"line":33878},[204,37169,37170],{"class":214},"    AlexNet",[204,37172,260],{"class":210},[204,37174,37175],{"class":214},"AlexNet()\n",[204,37177,37178,37180,37182],{"class":206,"line":33884},[204,37179,33917],{"class":214},[204,37181,260],{"class":210},[204,37183,33922],{"class":214},[204,37185,37186,37188,37190,37193,37195,37197,37199],{"class":206,"line":33897},[204,37187,33479],{"class":214},[204,37189,260],{"class":210},[204,37191,37192],{"class":214},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[204,37194,33935],{"class":5303},[204,37196,260],{"class":210},[204,37198,913],{"class":263},[204,37200,221],{"class":214},[204,37202,37203],{"class":206,"line":33903},[204,37204,33947],{"class":214},[161,37206,37207],{"start":131},[71,37208,33960],{},[196,37210,37212],{"className":30464,"code":37211,"language":30466,"meta":125,"style":125},"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",[81,37213,37214,37220,37230,37240,37250,37254,37264,37274,37285,37289,37293,37297,37305,37321,37331,37347,37357,37371,37375,37385,37395,37405,37411,37415,37419,37427,37431,37447,37455,37459,37463,37471,37479,37483,37487,37491,37495,37501,37505,37515,37523,37531,37535,37539,37543,37551,37555,37571,37575,37579,37583,37595,37599,37611,37615,37619,37631,37635,37645,37649,37653,37665,37669,37677,37681,37685,37693,37697,37705,37709,37713,37717,37721,37725,37741,37749,37753,37757,37805,37811,37815,37825,37833,37841,37845,37849,37853,37857,37865,37869,37885,37889,37897,37905],{"__ignoreMap":125},[204,37215,37216,37218],{"class":206,"line":207},[204,37217,30478],{"class":210},[204,37219,30481],{"class":214},[204,37221,37222,37224,37226,37228],{"class":206,"line":126},[204,37223,30478],{"class":210},[204,37225,31501],{"class":214},[204,37227,31469],{"class":210},[204,37229,31506],{"class":214},[204,37231,37232,37234,37236,37238],{"class":206,"line":131},[204,37233,30823],{"class":210},[204,37235,33988],{"class":214},[204,37237,30478],{"class":210},[204,37239,33993],{"class":214},[204,37241,37242,37244,37246,37248],{"class":206,"line":1281},[204,37243,30823],{"class":210},[204,37245,31484],{"class":214},[204,37247,30478],{"class":210},[204,37249,31489],{"class":214},[204,37251,37252],{"class":206,"line":1287},[204,37253,34008],{"class":273},[204,37255,37256,37258,37260,37262],{"class":206,"line":1301},[204,37257,30823],{"class":210},[204,37259,31454],{"class":214},[204,37261,30478],{"class":210},[204,37263,31459],{"class":214},[204,37265,37266,37268,37270,37272],{"class":206,"line":1307},[204,37267,30823],{"class":210},[204,37269,32000],{"class":214},[204,37271,30478],{"class":210},[204,37273,35643],{"class":214},[204,37275,37276,37278,37281,37283],{"class":206,"line":1398},[204,37277,30823],{"class":210},[204,37279,37280],{"class":214}," 练习.AlexNet.model ",[204,37282,30478],{"class":210},[204,37284,35643],{"class":214},[204,37286,37287],{"class":206,"line":1404},[204,37288,2486],{"emptyLinePlaceholder":135},[204,37290,37291],{"class":206,"line":1416},[204,37292,2486],{"emptyLinePlaceholder":135},[204,37294,37295],{"class":206,"line":1698},[204,37296,34037],{"class":273},[204,37298,37299,37301,37303],{"class":206,"line":1703},[204,37300,32033],{"class":210},[204,37302,34044],{"class":2049},[204,37304,32039],{"class":214},[204,37306,37307,37309,37311,37313,37315,37317,37319],{"class":206,"line":1709},[204,37308,34051],{"class":214},[204,37310,260],{"class":210},[204,37312,31541],{"class":214},[204,37314,31544],{"class":5303},[204,37316,260],{"class":210},[204,37318,31549],{"class":319},[204,37320,31552],{"class":214},[204,37322,37323,37325,37327,37329],{"class":206,"line":1714},[204,37324,34068],{"class":5303},[204,37326,260],{"class":210},[204,37328,34073],{"class":263},[204,37330,31552],{"class":214},[204,37332,37333,37335,37337,37339,37341,37343,37345],{"class":206,"line":1728},[204,37334,34080],{"class":5303},[204,37336,260],{"class":210},[204,37338,31579],{"class":214},[204,37340,31582],{"class":5303},[204,37342,260],{"class":210},[204,37344,35535],{"class":263},[204,37346,31590],{"class":214},[204,37348,37349,37351,37353,37355],{"class":206,"line":1733},[204,37350,34097],{"class":5303},[204,37352,260],{"class":210},[204,37354,31562],{"class":263},[204,37356,221],{"class":214},[204,37358,37359,37361,37363,37365,37367,37369],{"class":206,"line":1739},[204,37360,34108],{"class":214},[204,37362,260],{"class":210},[204,37364,31620],{"class":214},[204,37366,31623],{"class":5303},[204,37368,260],{"class":210},[204,37370,34119],{"class":214},[204,37372,37373],{"class":206,"line":1760},[204,37374,34124],{"class":273},[204,37376,37377,37379,37381,37383],{"class":206,"line":1765},[204,37378,34129],{"class":5303},[204,37380,260],{"class":210},[204,37382,431],{"class":263},[204,37384,31552],{"class":214},[204,37386,37387,37389,37391,37393],{"class":206,"line":1779},[204,37388,34140],{"class":5303},[204,37390,260],{"class":210},[204,37392,31562],{"class":263},[204,37394,31552],{"class":214},[204,37396,37397,37399,37401,37403],{"class":206,"line":1784},[204,37398,34151],{"class":5303},[204,37400,260],{"class":210},[204,37402,405],{"class":263},[204,37404,221],{"class":214},[204,37406,37407,37409],{"class":206,"line":1813},[204,37408,4176],{"class":210},[204,37410,34164],{"class":214},[204,37412,37413],{"class":206,"line":1818},[204,37414,2486],{"emptyLinePlaceholder":135},[204,37416,37417],{"class":206,"line":1835},[204,37418,34173],{"class":273},[204,37420,37421,37423,37425],{"class":206,"line":1840},[204,37422,32033],{"class":210},[204,37424,34180],{"class":2049},[204,37426,34183],{"class":214},[204,37428,37429],{"class":206,"line":1845},[204,37430,34188],{"class":273},[204,37432,37433,37435,37437,37439,37441,37443,37445],{"class":206,"line":1850},[204,37434,31323],{"class":214},[204,37436,260],{"class":210},[204,37438,31330],{"class":319},[204,37440,1790],{"class":210},[204,37442,31335],{"class":214},[204,37444,1787],{"class":210},[204,37446,34205],{"class":319},[204,37448,37449,37451,37453],{"class":206,"line":1864},[204,37450,31375],{"class":214},[204,37452,260],{"class":210},[204,37454,32375],{"class":214},[204,37456,37457],{"class":206,"line":1869},[204,37458,2486],{"emptyLinePlaceholder":135},[204,37460,37461],{"class":206,"line":2663},[204,37462,34222],{"class":273},[204,37464,37465,37467,37469],{"class":206,"line":2677},[204,37466,34227],{"class":214},[204,37468,260],{"class":210},[204,37470,32428],{"class":263},[204,37472,37473,37475,37477],{"class":206,"line":2685},[204,37474,34236],{"class":214},[204,37476,260],{"class":210},[204,37478,3171],{"class":263},[204,37480,37481],{"class":206,"line":2690},[204,37482,2486],{"emptyLinePlaceholder":135},[204,37484,37485],{"class":206,"line":2696},[204,37486,34249],{"class":273},[204,37488,37489],{"class":206,"line":2702},[204,37490,34254],{"class":273},[204,37492,37493],{"class":206,"line":2707},[204,37494,34259],{"class":273},[204,37496,37497,37499],{"class":206,"line":8035},[204,37498,34264],{"class":210},[204,37500,32970],{"class":214},[204,37502,37503],{"class":206,"line":8059},[204,37504,34271],{"class":273},[204,37506,37507,37509,37511,37513],{"class":206,"line":8064},[204,37508,3489],{"class":210},[204,37510,34278],{"class":214},[204,37512,26129],{"class":210},[204,37514,34283],{"class":214},[204,37516,37517,37519,37521],{"class":206,"line":8070},[204,37518,34288],{"class":214},[204,37520,260],{"class":210},[204,37522,34293],{"class":214},[204,37524,37525,37527,37529],{"class":206,"line":8097},[204,37526,34298],{"class":214},[204,37528,260],{"class":210},[204,37530,34303],{"class":214},[204,37532,37533],{"class":206,"line":8102},[204,37534,34308],{"class":273},[204,37536,37537],{"class":206,"line":8108},[204,37538,32961],{"class":214},[204,37540,37541],{"class":206,"line":8120},[204,37542,34317],{"class":273},[204,37544,37545,37547,37549],{"class":206,"line":8132},[204,37546,32746],{"class":214},[204,37548,260],{"class":210},[204,37550,34326],{"class":214},[204,37552,37553],{"class":206,"line":8144},[204,37554,34331],{"class":273},[204,37556,37557,37559,37561,37563,37565,37567,37569],{"class":206,"line":9803},[204,37558,32763],{"class":214},[204,37560,260],{"class":210},[204,37562,32768],{"class":214},[204,37564,32771],{"class":5303},[204,37566,260],{"class":210},[204,37568,431],{"class":263},[204,37570,221],{"class":214},[204,37572,37573],{"class":206,"line":9828},[204,37574,34352],{"class":273},[204,37576,37577],{"class":206,"line":9851},[204,37578,34357],{"class":273},[204,37580,37581],{"class":206,"line":9875},[204,37582,34362],{"class":273},[204,37584,37585,37587,37589,37591,37593],{"class":206,"line":9880},[204,37586,34367],{"class":214},[204,37588,9564],{"class":210},[204,37590,32873],{"class":214},[204,37592,3035],{"class":210},[204,37594,34376],{"class":214},[204,37596,37597],{"class":206,"line":9885},[204,37598,34381],{"class":273},[204,37600,37601,37603,37605,37607,37609],{"class":206,"line":9890},[204,37602,34386],{"class":214},[204,37604,9564],{"class":210},[204,37606,34391],{"class":214},[204,37608,405],{"class":263},[204,37610,221],{"class":214},[204,37612,37613],{"class":206,"line":9899},[204,37614,2486],{"emptyLinePlaceholder":135},[204,37616,37617],{"class":206,"line":9904},[204,37618,34404],{"class":273},[204,37620,37621,37623,37625,37627,37629],{"class":206,"line":9910},[204,37622,34409],{"class":214},[204,37624,260],{"class":210},[204,37626,34414],{"class":214},[204,37628,797],{"class":210},[204,37630,34419],{"class":214},[204,37632,37633],{"class":206,"line":9931},[204,37634,34424],{"class":273},[204,37636,37637,37639,37641,37643],{"class":206,"line":9937},[204,37638,32537],{"class":263},[204,37640,215],{"class":214},[204,37642,34433],{"class":319},[204,37644,34436],{"class":214},[204,37646,37647],{"class":206,"line":9951},[204,37648,2486],{"emptyLinePlaceholder":135},[204,37650,37651],{"class":206,"line":9957},[204,37652,34445],{"class":273},[204,37654,37655,37657,37659,37661,37663],{"class":206,"line":9984},[204,37656,1617],{"class":210},[204,37658,31306],{"class":263},[204,37660,3035],{"class":210},[204,37662,31311],{"class":319},[204,37664,3825],{"class":214},[204,37666,37667],{"class":206,"line":9993},[204,37668,34462],{"class":273},[204,37670,37671,37673,37675],{"class":206,"line":9999},[204,37672,31375],{"class":214},[204,37674,260],{"class":210},[204,37676,37175],{"class":214},[204,37678,37679],{"class":206,"line":10007},[204,37680,34475],{"class":273},[204,37682,37683],{"class":206,"line":10012},[204,37684,34480],{"class":273},[204,37686,37687,37689,37691],{"class":206,"line":16691},[204,37688,34485],{"class":214},[204,37690,34488],{"class":319},[204,37692,30583],{"class":214},[204,37694,37695],{"class":206,"line":16697},[204,37696,34495],{"class":273},[204,37698,37699,37701,37703],{"class":206,"line":16720},[204,37700,34108],{"class":214},[204,37702,260],{"class":210},[204,37704,34504],{"class":214},[204,37706,37707],{"class":206,"line":16726},[204,37708,34509],{"class":273},[204,37710,37711],{"class":206,"line":16749},[204,37712,34514],{"class":214},[204,37714,37715],{"class":206,"line":16763},[204,37716,2486],{"emptyLinePlaceholder":135},[204,37718,37719],{"class":206,"line":16783},[204,37720,34523],{"class":273},[204,37722,37723],{"class":206,"line":16789},[204,37724,34528],{"class":273},[204,37726,37727,37729,37731,37733,37735,37737,37739],{"class":206,"line":16800},[204,37728,31323],{"class":214},[204,37730,260],{"class":210},[204,37732,31330],{"class":319},[204,37734,1790],{"class":210},[204,37736,31335],{"class":214},[204,37738,1787],{"class":210},[204,37740,34205],{"class":319},[204,37742,37743,37745,37747],{"class":206,"line":16823},[204,37744,31375],{"class":214},[204,37746,260],{"class":210},[204,37748,32375],{"class":214},[204,37750,37751],{"class":206,"line":16845},[204,37752,34557],{"class":273},[204,37754,37755],{"class":206,"line":16850},[204,37756,34562],{"class":273},[204,37758,37759,37761,37763,37765,37767,37769,37771,37773,37775,37777,37779,37781,37783,37785,37787,37789,37791,37793,37795,37797,37799,37801,37803],{"class":206,"line":16856},[204,37760,34567],{"class":214},[204,37762,260],{"class":210},[204,37764,1103],{"class":214},[204,37766,34574],{"class":319},[204,37768,591],{"class":214},[204,37770,34579],{"class":319},[204,37772,591],{"class":214},[204,37774,34584],{"class":319},[204,37776,591],{"class":214},[204,37778,34589],{"class":319},[204,37780,591],{"class":214},[204,37782,34594],{"class":319},[204,37784,591],{"class":214},[204,37786,34599],{"class":319},[204,37788,591],{"class":214},[204,37790,34604],{"class":319},[204,37792,591],{"class":214},[204,37794,34609],{"class":319},[204,37796,591],{"class":214},[204,37798,34614],{"class":319},[204,37800,591],{"class":214},[204,37802,34619],{"class":319},[204,37804,33332],{"class":214},[204,37806,37807,37809],{"class":206,"line":16870},[204,37808,34264],{"class":210},[204,37810,32970],{"class":214},[204,37812,37813],{"class":206,"line":16883},[204,37814,34632],{"class":273},[204,37816,37817,37819,37821,37823],{"class":206,"line":16888},[204,37818,3489],{"class":210},[204,37820,34639],{"class":214},[204,37822,26129],{"class":210},[204,37824,34283],{"class":214},[204,37826,37827,37829,37831],{"class":206,"line":16902},[204,37828,32696],{"class":214},[204,37830,260],{"class":210},[204,37832,32701],{"class":214},[204,37834,37835,37837,37839],{"class":206,"line":16907},[204,37836,32711],{"class":214},[204,37838,260],{"class":210},[204,37840,32716],{"class":214},[204,37842,37843],{"class":206,"line":16913},[204,37844,2486],{"emptyLinePlaceholder":135},[204,37846,37847],{"class":206,"line":16918},[204,37848,34668],{"class":273},[204,37850,37851],{"class":206,"line":16932},[204,37852,32961],{"class":214},[204,37854,37855],{"class":206,"line":16937},[204,37856,34677],{"class":273},[204,37858,37859,37861,37863],{"class":206,"line":16942},[204,37860,32746],{"class":214},[204,37862,260],{"class":210},[204,37864,32751],{"class":214},[204,37866,37867],{"class":206,"line":16956},[204,37868,34690],{"class":273},[204,37870,37871,37873,37875,37877,37879,37881,37883],{"class":206,"line":16968},[204,37872,32763],{"class":214},[204,37874,260],{"class":210},[204,37876,32768],{"class":214},[204,37878,32771],{"class":5303},[204,37880,260],{"class":210},[204,37882,431],{"class":263},[204,37884,221],{"class":214},[204,37886,37887],{"class":206,"line":16973},[204,37888,34711],{"class":273},[204,37890,37891,37893,37895],{"class":206,"line":16986},[204,37892,34716],{"class":214},[204,37894,260],{"class":210},[204,37896,34721],{"class":214},[204,37898,37899,37901,37903],{"class":206,"line":16991},[204,37900,34726],{"class":214},[204,37902,260],{"class":210},[204,37904,34731],{"class":214},[204,37906,37907,37909,37911,37913,37915,37917,37919,37921],{"class":206,"line":16996},[204,37908,34736],{"class":263},[204,37910,215],{"class":214},[204,37912,34741],{"class":319},[204,37914,34744],{"class":214},[204,37916,34747],{"class":319},[204,37918,591],{"class":214},[204,37920,34752],{"class":319},[204,37922,34755],{"class":214},[49,37924,37926],{"id":37925},"_22vgg","2.2.VGG",[22085,37928,37930],{"id":37929},"_221原理","2.2.1.原理",[19,37932,37933],{},[23,37934],{"alt":125,"src":37935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,37937,37938],{},[23,37939],{"alt":125,"src":37940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,37942,37943],{},[23,37944],{"alt":125,"src":37945},"\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",[19,37947,37948],{},"参数详细描述：",[19,37950,37951],{},[23,37952],{"alt":125,"src":37953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,37955,37956],{},[23,37957],{"alt":125,"src":37958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,37960,37961],{},[23,37962],{"alt":125,"src":37963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,37965,37966],{},[23,37967],{"alt":125,"src":37968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,37970,37971],{},[23,37972],{"alt":125,"src":37973},"\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",[22085,37975,37977],{"id":37976},"_222代码实现","2.2.2.代码实现",[161,37979,37980],{},[71,37981,37982],{},"网络搭建",[196,37984,37986],{"className":30464,"code":37985,"language":30466,"meta":125,"style":125},"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",[81,37987,37988,37994,38006,38016,38026,38030,38047,38055,38074,38079,38084,38096,38134,38139,38175,38179,38208,38213,38218,38229,38265,38269,38305,38309,38337,38341,38346,38357,38393,38397,38433,38437,38473,38477,38505,38509,38514,38525,38562,38566,38602,38606,38642,38646,38674,38678,38683,38694,38730,38734,38770,38774,38810,38814,38842,38846,38851,38862,38867,38872,38877,38898,38902,38914,38918,38930,38934,38938,38943,38948,38963,38968,38978,38983,38998,39003,39022,39027,39036,39041,39051,39056,39061,39075,39080,39094,39102,39106,39110,39118,39129,39140,39151,39162,39173,39184,39190,39194,39199,39212,39232,39238,39247],{"__ignoreMap":125},[204,37989,37990,37992],{"class":206,"line":207},[204,37991,30478],{"class":210},[204,37993,30481],{"class":214},[204,37995,37996,37998,38001,38003],{"class":206,"line":126},[204,37997,30823],{"class":210},[204,37999,38000],{"class":214}," sympy.core.sympify ",[204,38002,30478],{"class":210},[204,38004,38005],{"class":214}," kernS\n",[204,38007,38008,38010,38012,38014],{"class":206,"line":131},[204,38009,30823],{"class":210},[204,38011,30826],{"class":214},[204,38013,30478],{"class":210},[204,38015,30831],{"class":214},[204,38017,38018,38020,38022,38024],{"class":206,"line":1281},[204,38019,30823],{"class":210},[204,38021,30843],{"class":214},[204,38023,30478],{"class":210},[204,38025,30848],{"class":214},[204,38027,38028],{"class":206,"line":1287},[204,38029,2486],{"emptyLinePlaceholder":135},[204,38031,38032,38034,38037,38039,38041,38043,38045],{"class":206,"line":1301},[204,38033,14781],{"class":210},[204,38035,38036],{"class":2049}," VGG16",[204,38038,215],{"class":214},[204,38040,30864],{"class":2049},[204,38042,771],{"class":214},[204,38044,30869],{"class":2049},[204,38046,30872],{"class":214},[204,38048,38049,38051,38053],{"class":206,"line":1307},[204,38050,30887],{"class":210},[204,38052,30890],{"class":263},[204,38054,30893],{"class":214},[204,38056,38057,38059,38061,38064,38066,38068,38070,38072],{"class":206,"line":1398},[204,38058,30903],{"class":263},[204,38060,215],{"class":214},[204,38062,38063],{"class":263},"VGG16",[204,38065,12522],{"class":214},[204,38067,30909],{"class":263},[204,38069,30912],{"class":214},[204,38071,30915],{"class":263},[204,38073,2062],{"class":214},[204,38075,38076],{"class":206,"line":1404},[204,38077,38078],{"class":273},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[204,38080,38081],{"class":206,"line":1416},[204,38082,38083],{"class":273},"        # 这里用的是灰度图\n",[204,38085,38086,38088,38091,38093],{"class":206,"line":1698},[204,38087,30931],{"class":263},[204,38089,38090],{"class":214},".block1",[204,38092,260],{"class":210},[204,38094,38095],{"class":214},"nn.Sequential(\n",[204,38097,38098,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131],{"class":206,"line":1703},[204,38099,38100],{"class":214},"            nn.Conv2d(",[204,38102,30942],{"class":5303},[204,38104,260],{"class":210},[204,38106,431],{"class":263},[204,38108,591],{"class":214},[204,38110,30951],{"class":5303},[204,38112,260],{"class":210},[204,38114,417],{"class":263},[204,38116,591],{"class":214},[204,38118,30960],{"class":5303},[204,38120,260],{"class":210},[204,38122,286],{"class":263},[204,38124,591],{"class":214},[204,38126,30969],{"class":5303},[204,38128,260],{"class":210},[204,38130,431],{"class":263},[204,38132,38133],{"class":214},"),\n",[204,38135,38136],{"class":206,"line":1709},[204,38137,38138],{"class":214},"            nn.ReLU(),\n",[204,38140,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163,38165,38167,38169,38171,38173],{"class":206,"line":1714},[204,38142,38100],{"class":214},[204,38144,30942],{"class":5303},[204,38146,260],{"class":210},[204,38148,417],{"class":263},[204,38150,591],{"class":214},[204,38152,30951],{"class":5303},[204,38154,260],{"class":210},[204,38156,417],{"class":263},[204,38158,591],{"class":214},[204,38160,30960],{"class":5303},[204,38162,260],{"class":210},[204,38164,286],{"class":263},[204,38166,591],{"class":214},[204,38168,30969],{"class":5303},[204,38170,260],{"class":210},[204,38172,431],{"class":263},[204,38174,38133],{"class":214},[204,38176,38177],{"class":206,"line":1728},[204,38178,38138],{"class":214},[204,38180,38181,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206],{"class":206,"line":1733},[204,38182,38183],{"class":214},"            nn.MaxPool2d(",[204,38185,30960],{"class":5303},[204,38187,260],{"class":210},[204,38189,292],{"class":263},[204,38191,591],{"class":214},[204,38193,31015],{"class":5303},[204,38195,260],{"class":210},[204,38197,292],{"class":263},[204,38199,591],{"class":214},[204,38201,30969],{"class":5303},[204,38203,260],{"class":210},[204,38205,405],{"class":263},[204,38207,221],{"class":214},[204,38209,38210],{"class":206,"line":1739},[204,38211,38212],{"class":214},"        )\n",[204,38214,38215],{"class":206,"line":1760},[204,38216,38217],{"class":273},"        # 第二层\n",[204,38219,38220,38222,38225,38227],{"class":206,"line":1765},[204,38221,30931],{"class":263},[204,38223,38224],{"class":214},".block2",[204,38226,260],{"class":210},[204,38228,38095],{"class":214},[204,38230,38231,38233,38235,38237,38239,38241,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263],{"class":206,"line":1779},[204,38232,38100],{"class":214},[204,38234,30942],{"class":5303},[204,38236,260],{"class":210},[204,38238,417],{"class":263},[204,38240,591],{"class":214},[204,38242,30951],{"class":5303},[204,38244,260],{"class":210},[204,38246,32156],{"class":263},[204,38248,591],{"class":214},[204,38250,30960],{"class":5303},[204,38252,260],{"class":210},[204,38254,286],{"class":263},[204,38256,591],{"class":214},[204,38258,30969],{"class":5303},[204,38260,260],{"class":210},[204,38262,431],{"class":263},[204,38264,38133],{"class":214},[204,38266,38267],{"class":206,"line":1784},[204,38268,38138],{"class":214},[204,38270,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303],{"class":206,"line":1813},[204,38272,38100],{"class":214},[204,38274,30942],{"class":5303},[204,38276,260],{"class":210},[204,38278,32156],{"class":263},[204,38280,591],{"class":214},[204,38282,30951],{"class":5303},[204,38284,260],{"class":210},[204,38286,32156],{"class":263},[204,38288,591],{"class":214},[204,38290,30960],{"class":5303},[204,38292,260],{"class":210},[204,38294,286],{"class":263},[204,38296,591],{"class":214},[204,38298,30969],{"class":5303},[204,38300,260],{"class":210},[204,38302,431],{"class":263},[204,38304,38133],{"class":214},[204,38306,38307],{"class":206,"line":1818},[204,38308,38138],{"class":214},[204,38310,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335],{"class":206,"line":1835},[204,38312,38183],{"class":214},[204,38314,30960],{"class":5303},[204,38316,260],{"class":210},[204,38318,292],{"class":263},[204,38320,591],{"class":214},[204,38322,31015],{"class":5303},[204,38324,260],{"class":210},[204,38326,292],{"class":263},[204,38328,591],{"class":214},[204,38330,30969],{"class":5303},[204,38332,260],{"class":210},[204,38334,405],{"class":263},[204,38336,221],{"class":214},[204,38338,38339],{"class":206,"line":1840},[204,38340,38212],{"class":214},[204,38342,38343],{"class":206,"line":1845},[204,38344,38345],{"class":273},"        # 第三层\n",[204,38347,38348,38350,38353,38355],{"class":206,"line":1850},[204,38349,30931],{"class":263},[204,38351,38352],{"class":214},".block3",[204,38354,260],{"class":210},[204,38356,38095],{"class":214},[204,38358,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387,38389,38391],{"class":206,"line":1864},[204,38360,38100],{"class":214},[204,38362,30942],{"class":5303},[204,38364,260],{"class":210},[204,38366,32156],{"class":263},[204,38368,591],{"class":214},[204,38370,30951],{"class":5303},[204,38372,260],{"class":210},[204,38374,34956],{"class":263},[204,38376,591],{"class":214},[204,38378,30960],{"class":5303},[204,38380,260],{"class":210},[204,38382,286],{"class":263},[204,38384,591],{"class":214},[204,38386,30969],{"class":5303},[204,38388,260],{"class":210},[204,38390,431],{"class":263},[204,38392,38133],{"class":214},[204,38394,38395],{"class":206,"line":1869},[204,38396,38138],{"class":214},[204,38398,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431],{"class":206,"line":2663},[204,38400,38100],{"class":214},[204,38402,30942],{"class":5303},[204,38404,260],{"class":210},[204,38406,34956],{"class":263},[204,38408,591],{"class":214},[204,38410,30951],{"class":5303},[204,38412,260],{"class":210},[204,38414,34956],{"class":263},[204,38416,591],{"class":214},[204,38418,30960],{"class":5303},[204,38420,260],{"class":210},[204,38422,286],{"class":263},[204,38424,591],{"class":214},[204,38426,30969],{"class":5303},[204,38428,260],{"class":210},[204,38430,431],{"class":263},[204,38432,38133],{"class":214},[204,38434,38435],{"class":206,"line":2677},[204,38436,38138],{"class":214},[204,38438,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471],{"class":206,"line":2685},[204,38440,38100],{"class":214},[204,38442,30942],{"class":5303},[204,38444,260],{"class":210},[204,38446,34956],{"class":263},[204,38448,591],{"class":214},[204,38450,30951],{"class":5303},[204,38452,260],{"class":210},[204,38454,34956],{"class":263},[204,38456,591],{"class":214},[204,38458,30960],{"class":5303},[204,38460,260],{"class":210},[204,38462,286],{"class":263},[204,38464,591],{"class":214},[204,38466,30969],{"class":5303},[204,38468,260],{"class":210},[204,38470,431],{"class":263},[204,38472,38133],{"class":214},[204,38474,38475],{"class":206,"line":2690},[204,38476,38138],{"class":214},[204,38478,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503],{"class":206,"line":2696},[204,38480,38183],{"class":214},[204,38482,30960],{"class":5303},[204,38484,260],{"class":210},[204,38486,292],{"class":263},[204,38488,591],{"class":214},[204,38490,31015],{"class":5303},[204,38492,260],{"class":210},[204,38494,292],{"class":263},[204,38496,591],{"class":214},[204,38498,30969],{"class":5303},[204,38500,260],{"class":210},[204,38502,405],{"class":263},[204,38504,221],{"class":214},[204,38506,38507],{"class":206,"line":2702},[204,38508,38212],{"class":214},[204,38510,38511],{"class":206,"line":2707},[204,38512,38513],{"class":273},"        # 第四层\n",[204,38515,38516,38518,38521,38523],{"class":206,"line":8035},[204,38517,30931],{"class":263},[204,38519,38520],{"class":214},".block4",[204,38522,260],{"class":210},[204,38524,38095],{"class":214},[204,38526,38527,38529,38531,38533,38535,38537,38539,38541,38544,38546,38548,38550,38552,38554,38556,38558,38560],{"class":206,"line":8059},[204,38528,38100],{"class":214},[204,38530,30942],{"class":5303},[204,38532,260],{"class":210},[204,38534,34956],{"class":263},[204,38536,591],{"class":214},[204,38538,30951],{"class":5303},[204,38540,260],{"class":210},[204,38542,38543],{"class":263},"512",[204,38545,591],{"class":214},[204,38547,30960],{"class":5303},[204,38549,260],{"class":210},[204,38551,286],{"class":263},[204,38553,591],{"class":214},[204,38555,30969],{"class":5303},[204,38557,260],{"class":210},[204,38559,431],{"class":263},[204,38561,38133],{"class":214},[204,38563,38564],{"class":206,"line":8064},[204,38565,38138],{"class":214},[204,38567,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600],{"class":206,"line":8070},[204,38569,38100],{"class":214},[204,38571,30942],{"class":5303},[204,38573,260],{"class":210},[204,38575,38543],{"class":263},[204,38577,591],{"class":214},[204,38579,30951],{"class":5303},[204,38581,260],{"class":210},[204,38583,38543],{"class":263},[204,38585,591],{"class":214},[204,38587,30960],{"class":5303},[204,38589,260],{"class":210},[204,38591,286],{"class":263},[204,38593,591],{"class":214},[204,38595,30969],{"class":5303},[204,38597,260],{"class":210},[204,38599,431],{"class":263},[204,38601,38133],{"class":214},[204,38603,38604],{"class":206,"line":8097},[204,38605,38138],{"class":214},[204,38607,38608,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640],{"class":206,"line":8102},[204,38609,38100],{"class":214},[204,38611,30942],{"class":5303},[204,38613,260],{"class":210},[204,38615,38543],{"class":263},[204,38617,591],{"class":214},[204,38619,30951],{"class":5303},[204,38621,260],{"class":210},[204,38623,38543],{"class":263},[204,38625,591],{"class":214},[204,38627,30960],{"class":5303},[204,38629,260],{"class":210},[204,38631,286],{"class":263},[204,38633,591],{"class":214},[204,38635,30969],{"class":5303},[204,38637,260],{"class":210},[204,38639,431],{"class":263},[204,38641,38133],{"class":214},[204,38643,38644],{"class":206,"line":8108},[204,38645,38138],{"class":214},[204,38647,38648,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672],{"class":206,"line":8120},[204,38649,38183],{"class":214},[204,38651,30960],{"class":5303},[204,38653,260],{"class":210},[204,38655,292],{"class":263},[204,38657,591],{"class":214},[204,38659,31015],{"class":5303},[204,38661,260],{"class":210},[204,38663,292],{"class":263},[204,38665,591],{"class":214},[204,38667,30969],{"class":5303},[204,38669,260],{"class":210},[204,38671,405],{"class":263},[204,38673,221],{"class":214},[204,38675,38676],{"class":206,"line":8132},[204,38677,38212],{"class":214},[204,38679,38680],{"class":206,"line":8144},[204,38681,38682],{"class":273},"        # 第五层\n",[204,38684,38685,38687,38690,38692],{"class":206,"line":9803},[204,38686,30931],{"class":263},[204,38688,38689],{"class":214},".block5",[204,38691,260],{"class":210},[204,38693,38095],{"class":214},[204,38695,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728],{"class":206,"line":9828},[204,38697,38100],{"class":214},[204,38699,30942],{"class":5303},[204,38701,260],{"class":210},[204,38703,38543],{"class":263},[204,38705,591],{"class":214},[204,38707,30951],{"class":5303},[204,38709,260],{"class":210},[204,38711,38543],{"class":263},[204,38713,591],{"class":214},[204,38715,30960],{"class":5303},[204,38717,260],{"class":210},[204,38719,286],{"class":263},[204,38721,591],{"class":214},[204,38723,30969],{"class":5303},[204,38725,260],{"class":210},[204,38727,431],{"class":263},[204,38729,38133],{"class":214},[204,38731,38732],{"class":206,"line":9851},[204,38733,38138],{"class":214},[204,38735,38736,38738,38740,38742,38744,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768],{"class":206,"line":9875},[204,38737,38100],{"class":214},[204,38739,30942],{"class":5303},[204,38741,260],{"class":210},[204,38743,38543],{"class":263},[204,38745,591],{"class":214},[204,38747,30951],{"class":5303},[204,38749,260],{"class":210},[204,38751,38543],{"class":263},[204,38753,591],{"class":214},[204,38755,30960],{"class":5303},[204,38757,260],{"class":210},[204,38759,286],{"class":263},[204,38761,591],{"class":214},[204,38763,30969],{"class":5303},[204,38765,260],{"class":210},[204,38767,431],{"class":263},[204,38769,38133],{"class":214},[204,38771,38772],{"class":206,"line":9880},[204,38773,38138],{"class":214},[204,38775,38776,38778,38780,38782,38784,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808],{"class":206,"line":9885},[204,38777,38100],{"class":214},[204,38779,30942],{"class":5303},[204,38781,260],{"class":210},[204,38783,38543],{"class":263},[204,38785,591],{"class":214},[204,38787,30951],{"class":5303},[204,38789,260],{"class":210},[204,38791,38543],{"class":263},[204,38793,591],{"class":214},[204,38795,30960],{"class":5303},[204,38797,260],{"class":210},[204,38799,286],{"class":263},[204,38801,591],{"class":214},[204,38803,30969],{"class":5303},[204,38805,260],{"class":210},[204,38807,431],{"class":263},[204,38809,38133],{"class":214},[204,38811,38812],{"class":206,"line":9890},[204,38813,38138],{"class":214},[204,38815,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840],{"class":206,"line":9899},[204,38817,38183],{"class":214},[204,38819,30960],{"class":5303},[204,38821,260],{"class":210},[204,38823,292],{"class":263},[204,38825,591],{"class":214},[204,38827,31015],{"class":5303},[204,38829,260],{"class":210},[204,38831,292],{"class":263},[204,38833,591],{"class":214},[204,38835,30969],{"class":5303},[204,38837,260],{"class":210},[204,38839,405],{"class":263},[204,38841,221],{"class":214},[204,38843,38844],{"class":206,"line":9904},[204,38845,38212],{"class":214},[204,38847,38848],{"class":206,"line":9910},[204,38849,38850],{"class":273},"        # 全连接层\n",[204,38852,38853,38855,38858,38860],{"class":206,"line":9931},[204,38854,30931],{"class":263},[204,38856,38857],{"class":214},".block6",[204,38859,260],{"class":210},[204,38861,38095],{"class":214},[204,38863,38864],{"class":206,"line":9937},[204,38865,38866],{"class":273},"            # 平展操作\n",[204,38868,38869],{"class":206,"line":9951},[204,38870,38871],{"class":273},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[204,38873,38874],{"class":206,"line":9957},[204,38875,38876],{"class":214},"            nn.Flatten(),\n",[204,38878,38879,38882,38884,38886,38888,38890,38892,38894,38896],{"class":206,"line":9984},[204,38880,38881],{"class":214},"            nn.Linear(",[204,38883,582],{"class":263},[204,38885,668],{"class":210},[204,38887,582],{"class":263},[204,38889,668],{"class":210},[204,38891,38543],{"class":263},[204,38893,591],{"class":214},[204,38895,34956],{"class":263},[204,38897,38133],{"class":214},[204,38899,38900],{"class":206,"line":9993},[204,38901,38138],{"class":214},[204,38903,38904,38906,38908,38910,38912],{"class":206,"line":9999},[204,38905,38881],{"class":214},[204,38907,34956],{"class":263},[204,38909,591],{"class":214},[204,38911,32156],{"class":263},[204,38913,38133],{"class":214},[204,38915,38916],{"class":206,"line":10007},[204,38917,38138],{"class":214},[204,38919,38920,38922,38924,38926,38928],{"class":206,"line":10012},[204,38921,38881],{"class":214},[204,38923,32156],{"class":263},[204,38925,591],{"class":214},[204,38927,659],{"class":263},[204,38929,221],{"class":214},[204,38931,38932],{"class":206,"line":16691},[204,38933,38212],{"class":214},[204,38935,38936],{"class":206,"line":16697},[204,38937,2486],{"emptyLinePlaceholder":135},[204,38939,38940],{"class":206,"line":16720},[204,38941,38942],{"class":273},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[204,38944,38945],{"class":206,"line":16726},[204,38946,38947],{"class":273},"        # 循环遍历模型\n",[204,38949,38950,38952,38955,38957,38960],{"class":206,"line":16749},[204,38951,3489],{"class":210},[204,38953,38954],{"class":214}," m ",[204,38956,26129],{"class":210},[204,38958,38959],{"class":263}," self",[204,38961,38962],{"class":214},".modules():\n",[204,38964,38965],{"class":206,"line":16763},[204,38966,38967],{"class":273},"            # print(m)\n",[204,38969,38970,38972,38975],{"class":206,"line":16783},[204,38971,4728],{"class":210},[204,38973,38974],{"class":263}," isinstance",[204,38976,38977],{"class":214},"(m,nn.Conv2d):\n",[204,38979,38980],{"class":206,"line":16789},[204,38981,38982],{"class":273},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[204,38984,38985,38988,38991,38993,38996],{"class":206,"line":16800},[204,38986,38987],{"class":214},"                nn.init.kaiming_normal_(m.weight,",[204,38989,38990],{"class":5303},"nonlinearity",[204,38992,260],{"class":210},[204,38994,38995],{"class":319},"'relu'",[204,38997,221],{"class":214},[204,38999,39000],{"class":206,"line":16823},[204,39001,39002],{"class":273},"                # 判断b参数是否存在\n",[204,39004,39005,39008,39011,39014,39017,39020],{"class":206,"line":16845},[204,39006,39007],{"class":210},"                if",[204,39009,39010],{"class":214}," m.bias ",[204,39012,39013],{"class":210},"is",[204,39015,39016],{"class":210}," not",[204,39018,39019],{"class":263}," None",[204,39021,3825],{"class":214},[204,39023,39024],{"class":206,"line":16850},[204,39025,39026],{"class":273},"                    # 如果参数不存在的化初始化b=0\n",[204,39028,39029,39032,39034],{"class":206,"line":16856},[204,39030,39031],{"class":214},"                    nn.init.constant_(m.bias,",[204,39033,405],{"class":263},[204,39035,221],{"class":214},[204,39037,39038],{"class":206,"line":16870},[204,39039,39040],{"class":273},"            # 全连接层初始化\n",[204,39042,39043,39046,39048],{"class":206,"line":16883},[204,39044,39045],{"class":210},"            elif",[204,39047,38974],{"class":263},[204,39049,39050],{"class":214},"(m,nn.Linear):\n",[204,39052,39053],{"class":206,"line":16888},[204,39054,39055],{"class":273},"                # 这个初始化方法是利用的是正太分布的方式\n",[204,39057,39058],{"class":206,"line":16902},[204,39059,39060],{"class":273},"                # 均值为0，方差为0.01\n",[204,39062,39063,39066,39068,39070,39073],{"class":206,"line":16907},[204,39064,39065],{"class":214},"                nn.init.normal_(m.weight,",[204,39067,405],{"class":263},[204,39069,591],{"class":214},[204,39071,39072],{"class":263},"0.01",[204,39074,221],{"class":214},[204,39076,39077],{"class":206,"line":16913},[204,39078,39079],{"class":273},"                # 初始化b参数\n",[204,39081,39082,39084,39086,39088,39090,39092],{"class":206,"line":16918},[204,39083,39007],{"class":210},[204,39085,39010],{"class":214},[204,39087,39013],{"class":210},[204,39089,39016],{"class":210},[204,39091,39019],{"class":263},[204,39093,3825],{"class":214},[204,39095,39096,39098,39100],{"class":206,"line":16932},[204,39097,39031],{"class":214},[204,39099,405],{"class":263},[204,39101,221],{"class":214},[204,39103,39104],{"class":206,"line":16937},[204,39105,2486],{"emptyLinePlaceholder":135},[204,39107,39108],{"class":206,"line":16942},[204,39109,35251],{"class":273},[204,39111,39112,39114,39116],{"class":206,"line":16956},[204,39113,30887],{"class":210},[204,39115,31179],{"class":2049},[204,39117,31182],{"class":214},[204,39119,39120,39122,39124,39126],{"class":206,"line":16968},[204,39121,31187],{"class":214},[204,39123,260],{"class":210},[204,39125,30909],{"class":263},[204,39127,39128],{"class":214},".block1(x)\n",[204,39130,39131,39133,39135,39137],{"class":206,"line":16973},[204,39132,31187],{"class":214},[204,39134,260],{"class":210},[204,39136,30909],{"class":263},[204,39138,39139],{"class":214},".block2(x)\n",[204,39141,39142,39144,39146,39148],{"class":206,"line":16986},[204,39143,31187],{"class":214},[204,39145,260],{"class":210},[204,39147,30909],{"class":263},[204,39149,39150],{"class":214},".block3(x)\n",[204,39152,39153,39155,39157,39159],{"class":206,"line":16991},[204,39154,31187],{"class":214},[204,39156,260],{"class":210},[204,39158,30909],{"class":263},[204,39160,39161],{"class":214},".block4(x)\n",[204,39163,39164,39166,39168,39170],{"class":206,"line":16996},[204,39165,31187],{"class":214},[204,39167,260],{"class":210},[204,39169,30909],{"class":263},[204,39171,39172],{"class":214},".block5(x)\n",[204,39174,39175,39177,39179,39181],{"class":206,"line":17001},[204,39176,31187],{"class":214},[204,39178,260],{"class":210},[204,39180,30909],{"class":263},[204,39182,39183],{"class":214},".block6(x)\n",[204,39185,39186,39188],{"class":206,"line":17014},[204,39187,14839],{"class":210},[204,39189,31295],{"class":214},[204,39191,39192],{"class":206,"line":17019},[204,39193,2486],{"emptyLinePlaceholder":135},[204,39195,39196],{"class":206,"line":32719},[204,39197,39198],{"class":273},"# 验证模型\n",[204,39200,39201,39203,39205,39207,39210],{"class":206,"line":32725},[204,39202,1617],{"class":210},[204,39204,31306],{"class":263},[204,39206,3035],{"class":210},[204,39208,39209],{"class":319},"'__main__'",[204,39211,3825],{"class":214},[204,39213,39214,39216,39218,39220,39222,39224,39226,39228,39230],{"class":206,"line":32731},[204,39215,31323],{"class":214},[204,39217,260],{"class":210},[204,39219,30537],{"class":214},[204,39221,31330],{"class":319},[204,39223,1790],{"class":210},[204,39225,31335],{"class":214},[204,39227,1787],{"class":210},[204,39229,30562],{"class":319},[204,39231,221],{"class":214},[204,39233,39234,39236],{"class":206,"line":32737},[204,39235,31385],{"class":263},[204,39237,30571],{"class":214},[204,39239,39240,39242,39244],{"class":206,"line":32743},[204,39241,31375],{"class":214},[204,39243,260],{"class":210},[204,39245,39246],{"class":214},"VGG16().to(device)\n",[204,39248,39249,39251,39253,39255,39257,39259,39261,39263],{"class":206,"line":32754},[204,39250,31385],{"class":263},[204,39252,31388],{"class":214},[204,39254,431],{"class":263},[204,39256,591],{"class":214},[204,39258,31587],{"class":263},[204,39260,591],{"class":214},[204,39262,31587],{"class":263},[204,39264,31401],{"class":214},[161,39266,39267],{"start":126},[71,39268,39269],{},"训练代码",[19,39271,39272],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39274,39275],{},"解决方式:",[19,39277,39278],{},"①权重初始化",[196,39280,39282],{"className":30464,"code":39281,"language":30466,"meta":125,"style":125},"# 权重初始化,保证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",[81,39283,39284,39289,39294,39306,39311,39319,39324,39337,39342,39356,39361,39370,39375,39384,39389,39394,39407,39412,39426],{"__ignoreMap":125},[204,39285,39286],{"class":206,"line":207},[204,39287,39288],{"class":273},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[204,39290,39291],{"class":206,"line":126},[204,39292,39293],{"class":273},"# 循环遍历模型\n",[204,39295,39296,39298,39300,39302,39304],{"class":206,"line":131},[204,39297,3111],{"class":210},[204,39299,38954],{"class":214},[204,39301,26129],{"class":210},[204,39303,38959],{"class":263},[204,39305,38962],{"class":214},[204,39307,39308],{"class":206,"line":1281},[204,39309,39310],{"class":273},"    # print(m)\n",[204,39312,39313,39315,39317],{"class":206,"line":1287},[204,39314,3187],{"class":210},[204,39316,38974],{"class":263},[204,39318,38977],{"class":214},[204,39320,39321],{"class":206,"line":1301},[204,39322,39323],{"class":273},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[204,39325,39326,39329,39331,39333,39335],{"class":206,"line":1307},[204,39327,39328],{"class":214},"        nn.init.kaiming_normal_(m.weight,",[204,39330,38990],{"class":5303},[204,39332,260],{"class":210},[204,39334,38995],{"class":319},[204,39336,221],{"class":214},[204,39338,39339],{"class":206,"line":1398},[204,39340,39341],{"class":273},"        # 判断b参数是否存在\n",[204,39343,39344,39346,39348,39350,39352,39354],{"class":206,"line":1404},[204,39345,2583],{"class":210},[204,39347,39010],{"class":214},[204,39349,39013],{"class":210},[204,39351,39016],{"class":210},[204,39353,39019],{"class":263},[204,39355,3825],{"class":214},[204,39357,39358],{"class":206,"line":1416},[204,39359,39360],{"class":273},"            # 如果参数不存在的化初始化b=0\n",[204,39362,39363,39366,39368],{"class":206,"line":1698},[204,39364,39365],{"class":214},"            nn.init.constant_(m.bias,",[204,39367,405],{"class":263},[204,39369,221],{"class":214},[204,39371,39372],{"class":206,"line":1703},[204,39373,39374],{"class":273},"    # 全连接层初始化\n",[204,39376,39377,39380,39382],{"class":206,"line":1709},[204,39378,39379],{"class":210},"    elif",[204,39381,38974],{"class":263},[204,39383,39050],{"class":214},[204,39385,39386],{"class":206,"line":1714},[204,39387,39388],{"class":273},"        # 这个初始化方法是利用的是正太分布的方式\n",[204,39390,39391],{"class":206,"line":1728},[204,39392,39393],{"class":273},"        # 均值为0，方差为0.01\n",[204,39395,39396,39399,39401,39403,39405],{"class":206,"line":1733},[204,39397,39398],{"class":214},"        nn.init.normal_(m.weight,",[204,39400,405],{"class":263},[204,39402,591],{"class":214},[204,39404,39072],{"class":263},[204,39406,221],{"class":214},[204,39408,39409],{"class":206,"line":1739},[204,39410,39411],{"class":273},"        # 初始化b参数\n",[204,39413,39414,39416,39418,39420,39422,39424],{"class":206,"line":1760},[204,39415,2583],{"class":210},[204,39417,39010],{"class":214},[204,39419,39013],{"class":210},[204,39421,39016],{"class":210},[204,39423,39019],{"class":263},[204,39425,3825],{"class":214},[204,39427,39428,39430,39432],{"class":206,"line":1765},[204,39429,39365],{"class":214},[204,39431,405],{"class":263},[204,39433,221],{"class":214},[19,39435,39436],{},"②尽可能地增加批次",[19,39438,39439],{},"训练完整代码：",[196,39441,39442],{"className":30464,"code":37985,"language":30466,"meta":125,"style":125},[81,39443,39444,39450,39460,39470,39480,39484,39500,39508,39526,39530,39534,39544,39580,39584,39620,39624,39652,39656,39660,39670,39706,39710,39746,39750,39778,39782,39786,39796,39832,39836,39872,39876,39912,39916,39944,39948,39952,39962,39998,40002,40038,40042,40078,40082,40110,40114,40118,40128,40164,40168,40204,40208,40244,40248,40276,40280,40284,40294,40298,40302,40306,40326,40330,40342,40346,40358,40362,40366,40370,40374,40386,40390,40398,40402,40414,40418,40432,40436,40444,40448,40456,40460,40464,40476,40480,40494,40502,40506,40510,40518,40528,40538,40548,40558,40568,40578,40584,40588,40592,40604,40624,40630,40638],{"__ignoreMap":125},[204,39445,39446,39448],{"class":206,"line":207},[204,39447,30478],{"class":210},[204,39449,30481],{"class":214},[204,39451,39452,39454,39456,39458],{"class":206,"line":126},[204,39453,30823],{"class":210},[204,39455,38000],{"class":214},[204,39457,30478],{"class":210},[204,39459,38005],{"class":214},[204,39461,39462,39464,39466,39468],{"class":206,"line":131},[204,39463,30823],{"class":210},[204,39465,30826],{"class":214},[204,39467,30478],{"class":210},[204,39469,30831],{"class":214},[204,39471,39472,39474,39476,39478],{"class":206,"line":1281},[204,39473,30823],{"class":210},[204,39475,30843],{"class":214},[204,39477,30478],{"class":210},[204,39479,30848],{"class":214},[204,39481,39482],{"class":206,"line":1287},[204,39483,2486],{"emptyLinePlaceholder":135},[204,39485,39486,39488,39490,39492,39494,39496,39498],{"class":206,"line":1301},[204,39487,14781],{"class":210},[204,39489,38036],{"class":2049},[204,39491,215],{"class":214},[204,39493,30864],{"class":2049},[204,39495,771],{"class":214},[204,39497,30869],{"class":2049},[204,39499,30872],{"class":214},[204,39501,39502,39504,39506],{"class":206,"line":1307},[204,39503,30887],{"class":210},[204,39505,30890],{"class":263},[204,39507,30893],{"class":214},[204,39509,39510,39512,39514,39516,39518,39520,39522,39524],{"class":206,"line":1398},[204,39511,30903],{"class":263},[204,39513,215],{"class":214},[204,39515,38063],{"class":263},[204,39517,12522],{"class":214},[204,39519,30909],{"class":263},[204,39521,30912],{"class":214},[204,39523,30915],{"class":263},[204,39525,2062],{"class":214},[204,39527,39528],{"class":206,"line":1404},[204,39529,38078],{"class":273},[204,39531,39532],{"class":206,"line":1416},[204,39533,38083],{"class":273},[204,39535,39536,39538,39540,39542],{"class":206,"line":1698},[204,39537,30931],{"class":263},[204,39539,38090],{"class":214},[204,39541,260],{"class":210},[204,39543,38095],{"class":214},[204,39545,39546,39548,39550,39552,39554,39556,39558,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578],{"class":206,"line":1703},[204,39547,38100],{"class":214},[204,39549,30942],{"class":5303},[204,39551,260],{"class":210},[204,39553,431],{"class":263},[204,39555,591],{"class":214},[204,39557,30951],{"class":5303},[204,39559,260],{"class":210},[204,39561,417],{"class":263},[204,39563,591],{"class":214},[204,39565,30960],{"class":5303},[204,39567,260],{"class":210},[204,39569,286],{"class":263},[204,39571,591],{"class":214},[204,39573,30969],{"class":5303},[204,39575,260],{"class":210},[204,39577,431],{"class":263},[204,39579,38133],{"class":214},[204,39581,39582],{"class":206,"line":1709},[204,39583,38138],{"class":214},[204,39585,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618],{"class":206,"line":1714},[204,39587,38100],{"class":214},[204,39589,30942],{"class":5303},[204,39591,260],{"class":210},[204,39593,417],{"class":263},[204,39595,591],{"class":214},[204,39597,30951],{"class":5303},[204,39599,260],{"class":210},[204,39601,417],{"class":263},[204,39603,591],{"class":214},[204,39605,30960],{"class":5303},[204,39607,260],{"class":210},[204,39609,286],{"class":263},[204,39611,591],{"class":214},[204,39613,30969],{"class":5303},[204,39615,260],{"class":210},[204,39617,431],{"class":263},[204,39619,38133],{"class":214},[204,39621,39622],{"class":206,"line":1728},[204,39623,38138],{"class":214},[204,39625,39626,39628,39630,39632,39634,39636,39638,39640,39642,39644,39646,39648,39650],{"class":206,"line":1733},[204,39627,38183],{"class":214},[204,39629,30960],{"class":5303},[204,39631,260],{"class":210},[204,39633,292],{"class":263},[204,39635,591],{"class":214},[204,39637,31015],{"class":5303},[204,39639,260],{"class":210},[204,39641,292],{"class":263},[204,39643,591],{"class":214},[204,39645,30969],{"class":5303},[204,39647,260],{"class":210},[204,39649,405],{"class":263},[204,39651,221],{"class":214},[204,39653,39654],{"class":206,"line":1739},[204,39655,38212],{"class":214},[204,39657,39658],{"class":206,"line":1760},[204,39659,38217],{"class":273},[204,39661,39662,39664,39666,39668],{"class":206,"line":1765},[204,39663,30931],{"class":263},[204,39665,38224],{"class":214},[204,39667,260],{"class":210},[204,39669,38095],{"class":214},[204,39671,39672,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704],{"class":206,"line":1779},[204,39673,38100],{"class":214},[204,39675,30942],{"class":5303},[204,39677,260],{"class":210},[204,39679,417],{"class":263},[204,39681,591],{"class":214},[204,39683,30951],{"class":5303},[204,39685,260],{"class":210},[204,39687,32156],{"class":263},[204,39689,591],{"class":214},[204,39691,30960],{"class":5303},[204,39693,260],{"class":210},[204,39695,286],{"class":263},[204,39697,591],{"class":214},[204,39699,30969],{"class":5303},[204,39701,260],{"class":210},[204,39703,431],{"class":263},[204,39705,38133],{"class":214},[204,39707,39708],{"class":206,"line":1784},[204,39709,38138],{"class":214},[204,39711,39712,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744],{"class":206,"line":1813},[204,39713,38100],{"class":214},[204,39715,30942],{"class":5303},[204,39717,260],{"class":210},[204,39719,32156],{"class":263},[204,39721,591],{"class":214},[204,39723,30951],{"class":5303},[204,39725,260],{"class":210},[204,39727,32156],{"class":263},[204,39729,591],{"class":214},[204,39731,30960],{"class":5303},[204,39733,260],{"class":210},[204,39735,286],{"class":263},[204,39737,591],{"class":214},[204,39739,30969],{"class":5303},[204,39741,260],{"class":210},[204,39743,431],{"class":263},[204,39745,38133],{"class":214},[204,39747,39748],{"class":206,"line":1818},[204,39749,38138],{"class":214},[204,39751,39752,39754,39756,39758,39760,39762,39764,39766,39768,39770,39772,39774,39776],{"class":206,"line":1835},[204,39753,38183],{"class":214},[204,39755,30960],{"class":5303},[204,39757,260],{"class":210},[204,39759,292],{"class":263},[204,39761,591],{"class":214},[204,39763,31015],{"class":5303},[204,39765,260],{"class":210},[204,39767,292],{"class":263},[204,39769,591],{"class":214},[204,39771,30969],{"class":5303},[204,39773,260],{"class":210},[204,39775,405],{"class":263},[204,39777,221],{"class":214},[204,39779,39780],{"class":206,"line":1840},[204,39781,38212],{"class":214},[204,39783,39784],{"class":206,"line":1845},[204,39785,38345],{"class":273},[204,39787,39788,39790,39792,39794],{"class":206,"line":1850},[204,39789,30931],{"class":263},[204,39791,38352],{"class":214},[204,39793,260],{"class":210},[204,39795,38095],{"class":214},[204,39797,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830],{"class":206,"line":1864},[204,39799,38100],{"class":214},[204,39801,30942],{"class":5303},[204,39803,260],{"class":210},[204,39805,32156],{"class":263},[204,39807,591],{"class":214},[204,39809,30951],{"class":5303},[204,39811,260],{"class":210},[204,39813,34956],{"class":263},[204,39815,591],{"class":214},[204,39817,30960],{"class":5303},[204,39819,260],{"class":210},[204,39821,286],{"class":263},[204,39823,591],{"class":214},[204,39825,30969],{"class":5303},[204,39827,260],{"class":210},[204,39829,431],{"class":263},[204,39831,38133],{"class":214},[204,39833,39834],{"class":206,"line":1869},[204,39835,38138],{"class":214},[204,39837,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870],{"class":206,"line":2663},[204,39839,38100],{"class":214},[204,39841,30942],{"class":5303},[204,39843,260],{"class":210},[204,39845,34956],{"class":263},[204,39847,591],{"class":214},[204,39849,30951],{"class":5303},[204,39851,260],{"class":210},[204,39853,34956],{"class":263},[204,39855,591],{"class":214},[204,39857,30960],{"class":5303},[204,39859,260],{"class":210},[204,39861,286],{"class":263},[204,39863,591],{"class":214},[204,39865,30969],{"class":5303},[204,39867,260],{"class":210},[204,39869,431],{"class":263},[204,39871,38133],{"class":214},[204,39873,39874],{"class":206,"line":2677},[204,39875,38138],{"class":214},[204,39877,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910],{"class":206,"line":2685},[204,39879,38100],{"class":214},[204,39881,30942],{"class":5303},[204,39883,260],{"class":210},[204,39885,34956],{"class":263},[204,39887,591],{"class":214},[204,39889,30951],{"class":5303},[204,39891,260],{"class":210},[204,39893,34956],{"class":263},[204,39895,591],{"class":214},[204,39897,30960],{"class":5303},[204,39899,260],{"class":210},[204,39901,286],{"class":263},[204,39903,591],{"class":214},[204,39905,30969],{"class":5303},[204,39907,260],{"class":210},[204,39909,431],{"class":263},[204,39911,38133],{"class":214},[204,39913,39914],{"class":206,"line":2690},[204,39915,38138],{"class":214},[204,39917,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942],{"class":206,"line":2696},[204,39919,38183],{"class":214},[204,39921,30960],{"class":5303},[204,39923,260],{"class":210},[204,39925,292],{"class":263},[204,39927,591],{"class":214},[204,39929,31015],{"class":5303},[204,39931,260],{"class":210},[204,39933,292],{"class":263},[204,39935,591],{"class":214},[204,39937,30969],{"class":5303},[204,39939,260],{"class":210},[204,39941,405],{"class":263},[204,39943,221],{"class":214},[204,39945,39946],{"class":206,"line":2702},[204,39947,38212],{"class":214},[204,39949,39950],{"class":206,"line":2707},[204,39951,38513],{"class":273},[204,39953,39954,39956,39958,39960],{"class":206,"line":8035},[204,39955,30931],{"class":263},[204,39957,38520],{"class":214},[204,39959,260],{"class":210},[204,39961,38095],{"class":214},[204,39963,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996],{"class":206,"line":8059},[204,39965,38100],{"class":214},[204,39967,30942],{"class":5303},[204,39969,260],{"class":210},[204,39971,34956],{"class":263},[204,39973,591],{"class":214},[204,39975,30951],{"class":5303},[204,39977,260],{"class":210},[204,39979,38543],{"class":263},[204,39981,591],{"class":214},[204,39983,30960],{"class":5303},[204,39985,260],{"class":210},[204,39987,286],{"class":263},[204,39989,591],{"class":214},[204,39991,30969],{"class":5303},[204,39993,260],{"class":210},[204,39995,431],{"class":263},[204,39997,38133],{"class":214},[204,39999,40000],{"class":206,"line":8064},[204,40001,38138],{"class":214},[204,40003,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036],{"class":206,"line":8070},[204,40005,38100],{"class":214},[204,40007,30942],{"class":5303},[204,40009,260],{"class":210},[204,40011,38543],{"class":263},[204,40013,591],{"class":214},[204,40015,30951],{"class":5303},[204,40017,260],{"class":210},[204,40019,38543],{"class":263},[204,40021,591],{"class":214},[204,40023,30960],{"class":5303},[204,40025,260],{"class":210},[204,40027,286],{"class":263},[204,40029,591],{"class":214},[204,40031,30969],{"class":5303},[204,40033,260],{"class":210},[204,40035,431],{"class":263},[204,40037,38133],{"class":214},[204,40039,40040],{"class":206,"line":8097},[204,40041,38138],{"class":214},[204,40043,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076],{"class":206,"line":8102},[204,40045,38100],{"class":214},[204,40047,30942],{"class":5303},[204,40049,260],{"class":210},[204,40051,38543],{"class":263},[204,40053,591],{"class":214},[204,40055,30951],{"class":5303},[204,40057,260],{"class":210},[204,40059,38543],{"class":263},[204,40061,591],{"class":214},[204,40063,30960],{"class":5303},[204,40065,260],{"class":210},[204,40067,286],{"class":263},[204,40069,591],{"class":214},[204,40071,30969],{"class":5303},[204,40073,260],{"class":210},[204,40075,431],{"class":263},[204,40077,38133],{"class":214},[204,40079,40080],{"class":206,"line":8108},[204,40081,38138],{"class":214},[204,40083,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108],{"class":206,"line":8120},[204,40085,38183],{"class":214},[204,40087,30960],{"class":5303},[204,40089,260],{"class":210},[204,40091,292],{"class":263},[204,40093,591],{"class":214},[204,40095,31015],{"class":5303},[204,40097,260],{"class":210},[204,40099,292],{"class":263},[204,40101,591],{"class":214},[204,40103,30969],{"class":5303},[204,40105,260],{"class":210},[204,40107,405],{"class":263},[204,40109,221],{"class":214},[204,40111,40112],{"class":206,"line":8132},[204,40113,38212],{"class":214},[204,40115,40116],{"class":206,"line":8144},[204,40117,38682],{"class":273},[204,40119,40120,40122,40124,40126],{"class":206,"line":9803},[204,40121,30931],{"class":263},[204,40123,38689],{"class":214},[204,40125,260],{"class":210},[204,40127,38095],{"class":214},[204,40129,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162],{"class":206,"line":9828},[204,40131,38100],{"class":214},[204,40133,30942],{"class":5303},[204,40135,260],{"class":210},[204,40137,38543],{"class":263},[204,40139,591],{"class":214},[204,40141,30951],{"class":5303},[204,40143,260],{"class":210},[204,40145,38543],{"class":263},[204,40147,591],{"class":214},[204,40149,30960],{"class":5303},[204,40151,260],{"class":210},[204,40153,286],{"class":263},[204,40155,591],{"class":214},[204,40157,30969],{"class":5303},[204,40159,260],{"class":210},[204,40161,431],{"class":263},[204,40163,38133],{"class":214},[204,40165,40166],{"class":206,"line":9851},[204,40167,38138],{"class":214},[204,40169,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202],{"class":206,"line":9875},[204,40171,38100],{"class":214},[204,40173,30942],{"class":5303},[204,40175,260],{"class":210},[204,40177,38543],{"class":263},[204,40179,591],{"class":214},[204,40181,30951],{"class":5303},[204,40183,260],{"class":210},[204,40185,38543],{"class":263},[204,40187,591],{"class":214},[204,40189,30960],{"class":5303},[204,40191,260],{"class":210},[204,40193,286],{"class":263},[204,40195,591],{"class":214},[204,40197,30969],{"class":5303},[204,40199,260],{"class":210},[204,40201,431],{"class":263},[204,40203,38133],{"class":214},[204,40205,40206],{"class":206,"line":9880},[204,40207,38138],{"class":214},[204,40209,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242],{"class":206,"line":9885},[204,40211,38100],{"class":214},[204,40213,30942],{"class":5303},[204,40215,260],{"class":210},[204,40217,38543],{"class":263},[204,40219,591],{"class":214},[204,40221,30951],{"class":5303},[204,40223,260],{"class":210},[204,40225,38543],{"class":263},[204,40227,591],{"class":214},[204,40229,30960],{"class":5303},[204,40231,260],{"class":210},[204,40233,286],{"class":263},[204,40235,591],{"class":214},[204,40237,30969],{"class":5303},[204,40239,260],{"class":210},[204,40241,431],{"class":263},[204,40243,38133],{"class":214},[204,40245,40246],{"class":206,"line":9890},[204,40247,38138],{"class":214},[204,40249,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274],{"class":206,"line":9899},[204,40251,38183],{"class":214},[204,40253,30960],{"class":5303},[204,40255,260],{"class":210},[204,40257,292],{"class":263},[204,40259,591],{"class":214},[204,40261,31015],{"class":5303},[204,40263,260],{"class":210},[204,40265,292],{"class":263},[204,40267,591],{"class":214},[204,40269,30969],{"class":5303},[204,40271,260],{"class":210},[204,40273,405],{"class":263},[204,40275,221],{"class":214},[204,40277,40278],{"class":206,"line":9904},[204,40279,38212],{"class":214},[204,40281,40282],{"class":206,"line":9910},[204,40283,38850],{"class":273},[204,40285,40286,40288,40290,40292],{"class":206,"line":9931},[204,40287,30931],{"class":263},[204,40289,38857],{"class":214},[204,40291,260],{"class":210},[204,40293,38095],{"class":214},[204,40295,40296],{"class":206,"line":9937},[204,40297,38866],{"class":273},[204,40299,40300],{"class":206,"line":9951},[204,40301,38871],{"class":273},[204,40303,40304],{"class":206,"line":9957},[204,40305,38876],{"class":214},[204,40307,40308,40310,40312,40314,40316,40318,40320,40322,40324],{"class":206,"line":9984},[204,40309,38881],{"class":214},[204,40311,582],{"class":263},[204,40313,668],{"class":210},[204,40315,582],{"class":263},[204,40317,668],{"class":210},[204,40319,38543],{"class":263},[204,40321,591],{"class":214},[204,40323,34956],{"class":263},[204,40325,38133],{"class":214},[204,40327,40328],{"class":206,"line":9993},[204,40329,38138],{"class":214},[204,40331,40332,40334,40336,40338,40340],{"class":206,"line":9999},[204,40333,38881],{"class":214},[204,40335,34956],{"class":263},[204,40337,591],{"class":214},[204,40339,32156],{"class":263},[204,40341,38133],{"class":214},[204,40343,40344],{"class":206,"line":10007},[204,40345,38138],{"class":214},[204,40347,40348,40350,40352,40354,40356],{"class":206,"line":10012},[204,40349,38881],{"class":214},[204,40351,32156],{"class":263},[204,40353,591],{"class":214},[204,40355,659],{"class":263},[204,40357,221],{"class":214},[204,40359,40360],{"class":206,"line":16691},[204,40361,38212],{"class":214},[204,40363,40364],{"class":206,"line":16697},[204,40365,2486],{"emptyLinePlaceholder":135},[204,40367,40368],{"class":206,"line":16720},[204,40369,38942],{"class":273},[204,40371,40372],{"class":206,"line":16726},[204,40373,38947],{"class":273},[204,40375,40376,40378,40380,40382,40384],{"class":206,"line":16749},[204,40377,3489],{"class":210},[204,40379,38954],{"class":214},[204,40381,26129],{"class":210},[204,40383,38959],{"class":263},[204,40385,38962],{"class":214},[204,40387,40388],{"class":206,"line":16763},[204,40389,38967],{"class":273},[204,40391,40392,40394,40396],{"class":206,"line":16783},[204,40393,4728],{"class":210},[204,40395,38974],{"class":263},[204,40397,38977],{"class":214},[204,40399,40400],{"class":206,"line":16789},[204,40401,38982],{"class":273},[204,40403,40404,40406,40408,40410,40412],{"class":206,"line":16800},[204,40405,38987],{"class":214},[204,40407,38990],{"class":5303},[204,40409,260],{"class":210},[204,40411,38995],{"class":319},[204,40413,221],{"class":214},[204,40415,40416],{"class":206,"line":16823},[204,40417,39002],{"class":273},[204,40419,40420,40422,40424,40426,40428,40430],{"class":206,"line":16845},[204,40421,39007],{"class":210},[204,40423,39010],{"class":214},[204,40425,39013],{"class":210},[204,40427,39016],{"class":210},[204,40429,39019],{"class":263},[204,40431,3825],{"class":214},[204,40433,40434],{"class":206,"line":16850},[204,40435,39026],{"class":273},[204,40437,40438,40440,40442],{"class":206,"line":16856},[204,40439,39031],{"class":214},[204,40441,405],{"class":263},[204,40443,221],{"class":214},[204,40445,40446],{"class":206,"line":16870},[204,40447,39040],{"class":273},[204,40449,40450,40452,40454],{"class":206,"line":16883},[204,40451,39045],{"class":210},[204,40453,38974],{"class":263},[204,40455,39050],{"class":214},[204,40457,40458],{"class":206,"line":16888},[204,40459,39055],{"class":273},[204,40461,40462],{"class":206,"line":16902},[204,40463,39060],{"class":273},[204,40465,40466,40468,40470,40472,40474],{"class":206,"line":16907},[204,40467,39065],{"class":214},[204,40469,405],{"class":263},[204,40471,591],{"class":214},[204,40473,39072],{"class":263},[204,40475,221],{"class":214},[204,40477,40478],{"class":206,"line":16913},[204,40479,39079],{"class":273},[204,40481,40482,40484,40486,40488,40490,40492],{"class":206,"line":16918},[204,40483,39007],{"class":210},[204,40485,39010],{"class":214},[204,40487,39013],{"class":210},[204,40489,39016],{"class":210},[204,40491,39019],{"class":263},[204,40493,3825],{"class":214},[204,40495,40496,40498,40500],{"class":206,"line":16932},[204,40497,39031],{"class":214},[204,40499,405],{"class":263},[204,40501,221],{"class":214},[204,40503,40504],{"class":206,"line":16937},[204,40505,2486],{"emptyLinePlaceholder":135},[204,40507,40508],{"class":206,"line":16942},[204,40509,35251],{"class":273},[204,40511,40512,40514,40516],{"class":206,"line":16956},[204,40513,30887],{"class":210},[204,40515,31179],{"class":2049},[204,40517,31182],{"class":214},[204,40519,40520,40522,40524,40526],{"class":206,"line":16968},[204,40521,31187],{"class":214},[204,40523,260],{"class":210},[204,40525,30909],{"class":263},[204,40527,39128],{"class":214},[204,40529,40530,40532,40534,40536],{"class":206,"line":16973},[204,40531,31187],{"class":214},[204,40533,260],{"class":210},[204,40535,30909],{"class":263},[204,40537,39139],{"class":214},[204,40539,40540,40542,40544,40546],{"class":206,"line":16986},[204,40541,31187],{"class":214},[204,40543,260],{"class":210},[204,40545,30909],{"class":263},[204,40547,39150],{"class":214},[204,40549,40550,40552,40554,40556],{"class":206,"line":16991},[204,40551,31187],{"class":214},[204,40553,260],{"class":210},[204,40555,30909],{"class":263},[204,40557,39161],{"class":214},[204,40559,40560,40562,40564,40566],{"class":206,"line":16996},[204,40561,31187],{"class":214},[204,40563,260],{"class":210},[204,40565,30909],{"class":263},[204,40567,39172],{"class":214},[204,40569,40570,40572,40574,40576],{"class":206,"line":17001},[204,40571,31187],{"class":214},[204,40573,260],{"class":210},[204,40575,30909],{"class":263},[204,40577,39183],{"class":214},[204,40579,40580,40582],{"class":206,"line":17014},[204,40581,14839],{"class":210},[204,40583,31295],{"class":214},[204,40585,40586],{"class":206,"line":17019},[204,40587,2486],{"emptyLinePlaceholder":135},[204,40589,40590],{"class":206,"line":32719},[204,40591,39198],{"class":273},[204,40593,40594,40596,40598,40600,40602],{"class":206,"line":32725},[204,40595,1617],{"class":210},[204,40597,31306],{"class":263},[204,40599,3035],{"class":210},[204,40601,39209],{"class":319},[204,40603,3825],{"class":214},[204,40605,40606,40608,40610,40612,40614,40616,40618,40620,40622],{"class":206,"line":32731},[204,40607,31323],{"class":214},[204,40609,260],{"class":210},[204,40611,30537],{"class":214},[204,40613,31330],{"class":319},[204,40615,1790],{"class":210},[204,40617,31335],{"class":214},[204,40619,1787],{"class":210},[204,40621,30562],{"class":319},[204,40623,221],{"class":214},[204,40625,40626,40628],{"class":206,"line":32737},[204,40627,31385],{"class":263},[204,40629,30571],{"class":214},[204,40631,40632,40634,40636],{"class":206,"line":32743},[204,40633,31375],{"class":214},[204,40635,260],{"class":210},[204,40637,39246],{"class":214},[204,40639,40640,40642,40644,40646,40648,40650,40652,40654],{"class":206,"line":32754},[204,40641,31385],{"class":263},[204,40643,31388],{"class":214},[204,40645,431],{"class":263},[204,40647,591],{"class":214},[204,40649,31587],{"class":263},[204,40651,591],{"class":214},[204,40653,31587],{"class":263},[204,40655,31401],{"class":214},[161,40657,40658],{"start":131},[71,40659,40660],{},"测试代码",[196,40662,40664],{"className":30464,"code":40663,"language":30466,"meta":125,"style":125},"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",[81,40665,40666,40672,40682,40692,40696,40706,40717,40721,40725,40729,40737,40753,40763,40779,40789,40803,40807,40817,40827,40837,40843,40847,40851,40859,40863,40879,40887,40891,40895,40903,40911,40915,40919,40923,40927,40933,40937,40947,40955,40963,40967,40971,40975,40983,40987,41003,41007,41011,41015,41027,41031,41043,41047,41051,41063,41067,41077,41081,41085,41097,41101,41110,41114,41118,41126,41130,41138,41142,41146,41150,41154,41158,41174,41182,41186,41190,41238,41244,41248,41258,41266,41274,41278,41282,41286,41290,41298,41302,41318,41322,41330,41338],{"__ignoreMap":125},[204,40667,40668,40670],{"class":206,"line":207},[204,40669,30478],{"class":210},[204,40671,30481],{"class":214},[204,40673,40674,40676,40678,40680],{"class":206,"line":126},[204,40675,30478],{"class":210},[204,40677,31501],{"class":214},[204,40679,31469],{"class":210},[204,40681,31506],{"class":214},[204,40683,40684,40686,40688,40690],{"class":206,"line":131},[204,40685,30823],{"class":210},[204,40687,31484],{"class":214},[204,40689,30478],{"class":210},[204,40691,31489],{"class":214},[204,40693,40694],{"class":206,"line":1281},[204,40695,34008],{"class":273},[204,40697,40698,40700,40702,40704],{"class":206,"line":1287},[204,40699,30823],{"class":210},[204,40701,31454],{"class":214},[204,40703,30478],{"class":210},[204,40705,31459],{"class":214},[204,40707,40708,40710,40712,40714],{"class":206,"line":1301},[204,40709,30823],{"class":210},[204,40711,32000],{"class":214},[204,40713,30478],{"class":210},[204,40715,40716],{"class":263}," VGG16\n",[204,40718,40719],{"class":206,"line":1307},[204,40720,2486],{"emptyLinePlaceholder":135},[204,40722,40723],{"class":206,"line":1398},[204,40724,2486],{"emptyLinePlaceholder":135},[204,40726,40727],{"class":206,"line":1404},[204,40728,34037],{"class":273},[204,40730,40731,40733,40735],{"class":206,"line":1416},[204,40732,32033],{"class":210},[204,40734,34044],{"class":2049},[204,40736,32039],{"class":214},[204,40738,40739,40741,40743,40745,40747,40749,40751],{"class":206,"line":1698},[204,40740,34051],{"class":214},[204,40742,260],{"class":210},[204,40744,31541],{"class":214},[204,40746,31544],{"class":5303},[204,40748,260],{"class":210},[204,40750,31549],{"class":319},[204,40752,31552],{"class":214},[204,40754,40755,40757,40759,40761],{"class":206,"line":1703},[204,40756,34068],{"class":5303},[204,40758,260],{"class":210},[204,40760,34073],{"class":263},[204,40762,31552],{"class":214},[204,40764,40765,40767,40769,40771,40773,40775,40777],{"class":206,"line":1709},[204,40766,34080],{"class":5303},[204,40768,260],{"class":210},[204,40770,31579],{"class":214},[204,40772,31582],{"class":5303},[204,40774,260],{"class":210},[204,40776,31587],{"class":263},[204,40778,31590],{"class":214},[204,40780,40781,40783,40785,40787],{"class":206,"line":1714},[204,40782,34097],{"class":5303},[204,40784,260],{"class":210},[204,40786,31562],{"class":263},[204,40788,221],{"class":214},[204,40790,40791,40793,40795,40797,40799,40801],{"class":206,"line":1728},[204,40792,34108],{"class":214},[204,40794,260],{"class":210},[204,40796,31620],{"class":214},[204,40798,31623],{"class":5303},[204,40800,260],{"class":210},[204,40802,34119],{"class":214},[204,40804,40805],{"class":206,"line":1733},[204,40806,34124],{"class":273},[204,40808,40809,40811,40813,40815],{"class":206,"line":1739},[204,40810,34129],{"class":5303},[204,40812,260],{"class":210},[204,40814,431],{"class":263},[204,40816,31552],{"class":214},[204,40818,40819,40821,40823,40825],{"class":206,"line":1760},[204,40820,34140],{"class":5303},[204,40822,260],{"class":210},[204,40824,31562],{"class":263},[204,40826,31552],{"class":214},[204,40828,40829,40831,40833,40835],{"class":206,"line":1765},[204,40830,34151],{"class":5303},[204,40832,260],{"class":210},[204,40834,405],{"class":263},[204,40836,221],{"class":214},[204,40838,40839,40841],{"class":206,"line":1779},[204,40840,4176],{"class":210},[204,40842,34164],{"class":214},[204,40844,40845],{"class":206,"line":1784},[204,40846,2486],{"emptyLinePlaceholder":135},[204,40848,40849],{"class":206,"line":1813},[204,40850,34173],{"class":273},[204,40852,40853,40855,40857],{"class":206,"line":1818},[204,40854,32033],{"class":210},[204,40856,34180],{"class":2049},[204,40858,34183],{"class":214},[204,40860,40861],{"class":206,"line":1835},[204,40862,34188],{"class":273},[204,40864,40865,40867,40869,40871,40873,40875,40877],{"class":206,"line":1840},[204,40866,31323],{"class":214},[204,40868,260],{"class":210},[204,40870,31330],{"class":319},[204,40872,1790],{"class":210},[204,40874,31335],{"class":214},[204,40876,1787],{"class":210},[204,40878,34205],{"class":319},[204,40880,40881,40883,40885],{"class":206,"line":1845},[204,40882,31375],{"class":214},[204,40884,260],{"class":210},[204,40886,32375],{"class":214},[204,40888,40889],{"class":206,"line":1850},[204,40890,2486],{"emptyLinePlaceholder":135},[204,40892,40893],{"class":206,"line":1864},[204,40894,34222],{"class":273},[204,40896,40897,40899,40901],{"class":206,"line":1869},[204,40898,34227],{"class":214},[204,40900,260],{"class":210},[204,40902,32428],{"class":263},[204,40904,40905,40907,40909],{"class":206,"line":2663},[204,40906,34236],{"class":214},[204,40908,260],{"class":210},[204,40910,3171],{"class":263},[204,40912,40913],{"class":206,"line":2677},[204,40914,2486],{"emptyLinePlaceholder":135},[204,40916,40917],{"class":206,"line":2685},[204,40918,34249],{"class":273},[204,40920,40921],{"class":206,"line":2690},[204,40922,34254],{"class":273},[204,40924,40925],{"class":206,"line":2696},[204,40926,34259],{"class":273},[204,40928,40929,40931],{"class":206,"line":2702},[204,40930,34264],{"class":210},[204,40932,32970],{"class":214},[204,40934,40935],{"class":206,"line":2707},[204,40936,34271],{"class":273},[204,40938,40939,40941,40943,40945],{"class":206,"line":8035},[204,40940,3489],{"class":210},[204,40942,34278],{"class":214},[204,40944,26129],{"class":210},[204,40946,34283],{"class":214},[204,40948,40949,40951,40953],{"class":206,"line":8059},[204,40950,34288],{"class":214},[204,40952,260],{"class":210},[204,40954,34293],{"class":214},[204,40956,40957,40959,40961],{"class":206,"line":8064},[204,40958,34298],{"class":214},[204,40960,260],{"class":210},[204,40962,34303],{"class":214},[204,40964,40965],{"class":206,"line":8070},[204,40966,34308],{"class":273},[204,40968,40969],{"class":206,"line":8097},[204,40970,32961],{"class":214},[204,40972,40973],{"class":206,"line":8102},[204,40974,34317],{"class":273},[204,40976,40977,40979,40981],{"class":206,"line":8108},[204,40978,32746],{"class":214},[204,40980,260],{"class":210},[204,40982,34326],{"class":214},[204,40984,40985],{"class":206,"line":8120},[204,40986,34331],{"class":273},[204,40988,40989,40991,40993,40995,40997,40999,41001],{"class":206,"line":8132},[204,40990,32763],{"class":214},[204,40992,260],{"class":210},[204,40994,32768],{"class":214},[204,40996,32771],{"class":5303},[204,40998,260],{"class":210},[204,41000,431],{"class":263},[204,41002,221],{"class":214},[204,41004,41005],{"class":206,"line":8144},[204,41006,34352],{"class":273},[204,41008,41009],{"class":206,"line":9803},[204,41010,34357],{"class":273},[204,41012,41013],{"class":206,"line":9828},[204,41014,34362],{"class":273},[204,41016,41017,41019,41021,41023,41025],{"class":206,"line":9851},[204,41018,34367],{"class":214},[204,41020,9564],{"class":210},[204,41022,32873],{"class":214},[204,41024,3035],{"class":210},[204,41026,34376],{"class":214},[204,41028,41029],{"class":206,"line":9875},[204,41030,34381],{"class":273},[204,41032,41033,41035,41037,41039,41041],{"class":206,"line":9880},[204,41034,34386],{"class":214},[204,41036,9564],{"class":210},[204,41038,34391],{"class":214},[204,41040,405],{"class":263},[204,41042,221],{"class":214},[204,41044,41045],{"class":206,"line":9885},[204,41046,2486],{"emptyLinePlaceholder":135},[204,41048,41049],{"class":206,"line":9890},[204,41050,34404],{"class":273},[204,41052,41053,41055,41057,41059,41061],{"class":206,"line":9899},[204,41054,34409],{"class":214},[204,41056,260],{"class":210},[204,41058,34414],{"class":214},[204,41060,797],{"class":210},[204,41062,34419],{"class":214},[204,41064,41065],{"class":206,"line":9904},[204,41066,34424],{"class":273},[204,41068,41069,41071,41073,41075],{"class":206,"line":9910},[204,41070,32537],{"class":263},[204,41072,215],{"class":214},[204,41074,34433],{"class":319},[204,41076,34436],{"class":214},[204,41078,41079],{"class":206,"line":9931},[204,41080,2486],{"emptyLinePlaceholder":135},[204,41082,41083],{"class":206,"line":9937},[204,41084,34445],{"class":273},[204,41086,41087,41089,41091,41093,41095],{"class":206,"line":9951},[204,41088,1617],{"class":210},[204,41090,31306],{"class":263},[204,41092,3035],{"class":210},[204,41094,31311],{"class":319},[204,41096,3825],{"class":214},[204,41098,41099],{"class":206,"line":9957},[204,41100,34462],{"class":273},[204,41102,41103,41105,41107],{"class":206,"line":9984},[204,41104,31375],{"class":214},[204,41106,260],{"class":210},[204,41108,41109],{"class":214},"VGG16()\n",[204,41111,41112],{"class":206,"line":9993},[204,41113,34475],{"class":273},[204,41115,41116],{"class":206,"line":9999},[204,41117,34480],{"class":273},[204,41119,41120,41122,41124],{"class":206,"line":10007},[204,41121,34485],{"class":214},[204,41123,34488],{"class":319},[204,41125,30583],{"class":214},[204,41127,41128],{"class":206,"line":10012},[204,41129,34495],{"class":273},[204,41131,41132,41134,41136],{"class":206,"line":16691},[204,41133,34108],{"class":214},[204,41135,260],{"class":210},[204,41137,34504],{"class":214},[204,41139,41140],{"class":206,"line":16697},[204,41141,34509],{"class":273},[204,41143,41144],{"class":206,"line":16720},[204,41145,34514],{"class":214},[204,41147,41148],{"class":206,"line":16726},[204,41149,2486],{"emptyLinePlaceholder":135},[204,41151,41152],{"class":206,"line":16749},[204,41153,34523],{"class":273},[204,41155,41156],{"class":206,"line":16763},[204,41157,34528],{"class":273},[204,41159,41160,41162,41164,41166,41168,41170,41172],{"class":206,"line":16783},[204,41161,31323],{"class":214},[204,41163,260],{"class":210},[204,41165,31330],{"class":319},[204,41167,1790],{"class":210},[204,41169,31335],{"class":214},[204,41171,1787],{"class":210},[204,41173,34205],{"class":319},[204,41175,41176,41178,41180],{"class":206,"line":16789},[204,41177,31375],{"class":214},[204,41179,260],{"class":210},[204,41181,32375],{"class":214},[204,41183,41184],{"class":206,"line":16800},[204,41185,34557],{"class":273},[204,41187,41188],{"class":206,"line":16823},[204,41189,34562],{"class":273},[204,41191,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236],{"class":206,"line":16845},[204,41193,34567],{"class":214},[204,41195,260],{"class":210},[204,41197,1103],{"class":214},[204,41199,34574],{"class":319},[204,41201,591],{"class":214},[204,41203,34579],{"class":319},[204,41205,591],{"class":214},[204,41207,34584],{"class":319},[204,41209,591],{"class":214},[204,41211,34589],{"class":319},[204,41213,591],{"class":214},[204,41215,34594],{"class":319},[204,41217,591],{"class":214},[204,41219,34599],{"class":319},[204,41221,591],{"class":214},[204,41223,34604],{"class":319},[204,41225,591],{"class":214},[204,41227,34609],{"class":319},[204,41229,591],{"class":214},[204,41231,34614],{"class":319},[204,41233,591],{"class":214},[204,41235,34619],{"class":319},[204,41237,33332],{"class":214},[204,41239,41240,41242],{"class":206,"line":16850},[204,41241,34264],{"class":210},[204,41243,32970],{"class":214},[204,41245,41246],{"class":206,"line":16856},[204,41247,34632],{"class":273},[204,41249,41250,41252,41254,41256],{"class":206,"line":16870},[204,41251,3489],{"class":210},[204,41253,34639],{"class":214},[204,41255,26129],{"class":210},[204,41257,34283],{"class":214},[204,41259,41260,41262,41264],{"class":206,"line":16883},[204,41261,32696],{"class":214},[204,41263,260],{"class":210},[204,41265,32701],{"class":214},[204,41267,41268,41270,41272],{"class":206,"line":16888},[204,41269,32711],{"class":214},[204,41271,260],{"class":210},[204,41273,32716],{"class":214},[204,41275,41276],{"class":206,"line":16902},[204,41277,2486],{"emptyLinePlaceholder":135},[204,41279,41280],{"class":206,"line":16907},[204,41281,34668],{"class":273},[204,41283,41284],{"class":206,"line":16913},[204,41285,32961],{"class":214},[204,41287,41288],{"class":206,"line":16918},[204,41289,34677],{"class":273},[204,41291,41292,41294,41296],{"class":206,"line":16932},[204,41293,32746],{"class":214},[204,41295,260],{"class":210},[204,41297,32751],{"class":214},[204,41299,41300],{"class":206,"line":16937},[204,41301,34690],{"class":273},[204,41303,41304,41306,41308,41310,41312,41314,41316],{"class":206,"line":16942},[204,41305,32763],{"class":214},[204,41307,260],{"class":210},[204,41309,32768],{"class":214},[204,41311,32771],{"class":5303},[204,41313,260],{"class":210},[204,41315,431],{"class":263},[204,41317,221],{"class":214},[204,41319,41320],{"class":206,"line":16956},[204,41321,34711],{"class":273},[204,41323,41324,41326,41328],{"class":206,"line":16968},[204,41325,34716],{"class":214},[204,41327,260],{"class":210},[204,41329,34721],{"class":214},[204,41331,41332,41334,41336],{"class":206,"line":16973},[204,41333,34726],{"class":214},[204,41335,260],{"class":210},[204,41337,34731],{"class":214},[204,41339,41340,41342,41344,41346,41348,41350,41352,41354],{"class":206,"line":16986},[204,41341,34736],{"class":263},[204,41343,215],{"class":214},[204,41345,34741],{"class":319},[204,41347,34744],{"class":214},[204,41349,34747],{"class":319},[204,41351,591],{"class":214},[204,41353,34752],{"class":319},[204,41355,34755],{"class":214},[49,41357,41359],{"id":41358},"_23googlenet","2.3.GoogLeNet",[22085,41361,41363],{"id":41362},"_231原理","2.3.1.原理",[161,41365,41366],{},[71,41367,41368],{},"网络结构",[19,41370,41371],{},[23,41372],{"alt":125,"src":41373},"\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",[19,41375,41376],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41378,41379],{},[23,41380],{"alt":125,"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-024.png",[19,41383,41384],{},[23,41385],{"alt":125,"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-025.png",[19,41388,41389],{},[23,41390],{"alt":125,"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-026.png",[161,41393,41394],{"start":126},[71,41395,41396],{},"1x1卷积的优点",[19,41398,41399],{},[23,41400],{"alt":125,"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-027.png",[161,41403,41404],{"start":131},[71,41405,41406],{},"全局平均池化层优点",[19,41408,41409],{},[23,41410],{"alt":125,"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-028.png",[19,41413,41414],{},[23,41415],{"alt":125,"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-029.png",[161,41418,41419],{"start":1281},[71,41420,41421],{},"参数详细描述",[19,41423,41424],{},[23,41425],{"alt":125,"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-030.png",[19,41428,41429],{},[23,41430],{"alt":125,"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-031.png",[19,41433,41434],{},[23,41435],{"alt":125,"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-032.png",[19,41438,41439],{},[23,41440],{"alt":125,"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-033.png",[19,41443,41444],{},[23,41445],{"alt":125,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,41448,41449],{},[23,41450],{"alt":125,"src":41451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,41453,41454],{},[23,41455],{"alt":125,"src":41456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,41458,41459],{},[23,41460],{"alt":125,"src":41461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,41463,41464],{},[23,41465],{"alt":125,"src":41466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,41468,41469],{},[23,41470],{"alt":125,"src":41471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,41473,41474],{},[23,41475],{"alt":125,"src":41476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,41478,41479],{},[23,41480],{"alt":125,"src":41481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,41483,41484],{},[23,41485],{"alt":125,"src":41486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,41488,41489],{},[23,41490],{"alt":125,"src":41491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,41493,41494],{},[23,41495],{"alt":125,"src":41496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,41498,41499],{},[23,41500],{"alt":125,"src":41501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,41503,41504],{},[23,41505],{"alt":125,"src":41506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,41508,41509],{},[23,41510],{"alt":125,"src":41511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,41513,41514],{},[23,41515],{"alt":125,"src":41516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,41518,41519],{},[23,41520],{"alt":125,"src":41521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,41523,41524],{},[23,41525],{"alt":125,"src":41526},"\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",[22085,41528,41530],{"id":41529},"_232代码实现","2.3.2.代码实现",[161,41532,41533],{},[71,41534,30797],{},[19,41536,41537],{},"根据原理一步一步搭建即可",[196,41539,41541],{"className":30464,"code":41540,"language":30466,"meta":125,"style":125},"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",[81,41542,41543,41549,41559,41569,41573,41590,41599,41614,41624,41629,41662,41667,41704,41751,41756,41792,41839,41844,41849,41884,41916,41920,41928,41944,41968,41993,42014,42019,42034,42038,42042,42047,42064,42069,42078,42093,42104,42148,42152,42180,42184,42195,42223,42227,42264,42268,42296,42300,42311,42347,42379,42407,42411,42422,42456,42488,42520,42553,42587,42615,42619,42630,42663,42695,42709,42713,42726,42730,42735,42747,42755,42777,42782,42787,42792,42797,42802,42807,42821,42829,42838,42851,42866,42875,42879,42887,42898,42909,42920,42931,42942,42948,42952,42957,42969,42989,42998],{"__ignoreMap":125},[204,41544,41545,41547],{"class":206,"line":207},[204,41546,30478],{"class":210},[204,41548,30481],{"class":214},[204,41550,41551,41553,41555,41557],{"class":206,"line":126},[204,41552,30823],{"class":210},[204,41554,30826],{"class":214},[204,41556,30478],{"class":210},[204,41558,30831],{"class":214},[204,41560,41561,41563,41565,41567],{"class":206,"line":131},[204,41562,30823],{"class":210},[204,41564,30843],{"class":214},[204,41566,30478],{"class":210},[204,41568,30848],{"class":214},[204,41570,41571],{"class":206,"line":1281},[204,41572,2486],{"emptyLinePlaceholder":135},[204,41574,41575,41577,41580,41582,41584,41586,41588],{"class":206,"line":1287},[204,41576,14781],{"class":210},[204,41578,41579],{"class":2049}," Inception",[204,41581,215],{"class":214},[204,41583,30864],{"class":2049},[204,41585,771],{"class":214},[204,41587,30869],{"class":2049},[204,41589,30872],{"class":214},[204,41591,41592,41594,41596],{"class":206,"line":1301},[204,41593,30887],{"class":210},[204,41595,30890],{"class":263},[204,41597,41598],{"class":214},"(self,in_channels,c1,c2,c3,c4):\n",[204,41600,41601,41603,41606,41608,41610,41612],{"class":206,"line":1307},[204,41602,30903],{"class":263},[204,41604,41605],{"class":214},"(Inception,",[204,41607,30909],{"class":263},[204,41609,30912],{"class":214},[204,41611,30915],{"class":263},[204,41613,2062],{"class":214},[204,41615,41616,41618,41620,41622],{"class":206,"line":1398},[204,41617,30931],{"class":263},[204,41619,34857],{"class":214},[204,41621,260],{"class":210},[204,41623,34862],{"class":214},[204,41625,41626],{"class":206,"line":1404},[204,41627,41628],{"class":273},"        # 路线1：定义1*1卷积\n",[204,41630,41631,41633,41636,41638,41640,41642,41644,41647,41649,41651,41654,41656,41658,41660],{"class":206,"line":1416},[204,41632,30931],{"class":263},[204,41634,41635],{"class":214},".p1_1",[204,41637,260],{"class":210},[204,41639,30939],{"class":214},[204,41641,30942],{"class":5303},[204,41643,260],{"class":210},[204,41645,41646],{"class":214},"in_channels,",[204,41648,30951],{"class":5303},[204,41650,260],{"class":210},[204,41652,41653],{"class":214},"c1,",[204,41655,30960],{"class":5303},[204,41657,260],{"class":210},[204,41659,431],{"class":263},[204,41661,221],{"class":214},[204,41663,41664],{"class":206,"line":1698},[204,41665,41666],{"class":273},"        # 路线2：定义1*1卷积和3*3\n",[204,41668,41669,41671,41674,41676,41678,41680,41682,41684,41686,41688,41691,41693,41696,41698,41700,41702],{"class":206,"line":1703},[204,41670,30931],{"class":263},[204,41672,41673],{"class":214},".p2_1",[204,41675,260],{"class":210},[204,41677,30939],{"class":214},[204,41679,30942],{"class":5303},[204,41681,260],{"class":210},[204,41683,41646],{"class":214},[204,41685,30951],{"class":5303},[204,41687,260],{"class":210},[204,41689,41690],{"class":214},"c2[",[204,41692,405],{"class":263},[204,41694,41695],{"class":214},"],",[204,41697,30960],{"class":5303},[204,41699,260],{"class":210},[204,41701,431],{"class":263},[204,41703,221],{"class":214},[204,41705,41706,41708,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745,41747,41749],{"class":206,"line":1709},[204,41707,30931],{"class":263},[204,41709,41710],{"class":214},".p2_2",[204,41712,260],{"class":210},[204,41714,30939],{"class":214},[204,41716,30942],{"class":5303},[204,41718,260],{"class":210},[204,41720,41690],{"class":214},[204,41722,405],{"class":263},[204,41724,41695],{"class":214},[204,41726,30951],{"class":5303},[204,41728,260],{"class":210},[204,41730,41690],{"class":214},[204,41732,431],{"class":263},[204,41734,41695],{"class":214},[204,41736,30960],{"class":5303},[204,41738,260],{"class":210},[204,41740,286],{"class":263},[204,41742,591],{"class":214},[204,41744,30969],{"class":5303},[204,41746,260],{"class":210},[204,41748,431],{"class":263},[204,41750,221],{"class":214},[204,41752,41753],{"class":206,"line":1714},[204,41754,41755],{"class":273},"        # 路线3：定义1*1卷积和5*5\n",[204,41757,41758,41760,41763,41765,41767,41769,41771,41773,41775,41777,41780,41782,41784,41786,41788,41790],{"class":206,"line":1728},[204,41759,30931],{"class":263},[204,41761,41762],{"class":214},".p3_1",[204,41764,260],{"class":210},[204,41766,30939],{"class":214},[204,41768,30942],{"class":5303},[204,41770,260],{"class":210},[204,41772,41646],{"class":214},[204,41774,30951],{"class":5303},[204,41776,260],{"class":210},[204,41778,41779],{"class":214},"c3[",[204,41781,405],{"class":263},[204,41783,41695],{"class":214},[204,41785,30960],{"class":5303},[204,41787,260],{"class":210},[204,41789,431],{"class":263},[204,41791,221],{"class":214},[204,41793,41794,41796,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819,41821,41823,41825,41827,41829,41831,41833,41835,41837],{"class":206,"line":1733},[204,41795,30931],{"class":263},[204,41797,41798],{"class":214},".p3_2",[204,41800,260],{"class":210},[204,41802,30939],{"class":214},[204,41804,30942],{"class":5303},[204,41806,260],{"class":210},[204,41808,41779],{"class":214},[204,41810,405],{"class":263},[204,41812,41695],{"class":214},[204,41814,30951],{"class":5303},[204,41816,260],{"class":210},[204,41818,41779],{"class":214},[204,41820,431],{"class":263},[204,41822,41695],{"class":214},[204,41824,30960],{"class":5303},[204,41826,260],{"class":210},[204,41828,532],{"class":263},[204,41830,591],{"class":214},[204,41832,30969],{"class":5303},[204,41834,260],{"class":210},[204,41836,292],{"class":263},[204,41838,221],{"class":214},[204,41840,41841],{"class":206,"line":1739},[204,41842,41843],{"class":273},"        # 路线4：定义3*3最大池化和1*1卷积\n",[204,41845,41846],{"class":206,"line":1760},[204,41847,41848],{"class":273},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[204,41850,41851,41853,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882],{"class":206,"line":1765},[204,41852,30931],{"class":263},[204,41854,41855],{"class":214},".p4_1",[204,41857,260],{"class":210},[204,41859,34915],{"class":214},[204,41861,30960],{"class":5303},[204,41863,260],{"class":210},[204,41865,286],{"class":263},[204,41867,591],{"class":214},[204,41869,31015],{"class":5303},[204,41871,260],{"class":210},[204,41873,431],{"class":263},[204,41875,591],{"class":214},[204,41877,30969],{"class":5303},[204,41879,260],{"class":210},[204,41881,431],{"class":263},[204,41883,221],{"class":214},[204,41885,41886,41888,41891,41893,41895,41897,41899,41901,41903,41905,41908,41910,41912,41914],{"class":206,"line":1779},[204,41887,30931],{"class":263},[204,41889,41890],{"class":214},".p4_2",[204,41892,260],{"class":210},[204,41894,30939],{"class":214},[204,41896,30942],{"class":5303},[204,41898,260],{"class":210},[204,41900,41646],{"class":214},[204,41902,30951],{"class":5303},[204,41904,260],{"class":210},[204,41906,41907],{"class":214},"c4,",[204,41909,30960],{"class":5303},[204,41911,260],{"class":210},[204,41913,431],{"class":263},[204,41915,221],{"class":214},[204,41917,41918],{"class":206,"line":1784},[204,41919,2486],{"emptyLinePlaceholder":135},[204,41921,41922,41924,41926],{"class":206,"line":1813},[204,41923,30887],{"class":210},[204,41925,31179],{"class":2049},[204,41927,31182],{"class":214},[204,41929,41930,41933,41935,41937,41939,41941],{"class":206,"line":1818},[204,41931,41932],{"class":214},"        p1",[204,41934,260],{"class":210},[204,41936,30909],{"class":263},[204,41938,35270],{"class":214},[204,41940,30909],{"class":263},[204,41942,41943],{"class":214},".p1_1(x))\n",[204,41945,41946,41948,41950,41952,41954,41956,41959,41961,41963,41965],{"class":206,"line":1835},[204,41947,7172],{"class":214},[204,41949,260],{"class":210},[204,41951,30909],{"class":263},[204,41953,35270],{"class":214},[204,41955,30909],{"class":263},[204,41957,41958],{"class":214},".p2_2(",[204,41960,30909],{"class":263},[204,41962,35270],{"class":214},[204,41964,30909],{"class":263},[204,41966,41967],{"class":214},".p2_1(x))))\n",[204,41969,41970,41973,41975,41977,41979,41981,41984,41986,41988,41990],{"class":206,"line":1840},[204,41971,41972],{"class":214},"        p3",[204,41974,260],{"class":210},[204,41976,30909],{"class":263},[204,41978,35270],{"class":214},[204,41980,30909],{"class":263},[204,41982,41983],{"class":214},".p3_2(",[204,41985,30909],{"class":263},[204,41987,35270],{"class":214},[204,41989,30909],{"class":263},[204,41991,41992],{"class":214},".p3_1(x))))\n",[204,41994,41995,41998,42000,42002,42004,42006,42009,42011],{"class":206,"line":1845},[204,41996,41997],{"class":214},"        p4",[204,41999,260],{"class":210},[204,42001,30909],{"class":263},[204,42003,35270],{"class":214},[204,42005,30909],{"class":263},[204,42007,42008],{"class":214},".p4_2(",[204,42010,30909],{"class":263},[204,42012,42013],{"class":214},".p4_1(x)))\n",[204,42015,42016],{"class":206,"line":1850},[204,42017,42018],{"class":273},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[204,42020,42021,42023,42026,42028,42030,42032],{"class":206,"line":1864},[204,42022,14839],{"class":210},[204,42024,42025],{"class":214}," torch.cat((p1,p2,p3,p4),",[204,42027,32771],{"class":5303},[204,42029,260],{"class":210},[204,42031,431],{"class":263},[204,42033,221],{"class":214},[204,42035,42036],{"class":206,"line":1869},[204,42037,2486],{"emptyLinePlaceholder":135},[204,42039,42040],{"class":206,"line":2663},[204,42041,2486],{"emptyLinePlaceholder":135},[204,42043,42044],{"class":206,"line":2677},[204,42045,42046],{"class":273},"# 搭建GoogLeNet网络\n",[204,42048,42049,42051,42054,42056,42058,42060,42062],{"class":206,"line":2685},[204,42050,14781],{"class":210},[204,42052,42053],{"class":2049}," GoogLeNet",[204,42055,215],{"class":214},[204,42057,30864],{"class":2049},[204,42059,771],{"class":214},[204,42061,30869],{"class":2049},[204,42063,30872],{"class":214},[204,42065,42066],{"class":206,"line":2690},[204,42067,42068],{"class":273},"    # 必须把Inception导入到里边\n",[204,42070,42071,42073,42075],{"class":206,"line":2696},[204,42072,30887],{"class":210},[204,42074,30890],{"class":263},[204,42076,42077],{"class":214},"(self,Inception):\n",[204,42079,42080,42082,42085,42087,42089,42091],{"class":206,"line":2702},[204,42081,30903],{"class":263},[204,42083,42084],{"class":214},"(GoogLeNet,",[204,42086,30909],{"class":263},[204,42088,30912],{"class":214},[204,42090,30915],{"class":263},[204,42092,2062],{"class":214},[204,42094,42095,42097,42100,42102],{"class":206,"line":2707},[204,42096,30931],{"class":263},[204,42098,42099],{"class":214},".b1",[204,42101,260],{"class":210},[204,42103,38095],{"class":214},[204,42105,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146],{"class":206,"line":8035},[204,42107,38100],{"class":214},[204,42109,30942],{"class":5303},[204,42111,260],{"class":210},[204,42113,431],{"class":263},[204,42115,591],{"class":214},[204,42117,30951],{"class":5303},[204,42119,260],{"class":210},[204,42121,417],{"class":263},[204,42123,591],{"class":214},[204,42125,30960],{"class":5303},[204,42127,260],{"class":210},[204,42129,582],{"class":263},[204,42131,591],{"class":214},[204,42133,31015],{"class":5303},[204,42135,260],{"class":210},[204,42137,292],{"class":263},[204,42139,591],{"class":214},[204,42141,30969],{"class":5303},[204,42143,260],{"class":210},[204,42145,286],{"class":263},[204,42147,38133],{"class":214},[204,42149,42150],{"class":206,"line":8059},[204,42151,38138],{"class":214},[204,42153,42154,42156,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178],{"class":206,"line":8064},[204,42155,38183],{"class":214},[204,42157,30960],{"class":5303},[204,42159,260],{"class":210},[204,42161,286],{"class":263},[204,42163,591],{"class":214},[204,42165,31015],{"class":5303},[204,42167,260],{"class":210},[204,42169,292],{"class":263},[204,42171,591],{"class":214},[204,42173,30969],{"class":5303},[204,42175,260],{"class":210},[204,42177,431],{"class":263},[204,42179,221],{"class":214},[204,42181,42182],{"class":206,"line":8070},[204,42183,38212],{"class":214},[204,42185,42186,42188,42191,42193],{"class":206,"line":8097},[204,42187,30931],{"class":263},[204,42189,42190],{"class":214},".b2",[204,42192,260],{"class":210},[204,42194,38095],{"class":214},[204,42196,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221],{"class":206,"line":8102},[204,42198,38100],{"class":214},[204,42200,30942],{"class":5303},[204,42202,260],{"class":210},[204,42204,417],{"class":263},[204,42206,591],{"class":214},[204,42208,30951],{"class":5303},[204,42210,260],{"class":210},[204,42212,417],{"class":263},[204,42214,591],{"class":214},[204,42216,30960],{"class":5303},[204,42218,260],{"class":210},[204,42220,431],{"class":263},[204,42222,38133],{"class":214},[204,42224,42225],{"class":206,"line":8108},[204,42226,38138],{"class":214},[204,42228,42229,42231,42233,42235,42237,42239,42241,42243,42246,42248,42250,42252,42254,42256,42258,42260,42262],{"class":206,"line":8120},[204,42230,38100],{"class":214},[204,42232,30942],{"class":5303},[204,42234,260],{"class":210},[204,42236,417],{"class":263},[204,42238,591],{"class":214},[204,42240,30951],{"class":5303},[204,42242,260],{"class":210},[204,42244,42245],{"class":263},"192",[204,42247,591],{"class":214},[204,42249,30960],{"class":5303},[204,42251,260],{"class":210},[204,42253,286],{"class":263},[204,42255,591],{"class":214},[204,42257,30969],{"class":5303},[204,42259,260],{"class":210},[204,42261,431],{"class":263},[204,42263,38133],{"class":214},[204,42265,42266],{"class":206,"line":8132},[204,42267,38138],{"class":214},[204,42269,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294],{"class":206,"line":8144},[204,42271,38183],{"class":214},[204,42273,30960],{"class":5303},[204,42275,260],{"class":210},[204,42277,286],{"class":263},[204,42279,591],{"class":214},[204,42281,31015],{"class":5303},[204,42283,260],{"class":210},[204,42285,292],{"class":263},[204,42287,591],{"class":214},[204,42289,30969],{"class":5303},[204,42291,260],{"class":210},[204,42293,431],{"class":263},[204,42295,221],{"class":214},[204,42297,42298],{"class":206,"line":9803},[204,42299,38212],{"class":214},[204,42301,42302,42304,42307,42309],{"class":206,"line":9828},[204,42303,30931],{"class":263},[204,42305,42306],{"class":214},".b3",[204,42308,260],{"class":210},[204,42310,38095],{"class":214},[204,42312,42313,42316,42318,42320,42322,42325,42327,42329,42331,42334,42336,42338,42340,42343,42345],{"class":206,"line":9851},[204,42314,42315],{"class":214},"            Inception(",[204,42317,42245],{"class":263},[204,42319,591],{"class":214},[204,42321,417],{"class":263},[204,42323,42324],{"class":214},",(",[204,42326,423],{"class":263},[204,42328,591],{"class":214},[204,42330,32156],{"class":263},[204,42332,42333],{"class":214},"),(",[204,42335,814],{"class":263},[204,42337,591],{"class":214},[204,42339,411],{"class":263},[204,42341,42342],{"class":214},"),",[204,42344,411],{"class":263},[204,42346,38133],{"class":214},[204,42348,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377],{"class":206,"line":9875},[204,42350,42315],{"class":214},[204,42352,34956],{"class":263},[204,42354,591],{"class":214},[204,42356,32156],{"class":263},[204,42358,42324],{"class":214},[204,42360,32156],{"class":263},[204,42362,591],{"class":214},[204,42364,42245],{"class":263},[204,42366,42333],{"class":214},[204,42368,411],{"class":263},[204,42370,591],{"class":214},[204,42372,423],{"class":263},[204,42374,42342],{"class":214},[204,42376,417],{"class":263},[204,42378,38133],{"class":214},[204,42380,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405],{"class":206,"line":9880},[204,42382,38183],{"class":214},[204,42384,30960],{"class":5303},[204,42386,260],{"class":210},[204,42388,286],{"class":263},[204,42390,591],{"class":214},[204,42392,31015],{"class":5303},[204,42394,260],{"class":210},[204,42396,292],{"class":263},[204,42398,591],{"class":214},[204,42400,30969],{"class":5303},[204,42402,260],{"class":210},[204,42404,431],{"class":263},[204,42406,221],{"class":214},[204,42408,42409],{"class":206,"line":9885},[204,42410,38212],{"class":214},[204,42412,42413,42415,42418,42420],{"class":206,"line":9890},[204,42414,30931],{"class":263},[204,42416,42417],{"class":214},".b4",[204,42419,260],{"class":210},[204,42421,38095],{"class":214},[204,42423,42424,42426,42429,42431,42433,42435,42437,42439,42442,42444,42446,42448,42450,42452,42454],{"class":206,"line":9899},[204,42425,42315],{"class":214},[204,42427,42428],{"class":263},"480",[204,42430,591],{"class":214},[204,42432,42245],{"class":263},[204,42434,42324],{"class":214},[204,42436,423],{"class":263},[204,42438,591],{"class":214},[204,42440,42441],{"class":263},"208",[204,42443,42333],{"class":214},[204,42445,814],{"class":263},[204,42447,591],{"class":214},[204,42449,820],{"class":263},[204,42451,42342],{"class":214},[204,42453,417],{"class":263},[204,42455,38133],{"class":214},[204,42457,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486],{"class":206,"line":9904},[204,42459,42315],{"class":214},[204,42461,38543],{"class":263},[204,42463,591],{"class":214},[204,42465,21135],{"class":263},[204,42467,42324],{"class":214},[204,42469,831],{"class":263},[204,42471,591],{"class":214},[204,42473,31587],{"class":263},[204,42475,42333],{"class":214},[204,42477,1013],{"class":263},[204,42479,591],{"class":214},[204,42481,417],{"class":263},[204,42483,42342],{"class":214},[204,42485,417],{"class":263},[204,42487,38133],{"class":214},[204,42489,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518],{"class":206,"line":9910},[204,42491,42315],{"class":214},[204,42493,38543],{"class":263},[204,42495,591],{"class":214},[204,42497,32156],{"class":263},[204,42499,42324],{"class":214},[204,42501,32156],{"class":263},[204,42503,591],{"class":214},[204,42505,34956],{"class":263},[204,42507,42333],{"class":214},[204,42509,1013],{"class":263},[204,42511,591],{"class":214},[204,42513,417],{"class":263},[204,42515,42342],{"class":214},[204,42517,417],{"class":263},[204,42519,38133],{"class":214},[204,42521,42522,42524,42526,42528,42530,42532,42534,42536,42539,42541,42543,42545,42547,42549,42551],{"class":206,"line":9931},[204,42523,42315],{"class":214},[204,42525,38543],{"class":263},[204,42527,591],{"class":214},[204,42529,831],{"class":263},[204,42531,42324],{"class":214},[204,42533,32156],{"class":263},[204,42535,591],{"class":214},[204,42537,42538],{"class":263},"288",[204,42540,42333],{"class":214},[204,42542,411],{"class":263},[204,42544,591],{"class":214},[204,42546,417],{"class":263},[204,42548,42342],{"class":214},[204,42550,417],{"class":263},[204,42552,38133],{"class":214},[204,42554,42555,42557,42560,42562,42564,42566,42568,42570,42573,42575,42577,42579,42581,42583,42585],{"class":206,"line":9937},[204,42556,42315],{"class":214},[204,42558,42559],{"class":263},"528",[204,42561,591],{"class":214},[204,42563,34956],{"class":263},[204,42565,42324],{"class":214},[204,42567,21135],{"class":263},[204,42569,591],{"class":214},[204,42571,42572],{"class":263},"320",[204,42574,42333],{"class":214},[204,42576,411],{"class":263},[204,42578,591],{"class":214},[204,42580,32156],{"class":263},[204,42582,42342],{"class":214},[204,42584,32156],{"class":263},[204,42586,38133],{"class":214},[204,42588,42589,42591,42593,42595,42597,42599,42601,42603,42605,42607,42609,42611,42613],{"class":206,"line":9951},[204,42590,38183],{"class":214},[204,42592,30960],{"class":5303},[204,42594,260],{"class":210},[204,42596,286],{"class":263},[204,42598,591],{"class":214},[204,42600,31015],{"class":5303},[204,42602,260],{"class":210},[204,42604,292],{"class":263},[204,42606,591],{"class":214},[204,42608,30969],{"class":5303},[204,42610,260],{"class":210},[204,42612,431],{"class":263},[204,42614,221],{"class":214},[204,42616,42617],{"class":206,"line":9957},[204,42618,38212],{"class":214},[204,42620,42621,42623,42626,42628],{"class":206,"line":9984},[204,42622,30931],{"class":263},[204,42624,42625],{"class":214},".b5",[204,42627,260],{"class":210},[204,42629,38095],{"class":214},[204,42631,42632,42634,42637,42639,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661],{"class":206,"line":9993},[204,42633,42315],{"class":214},[204,42635,42636],{"class":263},"832",[204,42638,591],{"class":214},[204,42640,34956],{"class":263},[204,42642,42324],{"class":214},[204,42644,21135],{"class":263},[204,42646,591],{"class":214},[204,42648,42572],{"class":263},[204,42650,42333],{"class":214},[204,42652,411],{"class":263},[204,42654,591],{"class":214},[204,42656,32156],{"class":263},[204,42658,42342],{"class":214},[204,42660,32156],{"class":263},[204,42662,38133],{"class":214},[204,42664,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693],{"class":206,"line":9999},[204,42666,42315],{"class":214},[204,42668,42636],{"class":263},[204,42670,591],{"class":214},[204,42672,35026],{"class":263},[204,42674,42324],{"class":214},[204,42676,42245],{"class":263},[204,42678,591],{"class":214},[204,42680,35026],{"class":263},[204,42682,42333],{"class":214},[204,42684,820],{"class":263},[204,42686,591],{"class":214},[204,42688,32156],{"class":263},[204,42690,42342],{"class":214},[204,42692,32156],{"class":263},[204,42694,38133],{"class":214},[204,42696,42697,42700,42702,42704,42706],{"class":206,"line":10007},[204,42698,42699],{"class":214},"            nn.AdaptiveAvgPool2d((",[204,42701,431],{"class":263},[204,42703,591],{"class":214},[204,42705,431],{"class":263},[204,42707,42708],{"class":214},")),\n",[204,42710,42711],{"class":206,"line":10012},[204,42712,38876],{"class":214},[204,42714,42715,42717,42720,42722,42724],{"class":206,"line":16691},[204,42716,38881],{"class":214},[204,42718,42719],{"class":263},"1024",[204,42721,591],{"class":214},[204,42723,659],{"class":263},[204,42725,221],{"class":214},[204,42727,42728],{"class":206,"line":16697},[204,42729,38212],{"class":214},[204,42731,42732],{"class":206,"line":16720},[204,42733,42734],{"class":273},"        # 对模型参数初始化\n",[204,42736,42737,42739,42741,42743,42745],{"class":206,"line":16726},[204,42738,3489],{"class":210},[204,42740,38954],{"class":214},[204,42742,26129],{"class":210},[204,42744,38959],{"class":263},[204,42746,38962],{"class":214},[204,42748,42749,42751,42753],{"class":206,"line":16749},[204,42750,4728],{"class":210},[204,42752,38974],{"class":263},[204,42754,38977],{"class":214},[204,42756,42757,42759,42762,42764,42767,42769,42771,42773,42775],{"class":206,"line":16763},[204,42758,38987],{"class":214},[204,42760,42761],{"class":5303},"mode",[204,42763,260],{"class":210},[204,42765,42766],{"class":319},"'fan_out'",[204,42768,591],{"class":214},[204,42770,38990],{"class":5303},[204,42772,260],{"class":210},[204,42774,38995],{"class":319},[204,42776,221],{"class":214},[204,42778,42779],{"class":206,"line":16783},[204,42780,42781],{"class":273},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[204,42783,42784],{"class":206,"line":16789},[204,42785,42786],{"class":273},"                # ② mode = 'fan_out'决定使用的fan值：\n",[204,42788,42789],{"class":206,"line":16800},[204,42790,42791],{"class":273},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[204,42793,42794],{"class":206,"line":16823},[204,42795,42796],{"class":273},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[204,42798,42799],{"class":206,"line":16845},[204,42800,42801],{"class":273},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[204,42803,42804],{"class":206,"line":16850},[204,42805,42806],{"class":273},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[204,42808,42809,42811,42813,42815,42817,42819],{"class":206,"line":16856},[204,42810,39007],{"class":210},[204,42812,39010],{"class":214},[204,42814,39013],{"class":210},[204,42816,39016],{"class":210},[204,42818,39019],{"class":263},[204,42820,3825],{"class":214},[204,42822,42823,42825,42827],{"class":206,"line":16870},[204,42824,39031],{"class":214},[204,42826,405],{"class":263},[204,42828,221],{"class":214},[204,42830,42831,42834,42836],{"class":206,"line":16883},[204,42832,42833],{"class":210},"                elif",[204,42835,38974],{"class":263},[204,42837,39050],{"class":214},[204,42839,42840,42843,42845,42847,42849],{"class":206,"line":16888},[204,42841,42842],{"class":214},"                    nn.init.normal_(m.weight,",[204,42844,405],{"class":263},[204,42846,591],{"class":214},[204,42848,39072],{"class":263},[204,42850,221],{"class":214},[204,42852,42853,42856,42858,42860,42862,42864],{"class":206,"line":16902},[204,42854,42855],{"class":210},"                    if",[204,42857,39010],{"class":214},[204,42859,39013],{"class":210},[204,42861,39016],{"class":210},[204,42863,39019],{"class":263},[204,42865,3825],{"class":214},[204,42867,42868,42871,42873],{"class":206,"line":16907},[204,42869,42870],{"class":214},"                        nn.init.constant_(m.bias,",[204,42872,405],{"class":263},[204,42874,221],{"class":214},[204,42876,42877],{"class":206,"line":16913},[204,42878,35251],{"class":273},[204,42880,42881,42883,42885],{"class":206,"line":16918},[204,42882,30887],{"class":210},[204,42884,31179],{"class":2049},[204,42886,31182],{"class":214},[204,42888,42889,42891,42893,42895],{"class":206,"line":16932},[204,42890,31187],{"class":214},[204,42892,260],{"class":210},[204,42894,30909],{"class":263},[204,42896,42897],{"class":214},".b1(x)\n",[204,42899,42900,42902,42904,42906],{"class":206,"line":16937},[204,42901,31187],{"class":214},[204,42903,260],{"class":210},[204,42905,30909],{"class":263},[204,42907,42908],{"class":214},".b2(x)\n",[204,42910,42911,42913,42915,42917],{"class":206,"line":16942},[204,42912,31187],{"class":214},[204,42914,260],{"class":210},[204,42916,30909],{"class":263},[204,42918,42919],{"class":214},".b3(x)\n",[204,42921,42922,42924,42926,42928],{"class":206,"line":16956},[204,42923,31187],{"class":214},[204,42925,260],{"class":210},[204,42927,30909],{"class":263},[204,42929,42930],{"class":214},".b4(x)\n",[204,42932,42933,42935,42937,42939],{"class":206,"line":16968},[204,42934,31187],{"class":214},[204,42936,260],{"class":210},[204,42938,30909],{"class":263},[204,42940,42941],{"class":214},".b5(x)\n",[204,42943,42944,42946],{"class":206,"line":16973},[204,42945,14839],{"class":210},[204,42947,31295],{"class":214},[204,42949,42950],{"class":206,"line":16986},[204,42951,2486],{"emptyLinePlaceholder":135},[204,42953,42954],{"class":206,"line":16991},[204,42955,42956],{"class":273},"# 模型展示\n",[204,42958,42959,42961,42963,42965,42967],{"class":206,"line":16996},[204,42960,1617],{"class":210},[204,42962,31306],{"class":263},[204,42964,3035],{"class":210},[204,42966,31311],{"class":319},[204,42968,3825],{"class":214},[204,42970,42971,42973,42975,42977,42979,42981,42983,42985,42987],{"class":206,"line":17001},[204,42972,31323],{"class":214},[204,42974,260],{"class":210},[204,42976,30537],{"class":214},[204,42978,31330],{"class":319},[204,42980,1790],{"class":210},[204,42982,31335],{"class":214},[204,42984,1787],{"class":210},[204,42986,30562],{"class":319},[204,42988,221],{"class":214},[204,42990,42991,42993,42995],{"class":206,"line":17014},[204,42992,31375],{"class":214},[204,42994,260],{"class":210},[204,42996,42997],{"class":214},"GoogLeNet(Inception).to(device)\n",[204,42999,43000,43002,43004,43006,43008,43010,43012,43014],{"class":206,"line":17019},[204,43001,31385],{"class":263},[204,43003,31388],{"class":214},[204,43005,431],{"class":263},[204,43007,591],{"class":214},[204,43009,31587],{"class":263},[204,43011,591],{"class":214},[204,43013,31587],{"class":263},[204,43015,31401],{"class":214},[161,43017,43018],{"start":126},[71,43019,39269],{},[196,43021,43023],{"className":30464,"code":43022,"language":30466,"meta":125,"style":125},"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",[81,43024,43025,43031,43037,43047,43053,43063,43073,43083,43093,43103,43107,43118,43128,43132,43136,43140,43148,43160,43170,43186,43196,43228,43242,43252,43262,43266,43276,43290,43300,43310,43320,43326,43330,43334,43338,43342,43346,43354,43374,43378,43382,43386,43390,43394,43410,43414,43418,43426,43430,43434,43442,43446,43450,43454,43462,43466,43470,43474,43478,43486,43490,43498,43502,43510,43514,43522,43526,43534,43538,43542,43550,43554,43558,43562,43574,43598,43612,43616,43620,43624,43632,43636,43644,43648,43656,43660,43668,43672,43680,43684,43692,43696,43708,43712,43720,43724,43732,43736,43740,43744,43748,43756,43760,43776,43780,43788,43792,43796,43800,43804,43808,43812,43816,43832,43836,43848,43852,43864,43868,43880,43884,43892,43896,43904,43908,43912,43916,43922,43926,43934,43938,43954,43958,43966,43970,43986,43998,44002,44014,44018,44022,44030,44034,44038,44046,44050,44058,44062,44070,44074,44078,44120,44162,44166,44170,44186,44190,44206,44210,44214,44222,44226,44230,44242,44280,44284,44288,44296,44300,44314,44324,44330,44336,44342,44348,44352,44356,44362,44366,44370,44378,44382,44400,44404,44408,44412,44428,44432,44436,44440,44444,44448,44468,44488,44492,44496,44500,44508,44516,44520,44536,44556,44576,44580,44584,44592,44600,44604,44608,44612,44624,44628,44638,44646,44663],{"__ignoreMap":125},[204,43026,43027,43029],{"class":206,"line":207},[204,43028,30478],{"class":210},[204,43030,31908],{"class":214},[204,43032,43033,43035],{"class":206,"line":126},[204,43034,30478],{"class":210},[204,43036,31915],{"class":214},[204,43038,43039,43041,43043,43045],{"class":206,"line":131},[204,43040,30478],{"class":210},[204,43042,31926],{"class":214},[204,43044,31469],{"class":210},[204,43046,31931],{"class":214},[204,43048,43049,43051],{"class":206,"line":1281},[204,43050,30478],{"class":210},[204,43052,30481],{"class":214},[204,43054,43055,43057,43059,43061],{"class":206,"line":1287},[204,43056,30823],{"class":210},[204,43058,31501],{"class":214},[204,43060,30478],{"class":210},[204,43062,31948],{"class":214},[204,43064,43065,43067,43069,43071],{"class":206,"line":1301},[204,43066,30823],{"class":210},[204,43068,31454],{"class":214},[204,43070,30478],{"class":210},[204,43072,31459],{"class":214},[204,43074,43075,43077,43079,43081],{"class":206,"line":1307},[204,43076,30823],{"class":210},[204,43078,31484],{"class":214},[204,43080,30478],{"class":210},[204,43082,31489],{"class":214},[204,43084,43085,43087,43089,43091],{"class":206,"line":1398},[204,43086,30478],{"class":210},[204,43088,31501],{"class":214},[204,43090,31469],{"class":210},[204,43092,31506],{"class":214},[204,43094,43095,43097,43099,43101],{"class":206,"line":1404},[204,43096,30478],{"class":210},[204,43098,31518],{"class":214},[204,43100,31469],{"class":210},[204,43102,31523],{"class":214},[204,43104,43105],{"class":206,"line":1416},[204,43106,31993],{"class":273},[204,43108,43109,43111,43113,43115],{"class":206,"line":1698},[204,43110,30823],{"class":210},[204,43112,32000],{"class":214},[204,43114,30478],{"class":210},[204,43116,43117],{"class":214}," GoogLeNet, Inception\n",[204,43119,43120,43122,43124,43126],{"class":206,"line":1703},[204,43121,30823],{"class":210},[204,43123,30826],{"class":214},[204,43125,30478],{"class":210},[204,43127,30831],{"class":214},[204,43129,43130],{"class":206,"line":1709},[204,43131,2486],{"emptyLinePlaceholder":135},[204,43133,43134],{"class":206,"line":1714},[204,43135,2486],{"emptyLinePlaceholder":135},[204,43137,43138],{"class":206,"line":1728},[204,43139,32028],{"class":273},[204,43141,43142,43144,43146],{"class":206,"line":1733},[204,43143,32033],{"class":210},[204,43145,32036],{"class":2049},[204,43147,32039],{"class":214},[204,43149,43150,43152,43154,43156,43158],{"class":206,"line":1739},[204,43151,32044],{"class":214},[204,43153,260],{"class":210},[204,43155,31541],{"class":214},[204,43157,31549],{"class":319},[204,43159,31552],{"class":214},[204,43161,43162,43164,43166,43168],{"class":206,"line":1760},[204,43163,32057],{"class":5303},[204,43165,260],{"class":210},[204,43167,31562],{"class":263},[204,43169,31552],{"class":214},[204,43171,43172,43174,43176,43178,43180,43182,43184],{"class":206,"line":1765},[204,43173,32068],{"class":5303},[204,43175,260],{"class":210},[204,43177,31579],{"class":214},[204,43179,31582],{"class":5303},[204,43181,260],{"class":210},[204,43183,35535],{"class":263},[204,43185,31590],{"class":214},[204,43187,43188,43190,43192,43194],{"class":206,"line":1779},[204,43189,32085],{"class":5303},[204,43191,260],{"class":210},[204,43193,31562],{"class":263},[204,43195,221],{"class":214},[204,43197,43198,43200,43202,43204,43206,43208,43210,43212,43214,43216,43218,43220,43222,43224,43226],{"class":206,"line":1784},[204,43199,32096],{"class":214},[204,43201,260],{"class":210},[204,43203,32101],{"class":214},[204,43205,32104],{"class":263},[204,43207,215],{"class":214},[204,43209,32109],{"class":263},[204,43211,668],{"class":210},[204,43213,7445],{"class":263},[204,43215,32116],{"class":214},[204,43217,32104],{"class":263},[204,43219,215],{"class":214},[204,43221,32123],{"class":263},[204,43223,668],{"class":210},[204,43225,7445],{"class":263},[204,43227,32130],{"class":214},[204,43229,43230,43232,43234,43236,43238,43240],{"class":206,"line":1813},[204,43231,32135],{"class":214},[204,43233,260],{"class":210},[204,43235,32140],{"class":214},[204,43237,31623],{"class":5303},[204,43239,260],{"class":210},[204,43241,31628],{"class":214},[204,43243,43244,43246,43248,43250],{"class":206,"line":1818},[204,43245,32151],{"class":5303},[204,43247,260],{"class":210},[204,43249,411],{"class":263},[204,43251,31552],{"class":214},[204,43253,43254,43256,43258,43260],{"class":206,"line":1835},[204,43255,32163],{"class":5303},[204,43257,260],{"class":210},[204,43259,31562],{"class":263},[204,43261,31552],{"class":214},[204,43263,43264],{"class":206,"line":1840},[204,43265,32174],{"class":273},[204,43267,43268,43270,43272,43274],{"class":206,"line":1845},[204,43269,32179],{"class":5303},[204,43271,260],{"class":210},[204,43273,608],{"class":263},[204,43275,221],{"class":214},[204,43277,43278,43280,43282,43284,43286,43288],{"class":206,"line":1850},[204,43279,32190],{"class":214},[204,43281,260],{"class":210},[204,43283,31620],{"class":214},[204,43285,31623],{"class":5303},[204,43287,260],{"class":210},[204,43289,32201],{"class":214},[204,43291,43292,43294,43296,43298],{"class":206,"line":1864},[204,43293,32206],{"class":5303},[204,43295,260],{"class":210},[204,43297,411],{"class":263},[204,43299,31552],{"class":214},[204,43301,43302,43304,43306,43308],{"class":206,"line":1869},[204,43303,32217],{"class":5303},[204,43305,260],{"class":210},[204,43307,31562],{"class":263},[204,43309,31552],{"class":214},[204,43311,43312,43314,43316,43318],{"class":206,"line":2663},[204,43313,32228],{"class":5303},[204,43315,260],{"class":210},[204,43317,608],{"class":263},[204,43319,221],{"class":214},[204,43321,43322,43324],{"class":206,"line":2677},[204,43323,4176],{"class":210},[204,43325,32241],{"class":214},[204,43327,43328],{"class":206,"line":2685},[204,43329,2486],{"emptyLinePlaceholder":135},[204,43331,43332],{"class":206,"line":2690},[204,43333,32250],{"class":273},[204,43335,43336],{"class":206,"line":2696},[204,43337,32255],{"class":273},[204,43339,43340],{"class":206,"line":2702},[204,43341,2486],{"emptyLinePlaceholder":135},[204,43343,43344],{"class":206,"line":2707},[204,43345,32264],{"class":273},[204,43347,43348,43350,43352],{"class":206,"line":8035},[204,43349,32033],{"class":210},[204,43351,32271],{"class":2049},[204,43353,32274],{"class":214},[204,43355,43356,43358,43360,43362,43364,43366,43368,43370,43372],{"class":206,"line":8059},[204,43357,31323],{"class":214},[204,43359,260],{"class":210},[204,43361,30537],{"class":214},[204,43363,31330],{"class":319},[204,43365,1790],{"class":210},[204,43367,31335],{"class":214},[204,43369,1787],{"class":210},[204,43371,32293],{"class":319},[204,43373,221],{"class":214},[204,43375,43376],{"class":206,"line":8064},[204,43377,2486],{"emptyLinePlaceholder":135},[204,43379,43380],{"class":206,"line":8070},[204,43381,2486],{"emptyLinePlaceholder":135},[204,43383,43384],{"class":206,"line":8097},[204,43385,32308],{"class":273},[204,43387,43388],{"class":206,"line":8102},[204,43389,32313],{"class":273},[204,43391,43392],{"class":206,"line":8108},[204,43393,32318],{"class":273},[204,43395,43396,43398,43400,43402,43404,43406,43408],{"class":206,"line":8120},[204,43397,32323],{"class":214},[204,43399,260],{"class":210},[204,43401,32328],{"class":214},[204,43403,32331],{"class":5303},[204,43405,260],{"class":210},[204,43407,32336],{"class":263},[204,43409,221],{"class":214},[204,43411,43412],{"class":206,"line":8132},[204,43413,2486],{"emptyLinePlaceholder":135},[204,43415,43416],{"class":206,"line":8144},[204,43417,32347],{"class":273},[204,43419,43420,43422,43424],{"class":206,"line":9803},[204,43421,32352],{"class":214},[204,43423,260],{"class":210},[204,43425,32357],{"class":214},[204,43427,43428],{"class":206,"line":9828},[204,43429,2486],{"emptyLinePlaceholder":135},[204,43431,43432],{"class":206,"line":9851},[204,43433,32366],{"class":273},[204,43435,43436,43438,43440],{"class":206,"line":9875},[204,43437,31375],{"class":214},[204,43439,260],{"class":210},[204,43441,32375],{"class":214},[204,43443,43444],{"class":206,"line":9880},[204,43445,32380],{"class":273},[204,43447,43448],{"class":206,"line":9885},[204,43449,32385],{"class":273},[204,43451,43452],{"class":206,"line":9890},[204,43453,32390],{"class":273},[204,43455,43456,43458,43460],{"class":206,"line":9899},[204,43457,32395],{"class":214},[204,43459,260],{"class":210},[204,43461,32400],{"class":214},[204,43463,43464],{"class":206,"line":9904},[204,43465,2486],{"emptyLinePlaceholder":135},[204,43467,43468],{"class":206,"line":9910},[204,43469,2486],{"emptyLinePlaceholder":135},[204,43471,43472],{"class":206,"line":9931},[204,43473,32413],{"class":273},[204,43475,43476],{"class":206,"line":9937},[204,43477,32418],{"class":273},[204,43479,43480,43482,43484],{"class":206,"line":9951},[204,43481,32423],{"class":214},[204,43483,260],{"class":210},[204,43485,32428],{"class":263},[204,43487,43488],{"class":206,"line":9957},[204,43489,32433],{"class":273},[204,43491,43492,43494,43496],{"class":206,"line":9984},[204,43493,32438],{"class":214},[204,43495,260],{"class":210},[204,43497,32443],{"class":214},[204,43499,43500],{"class":206,"line":9993},[204,43501,32448],{"class":273},[204,43503,43504,43506,43508],{"class":206,"line":9999},[204,43505,32453],{"class":214},[204,43507,260],{"class":210},[204,43509,32443],{"class":214},[204,43511,43512],{"class":206,"line":10007},[204,43513,32462],{"class":273},[204,43515,43516,43518,43520],{"class":206,"line":10012},[204,43517,32467],{"class":214},[204,43519,260],{"class":210},[204,43521,32443],{"class":214},[204,43523,43524],{"class":206,"line":16691},[204,43525,32476],{"class":273},[204,43527,43528,43530,43532],{"class":206,"line":16697},[204,43529,32481],{"class":214},[204,43531,260],{"class":210},[204,43533,32443],{"class":214},[204,43535,43536],{"class":206,"line":16720},[204,43537,2486],{"emptyLinePlaceholder":135},[204,43539,43540],{"class":206,"line":16726},[204,43541,32494],{"class":273},[204,43543,43544,43546,43548],{"class":206,"line":16749},[204,43545,32499],{"class":214},[204,43547,260],{"class":210},[204,43549,32504],{"class":214},[204,43551,43552],{"class":206,"line":16763},[204,43553,2486],{"emptyLinePlaceholder":135},[204,43555,43556],{"class":206,"line":16783},[204,43557,2486],{"emptyLinePlaceholder":135},[204,43559,43560],{"class":206,"line":16789},[204,43561,32517],{"class":273},[204,43563,43564,43566,43568,43570,43572],{"class":206,"line":16800},[204,43565,3287],{"class":210},[204,43567,32524],{"class":214},[204,43569,26129],{"class":210},[204,43571,32529],{"class":263},[204,43573,32532],{"class":214},[204,43575,43576,43578,43580,43582,43584,43586,43588,43590,43592,43594,43596],{"class":206,"line":16823},[204,43577,32537],{"class":263},[204,43579,215],{"class":214},[204,43581,32542],{"class":319},[204,43583,32545],{"class":263},[204,43585,797],{"class":319},[204,43587,32545],{"class":263},[204,43589,464],{"class":319},[204,43591,32554],{"class":214},[204,43593,745],{"class":210},[204,43595,431],{"class":263},[204,43597,30583],{"class":214},[204,43599,43600,43602,43604,43606,43608,43610],{"class":206,"line":16845},[204,43601,32537],{"class":263},[204,43603,215],{"class":214},[204,43605,32569],{"class":319},[204,43607,668],{"class":210},[204,43609,659],{"class":263},[204,43611,221],{"class":214},[204,43613,43614],{"class":206,"line":16850},[204,43615,2486],{"emptyLinePlaceholder":135},[204,43617,43618],{"class":206,"line":16856},[204,43619,32584],{"class":273},[204,43621,43622],{"class":206,"line":16870},[204,43623,32589],{"class":273},[204,43625,43626,43628,43630],{"class":206,"line":16883},[204,43627,32594],{"class":214},[204,43629,260],{"class":210},[204,43631,32428],{"class":263},[204,43633,43634],{"class":206,"line":16888},[204,43635,32603],{"class":273},[204,43637,43638,43640,43642],{"class":206,"line":16902},[204,43639,32608],{"class":214},[204,43641,260],{"class":210},[204,43643,3171],{"class":263},[204,43645,43646],{"class":206,"line":16907},[204,43647,32617],{"class":273},[204,43649,43650,43652,43654],{"class":206,"line":16913},[204,43651,32622],{"class":214},[204,43653,260],{"class":210},[204,43655,32428],{"class":263},[204,43657,43658],{"class":206,"line":16918},[204,43659,32631],{"class":273},[204,43661,43662,43664,43666],{"class":206,"line":16932},[204,43663,32636],{"class":214},[204,43665,260],{"class":210},[204,43667,3171],{"class":263},[204,43669,43670],{"class":206,"line":16937},[204,43671,32645],{"class":273},[204,43673,43674,43676,43678],{"class":206,"line":16942},[204,43675,32650],{"class":214},[204,43677,260],{"class":210},[204,43679,3171],{"class":263},[204,43681,43682],{"class":206,"line":16956},[204,43683,32659],{"class":273},[204,43685,43686,43688,43690],{"class":206,"line":16968},[204,43687,32664],{"class":214},[204,43689,260],{"class":210},[204,43691,3171],{"class":263},[204,43693,43694],{"class":206,"line":16973},[204,43695,32673],{"class":273},[204,43697,43698,43700,43702,43704,43706],{"class":206,"line":16986},[204,43699,3489],{"class":210},[204,43701,31687],{"class":214},[204,43703,26129],{"class":210},[204,43705,31692],{"class":263},[204,43707,32686],{"class":214},[204,43709,43710],{"class":206,"line":16991},[204,43711,32691],{"class":273},[204,43713,43714,43716,43718],{"class":206,"line":16996},[204,43715,32696],{"class":214},[204,43717,260],{"class":210},[204,43719,32701],{"class":214},[204,43721,43722],{"class":206,"line":17001},[204,43723,32706],{"class":273},[204,43725,43726,43728,43730],{"class":206,"line":17014},[204,43727,32711],{"class":214},[204,43729,260],{"class":210},[204,43731,32716],{"class":214},[204,43733,43734],{"class":206,"line":17019},[204,43735,32722],{"class":273},[204,43737,43738],{"class":206,"line":32719},[204,43739,32728],{"class":214},[204,43741,43742],{"class":206,"line":32725},[204,43743,32734],{"class":273},[204,43745,43746],{"class":206,"line":32731},[204,43747,32740],{"class":273},[204,43749,43750,43752,43754],{"class":206,"line":32737},[204,43751,32746],{"class":214},[204,43753,260],{"class":210},[204,43755,32751],{"class":214},[204,43757,43758],{"class":206,"line":32743},[204,43759,32757],{"class":273},[204,43761,43762,43764,43766,43768,43770,43772,43774],{"class":206,"line":32754},[204,43763,32763],{"class":214},[204,43765,260],{"class":210},[204,43767,32768],{"class":214},[204,43769,32771],{"class":5303},[204,43771,260],{"class":210},[204,43773,431],{"class":263},[204,43775,221],{"class":214},[204,43777,43778],{"class":206,"line":32760},[204,43779,32783],{"class":273},[204,43781,43782,43784,43786],{"class":206,"line":32780},[204,43783,32789],{"class":214},[204,43785,260],{"class":210},[204,43787,32794],{"class":214},[204,43789,43790],{"class":206,"line":32786},[204,43791,32800],{"class":273},[204,43793,43794],{"class":206,"line":32797},[204,43795,32806],{"class":214},[204,43797,43798],{"class":206,"line":32803},[204,43799,32812],{"class":273},[204,43801,43802],{"class":206,"line":32809},[204,43803,32818],{"class":214},[204,43805,43806],{"class":206,"line":32815},[204,43807,32824],{"class":273},[204,43809,43810],{"class":206,"line":32821},[204,43811,32830],{"class":214},[204,43813,43814],{"class":206,"line":32827},[204,43815,32836],{"class":273},[204,43817,43818,43820,43822,43824,43826,43828,43830],{"class":206,"line":32833},[204,43819,32842],{"class":214},[204,43821,9564],{"class":210},[204,43823,32847],{"class":214},[204,43825,668],{"class":210},[204,43827,32852],{"class":214},[204,43829,405],{"class":263},[204,43831,221],{"class":214},[204,43833,43834],{"class":206,"line":32839},[204,43835,32862],{"class":273},[204,43837,43838,43840,43842,43844,43846],{"class":206,"line":32859},[204,43839,32868],{"class":214},[204,43841,9564],{"class":210},[204,43843,32873],{"class":214},[204,43845,3035],{"class":210},[204,43847,32878],{"class":214},[204,43849,43850],{"class":206,"line":32865},[204,43851,32884],{"class":273},[204,43853,43854,43856,43858,43860,43862],{"class":206,"line":32881},[204,43855,32890],{"class":214},[204,43857,9564],{"class":210},[204,43859,32852],{"class":214},[204,43861,405],{"class":263},[204,43863,221],{"class":214},[204,43865,43866],{"class":206,"line":32887},[204,43867,32904],{"class":273},[204,43869,43870,43872,43874,43876,43878],{"class":206,"line":32901},[204,43871,3489],{"class":210},[204,43873,32912],{"class":214},[204,43875,26129],{"class":210},[204,43877,31692],{"class":263},[204,43879,32919],{"class":214},[204,43881,43882],{"class":206,"line":32907},[204,43883,32925],{"class":273},[204,43885,43886,43888,43890],{"class":206,"line":32922},[204,43887,32696],{"class":214},[204,43889,260],{"class":210},[204,43891,32701],{"class":214},[204,43893,43894],{"class":206,"line":32928},[204,43895,32940],{"class":273},[204,43897,43898,43900,43902],{"class":206,"line":32937},[204,43899,32711],{"class":214},[204,43901,260],{"class":210},[204,43903,32716],{"class":214},[204,43905,43906],{"class":206,"line":32943},[204,43907,32955],{"class":273},[204,43909,43910],{"class":206,"line":32952},[204,43911,32961],{"class":214},[204,43913,43914],{"class":206,"line":32958},[204,43915,36442],{"class":273},[204,43917,43918,43920],{"class":206,"line":32964},[204,43919,32967],{"class":210},[204,43921,32970],{"class":214},[204,43923,43924],{"class":206,"line":32973},[204,43925,32976],{"class":273},[204,43927,43928,43930,43932],{"class":206,"line":32979},[204,43929,36457],{"class":214},[204,43931,260],{"class":210},[204,43933,32751],{"class":214},[204,43935,43936],{"class":206,"line":32990},[204,43937,32993],{"class":273},[204,43939,43940,43942,43944,43946,43948,43950,43952],{"class":206,"line":32996},[204,43941,36470],{"class":214},[204,43943,260],{"class":210},[204,43945,32768],{"class":214},[204,43947,32771],{"class":5303},[204,43949,260],{"class":210},[204,43951,431],{"class":263},[204,43953,221],{"class":214},[204,43955,43956],{"class":206,"line":33015},[204,43957,33018],{"class":273},[204,43959,43960,43962,43964],{"class":206,"line":33021},[204,43961,36491],{"class":214},[204,43963,260],{"class":210},[204,43965,32794],{"class":214},[204,43967,43968],{"class":206,"line":33032},[204,43969,33035],{"class":273},[204,43971,43972,43974,43976,43978,43980,43982,43984],{"class":206,"line":33038},[204,43973,36504],{"class":214},[204,43975,9564],{"class":210},[204,43977,36509],{"class":214},[204,43979,668],{"class":210},[204,43981,32852],{"class":214},[204,43983,405],{"class":263},[204,43985,221],{"class":214},[204,43987,43988,43990,43992,43994,43996],{"class":206,"line":33058},[204,43989,36522],{"class":214},[204,43991,9564],{"class":210},[204,43993,32873],{"class":214},[204,43995,3035],{"class":210},[204,43997,32878],{"class":214},[204,43999,44000],{"class":206,"line":33074},[204,44001,36535],{"class":273},[204,44003,44004,44006,44008,44010,44012],{"class":206,"line":33080},[204,44005,36540],{"class":214},[204,44007,9564],{"class":210},[204,44009,32852],{"class":214},[204,44011,405],{"class":263},[204,44013,221],{"class":214},[204,44015,44016],{"class":206,"line":33094},[204,44017,33097],{"class":273},[204,44019,44020],{"class":206,"line":33100},[204,44021,33103],{"class":273},[204,44023,44024,44026,44028],{"class":206,"line":33106},[204,44025,33109],{"class":214},[204,44027,797],{"class":210},[204,44029,33114],{"class":214},[204,44031,44032],{"class":206,"line":33117},[204,44033,33120],{"class":273},[204,44035,44036],{"class":206,"line":33123},[204,44037,33126],{"class":273},[204,44039,44040,44042,44044],{"class":206,"line":33129},[204,44041,33132],{"class":214},[204,44043,797],{"class":210},[204,44045,33114],{"class":214},[204,44047,44048],{"class":206,"line":33139},[204,44049,33142],{"class":273},[204,44051,44052,44054,44056],{"class":206,"line":33145},[204,44053,33148],{"class":214},[204,44055,797],{"class":210},[204,44057,33153],{"class":214},[204,44059,44060],{"class":206,"line":33156},[204,44061,33159],{"class":273},[204,44063,44064,44066,44068],{"class":206,"line":33162},[204,44065,33165],{"class":214},[204,44067,797],{"class":210},[204,44069,33153],{"class":214},[204,44071,44072],{"class":206,"line":33172},[204,44073,2486],{"emptyLinePlaceholder":135},[204,44075,44076],{"class":206,"line":33177},[204,44077,33180],{"class":273},[204,44079,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114,44116,44118],{"class":206,"line":33183},[204,44081,32537],{"class":263},[204,44083,215],{"class":214},[204,44085,3678],{"class":319},[204,44087,32545],{"class":263},[204,44089,33194],{"class":319},[204,44091,1109],{"class":263},[204,44093,33199],{"class":210},[204,44095,1159],{"class":263},[204,44097,33204],{"class":319},[204,44099,1109],{"class":263},[204,44101,33199],{"class":210},[204,44103,1159],{"class":263},[204,44105,3678],{"class":319},[204,44107,33215],{"class":214},[204,44109,745],{"class":210},[204,44111,431],{"class":263},[204,44113,33222],{"class":214},[204,44115,745],{"class":210},[204,44117,431],{"class":263},[204,44119,33229],{"class":214},[204,44121,44122,44124,44126,44128,44130,44132,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160],{"class":206,"line":33232},[204,44123,32537],{"class":263},[204,44125,215],{"class":214},[204,44127,3678],{"class":319},[204,44129,32545],{"class":263},[204,44131,33243],{"class":319},[204,44133,1109],{"class":263},[204,44135,33199],{"class":210},[204,44137,1159],{"class":263},[204,44139,33252],{"class":319},[204,44141,1109],{"class":263},[204,44143,33199],{"class":210},[204,44145,1159],{"class":263},[204,44147,3678],{"class":319},[204,44149,33263],{"class":214},[204,44151,745],{"class":210},[204,44153,431],{"class":263},[204,44155,33270],{"class":214},[204,44157,745],{"class":210},[204,44159,431],{"class":263},[204,44161,33229],{"class":214},[204,44163,44164],{"class":206,"line":33279},[204,44165,2486],{"emptyLinePlaceholder":135},[204,44167,44168],{"class":206,"line":33284},[204,44169,33287],{"class":273},[204,44171,44172,44174,44176,44178,44180,44182,44184],{"class":206,"line":33290},[204,44173,2583],{"class":210},[204,44175,33295],{"class":214},[204,44177,745],{"class":210},[204,44179,431],{"class":263},[204,44181,1153],{"class":214},[204,44183,1173],{"class":210},[204,44185,33306],{"class":214},[204,44187,44188],{"class":206,"line":33309},[204,44189,33312],{"class":273},[204,44191,44192,44194,44196,44198,44200,44202,44204],{"class":206,"line":33315},[204,44193,33318],{"class":214},[204,44195,254],{"class":263},[204,44197,260],{"class":210},[204,44199,33325],{"class":214},[204,44201,745],{"class":210},[204,44203,431],{"class":263},[204,44205,33332],{"class":214},[204,44207,44208],{"class":206,"line":33335},[204,44209,33338],{"class":273},[204,44211,44212],{"class":206,"line":33341},[204,44213,33344],{"class":273},[204,44215,44216,44218,44220],{"class":206,"line":33347},[204,44217,33350],{"class":214},[204,44219,260],{"class":210},[204,44221,32400],{"class":214},[204,44223,44224],{"class":206,"line":33357},[204,44225,2486],{"emptyLinePlaceholder":135},[204,44227,44228],{"class":206,"line":33362},[204,44229,33365],{"class":273},[204,44231,44232,44234,44236,44238,44240],{"class":206,"line":33368},[204,44233,33371],{"class":214},[204,44235,260],{"class":210},[204,44237,33376],{"class":214},[204,44239,745],{"class":210},[204,44241,33381],{"class":214},[204,44243,44244,44246,44248,44250,44252,44254,44256,44258,44260,44262,44264,44266,44268,44270,44272,44274,44276,44278],{"class":206,"line":33384},[204,44245,32537],{"class":263},[204,44247,215],{"class":214},[204,44249,33391],{"class":319},[204,44251,1109],{"class":263},[204,44253,33396],{"class":210},[204,44255,1159],{"class":263},[204,44257,757],{"class":319},[204,44259,1109],{"class":263},[204,44261,33396],{"class":210},[204,44263,1159],{"class":263},[204,44265,33409],{"class":319},[204,44267,33412],{"class":214},[204,44269,33415],{"class":210},[204,44271,1120],{"class":263},[204,44273,33420],{"class":214},[204,44275,541],{"class":210},[204,44277,1120],{"class":263},[204,44279,30583],{"class":214},[204,44281,44282],{"class":206,"line":33429},[204,44283,36819],{"class":273},[204,44285,44286],{"class":206,"line":33435},[204,44287,36824],{"class":273},[204,44289,44290,44292,44294],{"class":206,"line":33441},[204,44291,36829],{"class":214},[204,44293,33453],{"class":319},[204,44295,221],{"class":214},[204,44297,44298],{"class":206,"line":33447},[204,44299,33473],{"class":273},[204,44301,44302,44304,44306,44308,44310,44312],{"class":206,"line":33458},[204,44303,33479],{"class":214},[204,44305,260],{"class":210},[204,44307,33484],{"class":214},[204,44309,33487],{"class":5303},[204,44311,260],{"class":210},[204,44313,1632],{"class":214},[204,44315,44316,44318,44320,44322],{"class":206,"line":33464},[204,44317,33497],{"class":319},[204,44319,1072],{"class":214},[204,44321,33502],{"class":263},[204,44323,33505],{"class":214},[204,44325,44326,44328],{"class":206,"line":33470},[204,44327,33511],{"class":319},[204,44329,33514],{"class":214},[204,44331,44332,44334],{"class":206,"line":33476},[204,44333,33520],{"class":319},[204,44335,33523],{"class":214},[204,44337,44338,44340],{"class":206,"line":33494},[204,44339,33529],{"class":319},[204,44341,33532],{"class":214},[204,44343,44344,44346],{"class":206,"line":33508},[204,44345,33538],{"class":319},[204,44347,33541],{"class":214},[204,44349,44350],{"class":206,"line":33517},[204,44351,33547],{"class":214},[204,44353,44354],{"class":206,"line":33526},[204,44355,33553],{"class":273},[204,44357,44358,44360],{"class":206,"line":33535},[204,44359,4176],{"class":210},[204,44361,33561],{"class":214},[204,44363,44364],{"class":206,"line":33544},[204,44365,2486],{"emptyLinePlaceholder":135},[204,44367,44368],{"class":206,"line":33550},[204,44369,33572],{"class":273},[204,44371,44372,44374,44376],{"class":206,"line":33556},[204,44373,32033],{"class":210},[204,44375,33580],{"class":2049},[204,44377,33583],{"class":214},[204,44379,44380],{"class":206,"line":33564},[204,44381,33589],{"class":273},[204,44383,44384,44386,44388,44390,44392,44394,44396,44398],{"class":206,"line":33569},[204,44385,33595],{"class":214},[204,44387,31779],{"class":5303},[204,44389,260],{"class":210},[204,44391,215],{"class":214},[204,44393,711],{"class":263},[204,44395,591],{"class":214},[204,44397,506],{"class":263},[204,44399,30583],{"class":214},[204,44401,44402],{"class":206,"line":33575},[204,44403,33615],{"class":273},[204,44405,44406],{"class":206,"line":33586},[204,44407,33621],{"class":273},[204,44409,44410],{"class":206,"line":33592},[204,44411,33627],{"class":273},[204,44413,44414,44416,44418,44420,44422,44424,44426],{"class":206,"line":33612},[204,44415,31813],{"class":214},[204,44417,431],{"class":263},[204,44419,591],{"class":214},[204,44421,292],{"class":263},[204,44423,591],{"class":214},[204,44425,431],{"class":263},[204,44427,221],{"class":214},[204,44429,44430],{"class":206,"line":33618},[204,44431,33650],{"class":273},[204,44433,44434],{"class":206,"line":33624},[204,44435,33656],{"class":273},[204,44437,44438],{"class":206,"line":33630},[204,44439,33662],{"class":273},[204,44441,44442],{"class":206,"line":33647},[204,44443,33668],{"class":273},[204,44445,44446],{"class":206,"line":33653},[204,44447,33674],{"class":273},[204,44449,44450,44452,44454,44456,44458,44460,44462,44464,44466],{"class":206,"line":33659},[204,44451,33680],{"class":214},[204,44453,33683],{"class":319},[204,44455,33686],{"class":214},[204,44457,33689],{"class":319},[204,44459,591],{"class":214},[204,44461,33694],{"class":5303},[204,44463,260],{"class":210},[204,44465,33699],{"class":319},[204,44467,221],{"class":214},[204,44469,44470,44472,44474,44476,44478,44480,44482,44484,44486],{"class":206,"line":33665},[204,44471,33680],{"class":214},[204,44473,33683],{"class":319},[204,44475,33711],{"class":214},[204,44477,33714],{"class":319},[204,44479,591],{"class":214},[204,44481,33694],{"class":5303},[204,44483,260],{"class":210},[204,44485,33723],{"class":319},[204,44487,221],{"class":214},[204,44489,44490],{"class":206,"line":33671},[204,44491,33731],{"class":273},[204,44493,44494],{"class":206,"line":33677},[204,44495,33737],{"class":214},[204,44497,44498],{"class":206,"line":33704},[204,44499,33743],{"class":273},[204,44501,44502,44504,44506],{"class":206,"line":33728},[204,44503,33749],{"class":214},[204,44505,33752],{"class":319},[204,44507,221],{"class":214},[204,44509,44510,44512,44514],{"class":206,"line":33734},[204,44511,33760],{"class":214},[204,44513,33763],{"class":319},[204,44515,221],{"class":214},[204,44517,44518],{"class":206,"line":33740},[204,44519,33771],{"class":273},[204,44521,44522,44524,44526,44528,44530,44532,44534],{"class":206,"line":33746},[204,44523,31813],{"class":214},[204,44525,431],{"class":263},[204,44527,591],{"class":214},[204,44529,292],{"class":263},[204,44531,591],{"class":214},[204,44533,292],{"class":263},[204,44535,221],{"class":214},[204,44537,44538,44540,44542,44544,44546,44548,44550,44552,44554],{"class":206,"line":33757},[204,44539,33680],{"class":214},[204,44541,33683],{"class":319},[204,44543,33798],{"class":214},[204,44545,33689],{"class":319},[204,44547,591],{"class":214},[204,44549,33694],{"class":5303},[204,44551,260],{"class":210},[204,44553,33809],{"class":319},[204,44555,221],{"class":214},[204,44557,44558,44560,44562,44564,44566,44568,44570,44572,44574],{"class":206,"line":33768},[204,44559,33680],{"class":214},[204,44561,33683],{"class":319},[204,44563,33821],{"class":214},[204,44565,33714],{"class":319},[204,44567,591],{"class":214},[204,44569,33694],{"class":5303},[204,44571,260],{"class":210},[204,44573,33832],{"class":319},[204,44575,221],{"class":214},[204,44577,44578],{"class":206,"line":33774},[204,44579,33840],{"class":273},[204,44581,44582],{"class":206,"line":33791},[204,44583,33737],{"class":214},[204,44585,44586,44588,44590],{"class":206,"line":33814},[204,44587,33749],{"class":214},[204,44589,33683],{"class":319},[204,44591,221],{"class":214},[204,44593,44594,44596,44598],{"class":206,"line":33837},[204,44595,33760],{"class":214},[204,44597,33862],{"class":319},[204,44599,221],{"class":214},[204,44601,44602],{"class":206,"line":33843},[204,44603,33870],{"class":214},[204,44605,44606],{"class":206,"line":33848},[204,44607,2486],{"emptyLinePlaceholder":135},[204,44609,44610],{"class":206,"line":33857},[204,44611,33881],{"class":273},[204,44613,44614,44616,44618,44620,44622],{"class":206,"line":33867},[204,44615,1617],{"class":210},[204,44617,31306],{"class":263},[204,44619,3035],{"class":210},[204,44621,31311],{"class":319},[204,44623,3825],{"class":214},[204,44625,44626],{"class":206,"line":33873},[204,44627,33900],{"class":273},[204,44629,44630,44633,44635],{"class":206,"line":33878},[204,44631,44632],{"class":214},"    GoogLeNet",[204,44634,260],{"class":210},[204,44636,44637],{"class":214},"GoogLeNet(Inception)\n",[204,44639,44640,44642,44644],{"class":206,"line":33884},[204,44641,33917],{"class":214},[204,44643,260],{"class":210},[204,44645,33922],{"class":214},[204,44647,44648,44650,44652,44655,44657,44659,44661],{"class":206,"line":33897},[204,44649,33479],{"class":214},[204,44651,260],{"class":210},[204,44653,44654],{"class":214},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[204,44656,33935],{"class":5303},[204,44658,260],{"class":210},[204,44660,1164],{"class":263},[204,44662,221],{"class":214},[204,44664,44665],{"class":206,"line":33903},[204,44666,33947],{"class":214},[161,44668,44669],{"start":131},[71,44670,40660],{},[196,44672,44674],{"className":30464,"code":44673,"language":30466,"meta":125,"style":125},"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",[81,44675,44676,44682,44692,44702,44706,44716,44727,44731,44735,44739,44747,44763,44773,44789,44799,44813,44817,44827,44837,44847,44853,44857,44861,44869,44873,44889,44897,44901,44905,44913,44921,44925,44929,44933,44937,44943,44947,44957,44965,44973,44977,44981,44985,44993,44997,45013,45017,45021,45025,45037,45041,45053,45057,45061,45073,45077,45087,45091,45095,45107,45111,45119,45123,45127,45135,45139,45147,45151,45155,45159,45163,45167,45183,45191,45195,45199,45247,45253,45257,45267,45275,45283,45287,45291,45295,45299,45307,45311,45327,45331,45339,45347],{"__ignoreMap":125},[204,44677,44678,44680],{"class":206,"line":207},[204,44679,30478],{"class":210},[204,44681,30481],{"class":214},[204,44683,44684,44686,44688,44690],{"class":206,"line":126},[204,44685,30478],{"class":210},[204,44687,31501],{"class":214},[204,44689,31469],{"class":210},[204,44691,31506],{"class":214},[204,44693,44694,44696,44698,44700],{"class":206,"line":131},[204,44695,30823],{"class":210},[204,44697,31484],{"class":214},[204,44699,30478],{"class":210},[204,44701,31489],{"class":214},[204,44703,44704],{"class":206,"line":1281},[204,44705,34008],{"class":273},[204,44707,44708,44710,44712,44714],{"class":206,"line":1287},[204,44709,30823],{"class":210},[204,44711,31454],{"class":214},[204,44713,30478],{"class":210},[204,44715,31459],{"class":214},[204,44717,44718,44720,44722,44724],{"class":206,"line":1301},[204,44719,30823],{"class":210},[204,44721,32000],{"class":214},[204,44723,30478],{"class":210},[204,44725,44726],{"class":214}," GoogLeNet,Inception\n",[204,44728,44729],{"class":206,"line":1307},[204,44730,2486],{"emptyLinePlaceholder":135},[204,44732,44733],{"class":206,"line":1398},[204,44734,2486],{"emptyLinePlaceholder":135},[204,44736,44737],{"class":206,"line":1404},[204,44738,34037],{"class":273},[204,44740,44741,44743,44745],{"class":206,"line":1416},[204,44742,32033],{"class":210},[204,44744,34044],{"class":2049},[204,44746,32039],{"class":214},[204,44748,44749,44751,44753,44755,44757,44759,44761],{"class":206,"line":1698},[204,44750,34051],{"class":214},[204,44752,260],{"class":210},[204,44754,31541],{"class":214},[204,44756,31544],{"class":5303},[204,44758,260],{"class":210},[204,44760,31549],{"class":319},[204,44762,31552],{"class":214},[204,44764,44765,44767,44769,44771],{"class":206,"line":1703},[204,44766,34068],{"class":5303},[204,44768,260],{"class":210},[204,44770,34073],{"class":263},[204,44772,31552],{"class":214},[204,44774,44775,44777,44779,44781,44783,44785,44787],{"class":206,"line":1709},[204,44776,34080],{"class":5303},[204,44778,260],{"class":210},[204,44780,31579],{"class":214},[204,44782,31582],{"class":5303},[204,44784,260],{"class":210},[204,44786,35535],{"class":263},[204,44788,31590],{"class":214},[204,44790,44791,44793,44795,44797],{"class":206,"line":1714},[204,44792,34097],{"class":5303},[204,44794,260],{"class":210},[204,44796,31562],{"class":263},[204,44798,221],{"class":214},[204,44800,44801,44803,44805,44807,44809,44811],{"class":206,"line":1728},[204,44802,34108],{"class":214},[204,44804,260],{"class":210},[204,44806,31620],{"class":214},[204,44808,31623],{"class":5303},[204,44810,260],{"class":210},[204,44812,34119],{"class":214},[204,44814,44815],{"class":206,"line":1733},[204,44816,34124],{"class":273},[204,44818,44819,44821,44823,44825],{"class":206,"line":1739},[204,44820,34129],{"class":5303},[204,44822,260],{"class":210},[204,44824,431],{"class":263},[204,44826,31552],{"class":214},[204,44828,44829,44831,44833,44835],{"class":206,"line":1760},[204,44830,34140],{"class":5303},[204,44832,260],{"class":210},[204,44834,31562],{"class":263},[204,44836,31552],{"class":214},[204,44838,44839,44841,44843,44845],{"class":206,"line":1765},[204,44840,34151],{"class":5303},[204,44842,260],{"class":210},[204,44844,405],{"class":263},[204,44846,221],{"class":214},[204,44848,44849,44851],{"class":206,"line":1779},[204,44850,4176],{"class":210},[204,44852,34164],{"class":214},[204,44854,44855],{"class":206,"line":1784},[204,44856,2486],{"emptyLinePlaceholder":135},[204,44858,44859],{"class":206,"line":1813},[204,44860,34173],{"class":273},[204,44862,44863,44865,44867],{"class":206,"line":1818},[204,44864,32033],{"class":210},[204,44866,34180],{"class":2049},[204,44868,34183],{"class":214},[204,44870,44871],{"class":206,"line":1835},[204,44872,34188],{"class":273},[204,44874,44875,44877,44879,44881,44883,44885,44887],{"class":206,"line":1840},[204,44876,31323],{"class":214},[204,44878,260],{"class":210},[204,44880,31330],{"class":319},[204,44882,1790],{"class":210},[204,44884,31335],{"class":214},[204,44886,1787],{"class":210},[204,44888,34205],{"class":319},[204,44890,44891,44893,44895],{"class":206,"line":1845},[204,44892,31375],{"class":214},[204,44894,260],{"class":210},[204,44896,32375],{"class":214},[204,44898,44899],{"class":206,"line":1850},[204,44900,2486],{"emptyLinePlaceholder":135},[204,44902,44903],{"class":206,"line":1864},[204,44904,34222],{"class":273},[204,44906,44907,44909,44911],{"class":206,"line":1869},[204,44908,34227],{"class":214},[204,44910,260],{"class":210},[204,44912,32428],{"class":263},[204,44914,44915,44917,44919],{"class":206,"line":2663},[204,44916,34236],{"class":214},[204,44918,260],{"class":210},[204,44920,3171],{"class":263},[204,44922,44923],{"class":206,"line":2677},[204,44924,2486],{"emptyLinePlaceholder":135},[204,44926,44927],{"class":206,"line":2685},[204,44928,34249],{"class":273},[204,44930,44931],{"class":206,"line":2690},[204,44932,34254],{"class":273},[204,44934,44935],{"class":206,"line":2696},[204,44936,34259],{"class":273},[204,44938,44939,44941],{"class":206,"line":2702},[204,44940,34264],{"class":210},[204,44942,32970],{"class":214},[204,44944,44945],{"class":206,"line":2707},[204,44946,34271],{"class":273},[204,44948,44949,44951,44953,44955],{"class":206,"line":8035},[204,44950,3489],{"class":210},[204,44952,34278],{"class":214},[204,44954,26129],{"class":210},[204,44956,34283],{"class":214},[204,44958,44959,44961,44963],{"class":206,"line":8059},[204,44960,34288],{"class":214},[204,44962,260],{"class":210},[204,44964,34293],{"class":214},[204,44966,44967,44969,44971],{"class":206,"line":8064},[204,44968,34298],{"class":214},[204,44970,260],{"class":210},[204,44972,34303],{"class":214},[204,44974,44975],{"class":206,"line":8070},[204,44976,34308],{"class":273},[204,44978,44979],{"class":206,"line":8097},[204,44980,32961],{"class":214},[204,44982,44983],{"class":206,"line":8102},[204,44984,34317],{"class":273},[204,44986,44987,44989,44991],{"class":206,"line":8108},[204,44988,32746],{"class":214},[204,44990,260],{"class":210},[204,44992,34326],{"class":214},[204,44994,44995],{"class":206,"line":8120},[204,44996,34331],{"class":273},[204,44998,44999,45001,45003,45005,45007,45009,45011],{"class":206,"line":8132},[204,45000,32763],{"class":214},[204,45002,260],{"class":210},[204,45004,32768],{"class":214},[204,45006,32771],{"class":5303},[204,45008,260],{"class":210},[204,45010,431],{"class":263},[204,45012,221],{"class":214},[204,45014,45015],{"class":206,"line":8144},[204,45016,34352],{"class":273},[204,45018,45019],{"class":206,"line":9803},[204,45020,34357],{"class":273},[204,45022,45023],{"class":206,"line":9828},[204,45024,34362],{"class":273},[204,45026,45027,45029,45031,45033,45035],{"class":206,"line":9851},[204,45028,34367],{"class":214},[204,45030,9564],{"class":210},[204,45032,32873],{"class":214},[204,45034,3035],{"class":210},[204,45036,34376],{"class":214},[204,45038,45039],{"class":206,"line":9875},[204,45040,34381],{"class":273},[204,45042,45043,45045,45047,45049,45051],{"class":206,"line":9880},[204,45044,34386],{"class":214},[204,45046,9564],{"class":210},[204,45048,34391],{"class":214},[204,45050,405],{"class":263},[204,45052,221],{"class":214},[204,45054,45055],{"class":206,"line":9885},[204,45056,2486],{"emptyLinePlaceholder":135},[204,45058,45059],{"class":206,"line":9890},[204,45060,34404],{"class":273},[204,45062,45063,45065,45067,45069,45071],{"class":206,"line":9899},[204,45064,34409],{"class":214},[204,45066,260],{"class":210},[204,45068,34414],{"class":214},[204,45070,797],{"class":210},[204,45072,34419],{"class":214},[204,45074,45075],{"class":206,"line":9904},[204,45076,34424],{"class":273},[204,45078,45079,45081,45083,45085],{"class":206,"line":9910},[204,45080,32537],{"class":263},[204,45082,215],{"class":214},[204,45084,34433],{"class":319},[204,45086,34436],{"class":214},[204,45088,45089],{"class":206,"line":9931},[204,45090,2486],{"emptyLinePlaceholder":135},[204,45092,45093],{"class":206,"line":9937},[204,45094,34445],{"class":273},[204,45096,45097,45099,45101,45103,45105],{"class":206,"line":9951},[204,45098,1617],{"class":210},[204,45100,31306],{"class":263},[204,45102,3035],{"class":210},[204,45104,31311],{"class":319},[204,45106,3825],{"class":214},[204,45108,45109],{"class":206,"line":9957},[204,45110,34462],{"class":273},[204,45112,45113,45115,45117],{"class":206,"line":9984},[204,45114,31375],{"class":214},[204,45116,260],{"class":210},[204,45118,44637],{"class":214},[204,45120,45121],{"class":206,"line":9993},[204,45122,34475],{"class":273},[204,45124,45125],{"class":206,"line":9999},[204,45126,34480],{"class":273},[204,45128,45129,45131,45133],{"class":206,"line":10007},[204,45130,34485],{"class":214},[204,45132,34488],{"class":319},[204,45134,30583],{"class":214},[204,45136,45137],{"class":206,"line":10012},[204,45138,34495],{"class":273},[204,45140,45141,45143,45145],{"class":206,"line":16691},[204,45142,34108],{"class":214},[204,45144,260],{"class":210},[204,45146,34504],{"class":214},[204,45148,45149],{"class":206,"line":16697},[204,45150,34509],{"class":273},[204,45152,45153],{"class":206,"line":16720},[204,45154,34514],{"class":214},[204,45156,45157],{"class":206,"line":16726},[204,45158,2486],{"emptyLinePlaceholder":135},[204,45160,45161],{"class":206,"line":16749},[204,45162,34523],{"class":273},[204,45164,45165],{"class":206,"line":16763},[204,45166,34528],{"class":273},[204,45168,45169,45171,45173,45175,45177,45179,45181],{"class":206,"line":16783},[204,45170,31323],{"class":214},[204,45172,260],{"class":210},[204,45174,31330],{"class":319},[204,45176,1790],{"class":210},[204,45178,31335],{"class":214},[204,45180,1787],{"class":210},[204,45182,34205],{"class":319},[204,45184,45185,45187,45189],{"class":206,"line":16789},[204,45186,31375],{"class":214},[204,45188,260],{"class":210},[204,45190,32375],{"class":214},[204,45192,45193],{"class":206,"line":16800},[204,45194,34557],{"class":273},[204,45196,45197],{"class":206,"line":16823},[204,45198,34562],{"class":273},[204,45200,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235,45237,45239,45241,45243,45245],{"class":206,"line":16845},[204,45202,34567],{"class":214},[204,45204,260],{"class":210},[204,45206,1103],{"class":214},[204,45208,34574],{"class":319},[204,45210,591],{"class":214},[204,45212,34579],{"class":319},[204,45214,591],{"class":214},[204,45216,34584],{"class":319},[204,45218,591],{"class":214},[204,45220,34589],{"class":319},[204,45222,591],{"class":214},[204,45224,34594],{"class":319},[204,45226,591],{"class":214},[204,45228,34599],{"class":319},[204,45230,591],{"class":214},[204,45232,34604],{"class":319},[204,45234,591],{"class":214},[204,45236,34609],{"class":319},[204,45238,591],{"class":214},[204,45240,34614],{"class":319},[204,45242,591],{"class":214},[204,45244,34619],{"class":319},[204,45246,33332],{"class":214},[204,45248,45249,45251],{"class":206,"line":16850},[204,45250,34264],{"class":210},[204,45252,32970],{"class":214},[204,45254,45255],{"class":206,"line":16856},[204,45256,34632],{"class":273},[204,45258,45259,45261,45263,45265],{"class":206,"line":16870},[204,45260,3489],{"class":210},[204,45262,34639],{"class":214},[204,45264,26129],{"class":210},[204,45266,34283],{"class":214},[204,45268,45269,45271,45273],{"class":206,"line":16883},[204,45270,32696],{"class":214},[204,45272,260],{"class":210},[204,45274,32701],{"class":214},[204,45276,45277,45279,45281],{"class":206,"line":16888},[204,45278,32711],{"class":214},[204,45280,260],{"class":210},[204,45282,32716],{"class":214},[204,45284,45285],{"class":206,"line":16902},[204,45286,2486],{"emptyLinePlaceholder":135},[204,45288,45289],{"class":206,"line":16907},[204,45290,34668],{"class":273},[204,45292,45293],{"class":206,"line":16913},[204,45294,32961],{"class":214},[204,45296,45297],{"class":206,"line":16918},[204,45298,34677],{"class":273},[204,45300,45301,45303,45305],{"class":206,"line":16932},[204,45302,32746],{"class":214},[204,45304,260],{"class":210},[204,45306,32751],{"class":214},[204,45308,45309],{"class":206,"line":16937},[204,45310,34690],{"class":273},[204,45312,45313,45315,45317,45319,45321,45323,45325],{"class":206,"line":16942},[204,45314,32763],{"class":214},[204,45316,260],{"class":210},[204,45318,32768],{"class":214},[204,45320,32771],{"class":5303},[204,45322,260],{"class":210},[204,45324,431],{"class":263},[204,45326,221],{"class":214},[204,45328,45329],{"class":206,"line":16956},[204,45330,34711],{"class":273},[204,45332,45333,45335,45337],{"class":206,"line":16968},[204,45334,34716],{"class":214},[204,45336,260],{"class":210},[204,45338,34721],{"class":214},[204,45340,45341,45343,45345],{"class":206,"line":16973},[204,45342,34726],{"class":214},[204,45344,260],{"class":210},[204,45346,34731],{"class":214},[204,45348,45349,45351,45353,45355,45357,45359,45361,45363],{"class":206,"line":16986},[204,45350,34736],{"class":263},[204,45352,215],{"class":214},[204,45354,34741],{"class":319},[204,45356,34744],{"class":214},[204,45358,34747],{"class":319},[204,45360,591],{"class":214},[204,45362,34752],{"class":319},[204,45364,34755],{"class":214},[49,45366,45368],{"id":45367},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45370,45371],{},"猫狗分类任务",[19,45373,45374],{},"划分数据集和验证集",[196,45376,45378],{"className":30464,"code":45377,"language":30466,"meta":125,"style":125},"# 创建脚本，用于划分数据集和验证集\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",[81,45379,45380,45385,45392,45397,45408,45415,45419,45429,45443,45452,45456,45461,45471,45491,45495,45500,45510,45521,45534,45538,45543,45552,45562,45573,45577,45582,45592,45596,45601,45606,45611,45616,45621,45625,45635,45662,45675,45687,45714,45719,45724,45738,45743,45755,45770,45785,45793,45797,45802,45808,45820,45833,45838,45843,45848,45898,45904,45908],{"__ignoreMap":125},[204,45381,45382],{"class":206,"line":207},[204,45383,45384],{"class":273},"# 创建脚本，用于划分数据集和验证集\n",[204,45386,45387,45389],{"class":206,"line":126},[204,45388,30478],{"class":210},[204,45390,45391],{"class":214}," os\n",[204,45393,45394],{"class":206,"line":131},[204,45395,45396],{"class":273},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[204,45398,45399,45401,45404,45406],{"class":206,"line":1281},[204,45400,30823],{"class":210},[204,45402,45403],{"class":214}," shutil ",[204,45405,30478],{"class":210},[204,45407,31908],{"class":214},[204,45409,45410,45412],{"class":206,"line":1287},[204,45411,30478],{"class":210},[204,45413,45414],{"class":214}," random\n",[204,45416,45417],{"class":206,"line":1301},[204,45418,2486],{"emptyLinePlaceholder":135},[204,45420,45421,45423,45426],{"class":206,"line":1307},[204,45422,32033],{"class":210},[204,45424,45425],{"class":2049}," mkfile",[204,45427,45428],{"class":214},"(file):\n",[204,45430,45431,45433,45435,45438,45441],{"class":206,"line":1398},[204,45432,3187],{"class":210},[204,45434,39016],{"class":210},[204,45436,45437],{"class":214}," os.path.exists(",[204,45439,45440],{"class":5303},"file",[204,45442,30872],{"class":214},[204,45444,45445,45448,45450],{"class":206,"line":1404},[204,45446,45447],{"class":214},"        os.makedirs(",[204,45449,45440],{"class":5303},[204,45451,221],{"class":214},[204,45453,45454],{"class":206,"line":1416},[204,45455,2486],{"emptyLinePlaceholder":135},[204,45457,45458],{"class":206,"line":1698},[204,45459,45460],{"class":273},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[204,45462,45463,45466,45468],{"class":206,"line":1703},[204,45464,45465],{"class":214},"file_path",[204,45467,260],{"class":210},[204,45469,45470],{"class":319},"'data_cat_dog'\n",[204,45472,45473,45476,45478,45481,45483,45486,45488],{"class":206,"line":1709},[204,45474,45475],{"class":214},"flower_class",[204,45477,260],{"class":210},[204,45479,45480],{"class":214},"[cla ",[204,45482,3111],{"class":210},[204,45484,45485],{"class":214}," cla ",[204,45487,26129],{"class":210},[204,45489,45490],{"class":214}," os.listdir(file_path)]\n",[204,45492,45493],{"class":206,"line":1714},[204,45494,2486],{"emptyLinePlaceholder":135},[204,45496,45497],{"class":206,"line":1728},[204,45498,45499],{"class":273},"# 创建训练集train文件夹\n",[204,45501,45502,45505,45508],{"class":206,"line":1733},[204,45503,45504],{"class":214},"mkfile(",[204,45506,45507],{"class":319},"'data\u002Ftrain'",[204,45509,221],{"class":214},[204,45511,45512,45514,45516,45518],{"class":206,"line":1739},[204,45513,3111],{"class":210},[204,45515,45485],{"class":214},[204,45517,26129],{"class":210},[204,45519,45520],{"class":214}," flower_class:\n",[204,45522,45523,45526,45529,45531],{"class":206,"line":1760},[204,45524,45525],{"class":214},"    mkfile(",[204,45527,45528],{"class":319},"'data\u002Ftrain\u002F'",[204,45530,694],{"class":210},[204,45532,45533],{"class":214},"cla)\n",[204,45535,45536],{"class":206,"line":1765},[204,45537,2486],{"emptyLinePlaceholder":135},[204,45539,45540],{"class":206,"line":1779},[204,45541,45542],{"class":273},"# 创建验证集val文件夹\n",[204,45544,45545,45547,45550],{"class":206,"line":1784},[204,45546,45504],{"class":214},[204,45548,45549],{"class":319},"'data\u002Ftest'",[204,45551,221],{"class":214},[204,45553,45554,45556,45558,45560],{"class":206,"line":1813},[204,45555,3111],{"class":210},[204,45557,45485],{"class":214},[204,45559,26129],{"class":210},[204,45561,45520],{"class":214},[204,45563,45564,45566,45569,45571],{"class":206,"line":1818},[204,45565,45525],{"class":214},[204,45567,45568],{"class":319},"'data\u002Ftest\u002F'",[204,45570,694],{"class":210},[204,45572,45533],{"class":214},[204,45574,45575],{"class":206,"line":1835},[204,45576,2486],{"emptyLinePlaceholder":135},[204,45578,45579],{"class":206,"line":1840},[204,45580,45581],{"class":273},"# 划分比例，训练集：测试集=9：1\n",[204,45583,45584,45587,45589],{"class":206,"line":1845},[204,45585,45586],{"class":214},"split_rate",[204,45588,260],{"class":210},[204,45590,45591],{"class":263},"0.1\n",[204,45593,45594],{"class":206,"line":1850},[204,45595,2486],{"emptyLinePlaceholder":135},[204,45597,45598],{"class":206,"line":1864},[204,45599,45600],{"class":273},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[204,45602,45603],{"class":206,"line":1869},[204,45604,45605],{"class":273},"# cla_path：当前类别的原始图片路径\n",[204,45607,45608],{"class":206,"line":2663},[204,45609,45610],{"class":273},"# images：当前类别下所有图片的文件名列表\n",[204,45612,45613],{"class":206,"line":2677},[204,45614,45615],{"class":273},"# num：该类别图片总数\n",[204,45617,45618],{"class":206,"line":2685},[204,45619,45620],{"class":273},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[204,45622,45623],{"class":206,"line":2690},[204,45624,2486],{"emptyLinePlaceholder":135},[204,45626,45627,45629,45631,45633],{"class":206,"line":2696},[204,45628,3111],{"class":210},[204,45630,45485],{"class":214},[204,45632,26129],{"class":210},[204,45634,45520],{"class":214},[204,45636,45637,45640,45642,45645,45647,45650,45653,45655,45657,45659],{"class":206,"line":2702},[204,45638,45639],{"class":214},"    cla_path ",[204,45641,260],{"class":210},[204,45643,45644],{"class":214}," file_path ",[204,45646,694],{"class":210},[204,45648,45649],{"class":319}," '\u002F'",[204,45651,45652],{"class":210}," +",[204,45654,45485],{"class":214},[204,45656,694],{"class":210},[204,45658,45649],{"class":319},[204,45660,45661],{"class":273},"  # 某一类别的子目录\n",[204,45663,45664,45667,45669,45672],{"class":206,"line":2707},[204,45665,45666],{"class":214},"    images ",[204,45668,260],{"class":210},[204,45670,45671],{"class":214}," os.listdir(cla_path)  ",[204,45673,45674],{"class":273},"# iamges 列表存储了该目录下所有图像的名称\n",[204,45676,45677,45680,45682,45684],{"class":206,"line":8035},[204,45678,45679],{"class":214},"    num ",[204,45681,260],{"class":210},[204,45683,7418],{"class":263},[204,45685,45686],{"class":214},"(images)\n",[204,45688,45689,45692,45694,45697,45699,45701,45703,45706,45708,45711],{"class":206,"line":8059},[204,45690,45691],{"class":214},"    eval_index ",[204,45693,260],{"class":210},[204,45695,45696],{"class":214}," random.sample(images, ",[204,45698,706],{"class":5303},[204,45700,260],{"class":210},[204,45702,218],{"class":263},[204,45704,45705],{"class":214},"(num ",[204,45707,668],{"class":210},[204,45709,45710],{"class":214}," split_rate))  ",[204,45712,45713],{"class":273},"# 从images列表中随机抽取 k 个图像名称\n",[204,45715,45716],{"class":206,"line":8064},[204,45717,45718],{"class":273},"    # 遍历该类别下的所有图片\n",[204,45720,45721],{"class":206,"line":8070},[204,45722,45723],{"class":273},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[204,45725,45726,45728,45731,45733,45735],{"class":206,"line":8097},[204,45727,3287],{"class":210},[204,45729,45730],{"class":214}," index, image ",[204,45732,26129],{"class":210},[204,45734,31692],{"class":263},[204,45736,45737],{"class":214},"(images):\n",[204,45739,45740],{"class":206,"line":8102},[204,45741,45742],{"class":273},"        # eval_index 中保存验证集val的图像名称\n",[204,45744,45745,45747,45750,45752],{"class":206,"line":8108},[204,45746,2583],{"class":210},[204,45748,45749],{"class":214}," image ",[204,45751,26129],{"class":210},[204,45753,45754],{"class":214}," eval_index:\n",[204,45756,45757,45760,45762,45765,45767],{"class":206,"line":8120},[204,45758,45759],{"class":214},"            image_path ",[204,45761,260],{"class":210},[204,45763,45764],{"class":214}," cla_path ",[204,45766,694],{"class":210},[204,45768,45769],{"class":214}," image\n",[204,45771,45772,45775,45777,45780,45782],{"class":206,"line":8132},[204,45773,45774],{"class":214},"            new_path ",[204,45776,260],{"class":210},[204,45778,45779],{"class":319}," 'data\u002Ftest\u002F'",[204,45781,45652],{"class":210},[204,45783,45784],{"class":214}," cla\n",[204,45786,45787,45790],{"class":206,"line":8144},[204,45788,45789],{"class":214},"            copy(image_path, new_path)  ",[204,45791,45792],{"class":273},"# 将选中的图像复制到新路径\n",[204,45794,45795],{"class":206,"line":9803},[204,45796,2486],{"emptyLinePlaceholder":135},[204,45798,45799],{"class":206,"line":9828},[204,45800,45801],{"class":273},"        # 其余的图像保存在训练集train中\n",[204,45803,45804,45806],{"class":206,"line":9851},[204,45805,2620],{"class":210},[204,45807,3825],{"class":214},[204,45809,45810,45812,45814,45816,45818],{"class":206,"line":9875},[204,45811,45759],{"class":214},[204,45813,260],{"class":210},[204,45815,45764],{"class":214},[204,45817,694],{"class":210},[204,45819,45769],{"class":214},[204,45821,45822,45824,45826,45829,45831],{"class":206,"line":9880},[204,45823,45774],{"class":214},[204,45825,260],{"class":210},[204,45827,45828],{"class":319}," 'data\u002Ftrain\u002F'",[204,45830,45652],{"class":210},[204,45832,45784],{"class":214},[204,45834,45835],{"class":206,"line":9885},[204,45836,45837],{"class":214},"            copy(image_path, new_path)\n",[204,45839,45840],{"class":206,"line":9890},[204,45841,45842],{"class":273},"            # 打印进度条信息\n",[204,45844,45845],{"class":206,"line":9899},[204,45846,45847],{"class":273},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[204,45849,45850,45852,45854,45856,45859,45861,45863,45866,45868,45870,45872,45875,45878,45880,45882,45885,45888,45890,45892,45895],{"class":206,"line":9904},[204,45851,32537],{"class":263},[204,45853,215],{"class":214},[204,45855,464],{"class":319},[204,45857,45858],{"class":263},"\\r",[204,45860,1103],{"class":319},[204,45862,32545],{"class":263},[204,45864,45865],{"class":319},"] processing [",[204,45867,32545],{"class":263},[204,45869,797],{"class":319},[204,45871,32545],{"class":263},[204,45873,45874],{"class":319},"]\"",[204,45876,45877],{"class":214},".format(cla, index ",[204,45879,694],{"class":210},[204,45881,25205],{"class":263},[204,45883,45884],{"class":214},", num), ",[204,45886,45887],{"class":5303},"end",[204,45889,260],{"class":210},[204,45891,7739],{"class":319},[204,45893,45894],{"class":214},")  ",[204,45896,45897],{"class":273},"# processing bar\n",[204,45899,45900,45902],{"class":206,"line":9910},[204,45901,31385],{"class":263},[204,45903,2062],{"class":214},[204,45905,45906],{"class":206,"line":9931},[204,45907,2486],{"emptyLinePlaceholder":135},[204,45909,45910,45912,45914,45917],{"class":206,"line":9937},[204,45911,30501],{"class":263},[204,45913,215],{"class":214},[204,45915,45916],{"class":319},"\"processing done!\"",[204,45918,221],{"class":214},[19,45920,45921],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22085,45923,45925],{"id":45924},"_242模型代码","2.4.2.模型代码",[19,45927,45928],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[196,45930,45932],{"className":30464,"code":45931,"language":30466,"meta":125,"style":125},"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",[81,45933,45934,45940,45950,45960,45964,45980,45988,46002,46012,46016,46046,46050,46084,46130,46134,46168,46214,46218,46222,46256,46286,46290,46298,46312,46334,46356,46374,46378,46392,46396,46400,46416,46420,46428,46442,46452,46496,46500,46528,46532,46542,46570,46574,46610,46614,46642,46646,46656,46688,46720,46748,46752,46762,46794,46826,46858,46890,46922,46950,46954,46964,46996,47028,47040,47044,47056,47060,47064,47076,47084,47104,47108,47112,47116,47120,47124,47128,47142,47150,47158,47170,47184,47192,47196,47204,47214,47224,47234,47244,47254,47260,47264,47268,47280,47300,47308],{"__ignoreMap":125},[204,45935,45936,45938],{"class":206,"line":207},[204,45937,30478],{"class":210},[204,45939,30481],{"class":214},[204,45941,45942,45944,45946,45948],{"class":206,"line":126},[204,45943,30823],{"class":210},[204,45945,30826],{"class":214},[204,45947,30478],{"class":210},[204,45949,30831],{"class":214},[204,45951,45952,45954,45956,45958],{"class":206,"line":131},[204,45953,30823],{"class":210},[204,45955,30843],{"class":214},[204,45957,30478],{"class":210},[204,45959,30848],{"class":214},[204,45961,45962],{"class":206,"line":1281},[204,45963,2486],{"emptyLinePlaceholder":135},[204,45965,45966,45968,45970,45972,45974,45976,45978],{"class":206,"line":1287},[204,45967,14781],{"class":210},[204,45969,41579],{"class":2049},[204,45971,215],{"class":214},[204,45973,30864],{"class":2049},[204,45975,771],{"class":214},[204,45977,30869],{"class":2049},[204,45979,30872],{"class":214},[204,45981,45982,45984,45986],{"class":206,"line":1301},[204,45983,30887],{"class":210},[204,45985,30890],{"class":263},[204,45987,41598],{"class":214},[204,45989,45990,45992,45994,45996,45998,46000],{"class":206,"line":1307},[204,45991,30903],{"class":263},[204,45993,41605],{"class":214},[204,45995,30909],{"class":263},[204,45997,30912],{"class":214},[204,45999,30915],{"class":263},[204,46001,2062],{"class":214},[204,46003,46004,46006,46008,46010],{"class":206,"line":1398},[204,46005,30931],{"class":263},[204,46007,34857],{"class":214},[204,46009,260],{"class":210},[204,46011,34862],{"class":214},[204,46013,46014],{"class":206,"line":1404},[204,46015,41628],{"class":273},[204,46017,46018,46020,46022,46024,46026,46028,46030,46032,46034,46036,46038,46040,46042,46044],{"class":206,"line":1416},[204,46019,30931],{"class":263},[204,46021,41635],{"class":214},[204,46023,260],{"class":210},[204,46025,30939],{"class":214},[204,46027,30942],{"class":5303},[204,46029,260],{"class":210},[204,46031,41646],{"class":214},[204,46033,30951],{"class":5303},[204,46035,260],{"class":210},[204,46037,41653],{"class":214},[204,46039,30960],{"class":5303},[204,46041,260],{"class":210},[204,46043,431],{"class":263},[204,46045,221],{"class":214},[204,46047,46048],{"class":206,"line":1698},[204,46049,41666],{"class":273},[204,46051,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072,46074,46076,46078,46080,46082],{"class":206,"line":1703},[204,46053,30931],{"class":263},[204,46055,41673],{"class":214},[204,46057,260],{"class":210},[204,46059,30939],{"class":214},[204,46061,30942],{"class":5303},[204,46063,260],{"class":210},[204,46065,41646],{"class":214},[204,46067,30951],{"class":5303},[204,46069,260],{"class":210},[204,46071,41690],{"class":214},[204,46073,405],{"class":263},[204,46075,41695],{"class":214},[204,46077,30960],{"class":5303},[204,46079,260],{"class":210},[204,46081,431],{"class":263},[204,46083,221],{"class":214},[204,46085,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128],{"class":206,"line":1709},[204,46087,30931],{"class":263},[204,46089,41710],{"class":214},[204,46091,260],{"class":210},[204,46093,30939],{"class":214},[204,46095,30942],{"class":5303},[204,46097,260],{"class":210},[204,46099,41690],{"class":214},[204,46101,405],{"class":263},[204,46103,41695],{"class":214},[204,46105,30951],{"class":5303},[204,46107,260],{"class":210},[204,46109,41690],{"class":214},[204,46111,431],{"class":263},[204,46113,41695],{"class":214},[204,46115,30960],{"class":5303},[204,46117,260],{"class":210},[204,46119,286],{"class":263},[204,46121,591],{"class":214},[204,46123,30969],{"class":5303},[204,46125,260],{"class":210},[204,46127,431],{"class":263},[204,46129,221],{"class":214},[204,46131,46132],{"class":206,"line":1714},[204,46133,41755],{"class":273},[204,46135,46136,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162,46164,46166],{"class":206,"line":1728},[204,46137,30931],{"class":263},[204,46139,41762],{"class":214},[204,46141,260],{"class":210},[204,46143,30939],{"class":214},[204,46145,30942],{"class":5303},[204,46147,260],{"class":210},[204,46149,41646],{"class":214},[204,46151,30951],{"class":5303},[204,46153,260],{"class":210},[204,46155,41779],{"class":214},[204,46157,405],{"class":263},[204,46159,41695],{"class":214},[204,46161,30960],{"class":5303},[204,46163,260],{"class":210},[204,46165,431],{"class":263},[204,46167,221],{"class":214},[204,46169,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212],{"class":206,"line":1733},[204,46171,30931],{"class":263},[204,46173,41798],{"class":214},[204,46175,260],{"class":210},[204,46177,30939],{"class":214},[204,46179,30942],{"class":5303},[204,46181,260],{"class":210},[204,46183,41779],{"class":214},[204,46185,405],{"class":263},[204,46187,41695],{"class":214},[204,46189,30951],{"class":5303},[204,46191,260],{"class":210},[204,46193,41779],{"class":214},[204,46195,431],{"class":263},[204,46197,41695],{"class":214},[204,46199,30960],{"class":5303},[204,46201,260],{"class":210},[204,46203,532],{"class":263},[204,46205,591],{"class":214},[204,46207,30969],{"class":5303},[204,46209,260],{"class":210},[204,46211,292],{"class":263},[204,46213,221],{"class":214},[204,46215,46216],{"class":206,"line":1739},[204,46217,41843],{"class":273},[204,46219,46220],{"class":206,"line":1760},[204,46221,41848],{"class":273},[204,46223,46224,46226,46228,46230,46232,46234,46236,46238,46240,46242,46244,46246,46248,46250,46252,46254],{"class":206,"line":1765},[204,46225,30931],{"class":263},[204,46227,41855],{"class":214},[204,46229,260],{"class":210},[204,46231,34915],{"class":214},[204,46233,30960],{"class":5303},[204,46235,260],{"class":210},[204,46237,286],{"class":263},[204,46239,591],{"class":214},[204,46241,31015],{"class":5303},[204,46243,260],{"class":210},[204,46245,431],{"class":263},[204,46247,591],{"class":214},[204,46249,30969],{"class":5303},[204,46251,260],{"class":210},[204,46253,431],{"class":263},[204,46255,221],{"class":214},[204,46257,46258,46260,46262,46264,46266,46268,46270,46272,46274,46276,46278,46280,46282,46284],{"class":206,"line":1779},[204,46259,30931],{"class":263},[204,46261,41890],{"class":214},[204,46263,260],{"class":210},[204,46265,30939],{"class":214},[204,46267,30942],{"class":5303},[204,46269,260],{"class":210},[204,46271,41646],{"class":214},[204,46273,30951],{"class":5303},[204,46275,260],{"class":210},[204,46277,41907],{"class":214},[204,46279,30960],{"class":5303},[204,46281,260],{"class":210},[204,46283,431],{"class":263},[204,46285,221],{"class":214},[204,46287,46288],{"class":206,"line":1784},[204,46289,2486],{"emptyLinePlaceholder":135},[204,46291,46292,46294,46296],{"class":206,"line":1813},[204,46293,30887],{"class":210},[204,46295,31179],{"class":2049},[204,46297,31182],{"class":214},[204,46299,46300,46302,46304,46306,46308,46310],{"class":206,"line":1818},[204,46301,41932],{"class":214},[204,46303,260],{"class":210},[204,46305,30909],{"class":263},[204,46307,35270],{"class":214},[204,46309,30909],{"class":263},[204,46311,41943],{"class":214},[204,46313,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332],{"class":206,"line":1835},[204,46315,7172],{"class":214},[204,46317,260],{"class":210},[204,46319,30909],{"class":263},[204,46321,35270],{"class":214},[204,46323,30909],{"class":263},[204,46325,41958],{"class":214},[204,46327,30909],{"class":263},[204,46329,35270],{"class":214},[204,46331,30909],{"class":263},[204,46333,41967],{"class":214},[204,46335,46336,46338,46340,46342,46344,46346,46348,46350,46352,46354],{"class":206,"line":1840},[204,46337,41972],{"class":214},[204,46339,260],{"class":210},[204,46341,30909],{"class":263},[204,46343,35270],{"class":214},[204,46345,30909],{"class":263},[204,46347,41983],{"class":214},[204,46349,30909],{"class":263},[204,46351,35270],{"class":214},[204,46353,30909],{"class":263},[204,46355,41992],{"class":214},[204,46357,46358,46360,46362,46364,46366,46368,46370,46372],{"class":206,"line":1845},[204,46359,41997],{"class":214},[204,46361,260],{"class":210},[204,46363,30909],{"class":263},[204,46365,35270],{"class":214},[204,46367,30909],{"class":263},[204,46369,42008],{"class":214},[204,46371,30909],{"class":263},[204,46373,42013],{"class":214},[204,46375,46376],{"class":206,"line":1850},[204,46377,42018],{"class":273},[204,46379,46380,46382,46384,46386,46388,46390],{"class":206,"line":1864},[204,46381,14839],{"class":210},[204,46383,42025],{"class":214},[204,46385,32771],{"class":5303},[204,46387,260],{"class":210},[204,46389,431],{"class":263},[204,46391,221],{"class":214},[204,46393,46394],{"class":206,"line":1869},[204,46395,2486],{"emptyLinePlaceholder":135},[204,46397,46398],{"class":206,"line":2663},[204,46399,42046],{"class":273},[204,46401,46402,46404,46406,46408,46410,46412,46414],{"class":206,"line":2677},[204,46403,14781],{"class":210},[204,46405,42053],{"class":2049},[204,46407,215],{"class":214},[204,46409,30864],{"class":2049},[204,46411,771],{"class":214},[204,46413,30869],{"class":2049},[204,46415,30872],{"class":214},[204,46417,46418],{"class":206,"line":2685},[204,46419,42068],{"class":273},[204,46421,46422,46424,46426],{"class":206,"line":2690},[204,46423,30887],{"class":210},[204,46425,30890],{"class":263},[204,46427,42077],{"class":214},[204,46429,46430,46432,46434,46436,46438,46440],{"class":206,"line":2696},[204,46431,30903],{"class":263},[204,46433,42084],{"class":214},[204,46435,30909],{"class":263},[204,46437,30912],{"class":214},[204,46439,30915],{"class":263},[204,46441,2062],{"class":214},[204,46443,46444,46446,46448,46450],{"class":206,"line":2702},[204,46445,30931],{"class":263},[204,46447,42099],{"class":214},[204,46449,260],{"class":210},[204,46451,38095],{"class":214},[204,46453,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494],{"class":206,"line":2707},[204,46455,38100],{"class":214},[204,46457,30942],{"class":5303},[204,46459,260],{"class":210},[204,46461,286],{"class":263},[204,46463,591],{"class":214},[204,46465,30951],{"class":5303},[204,46467,260],{"class":210},[204,46469,417],{"class":263},[204,46471,591],{"class":214},[204,46473,30960],{"class":5303},[204,46475,260],{"class":210},[204,46477,582],{"class":263},[204,46479,591],{"class":214},[204,46481,31015],{"class":5303},[204,46483,260],{"class":210},[204,46485,292],{"class":263},[204,46487,591],{"class":214},[204,46489,30969],{"class":5303},[204,46491,260],{"class":210},[204,46493,286],{"class":263},[204,46495,38133],{"class":214},[204,46497,46498],{"class":206,"line":8035},[204,46499,38138],{"class":214},[204,46501,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526],{"class":206,"line":8059},[204,46503,38183],{"class":214},[204,46505,30960],{"class":5303},[204,46507,260],{"class":210},[204,46509,286],{"class":263},[204,46511,591],{"class":214},[204,46513,31015],{"class":5303},[204,46515,260],{"class":210},[204,46517,292],{"class":263},[204,46519,591],{"class":214},[204,46521,30969],{"class":5303},[204,46523,260],{"class":210},[204,46525,431],{"class":263},[204,46527,221],{"class":214},[204,46529,46530],{"class":206,"line":8064},[204,46531,38212],{"class":214},[204,46533,46534,46536,46538,46540],{"class":206,"line":8070},[204,46535,30931],{"class":263},[204,46537,42190],{"class":214},[204,46539,260],{"class":210},[204,46541,38095],{"class":214},[204,46543,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568],{"class":206,"line":8097},[204,46545,38100],{"class":214},[204,46547,30942],{"class":5303},[204,46549,260],{"class":210},[204,46551,417],{"class":263},[204,46553,591],{"class":214},[204,46555,30951],{"class":5303},[204,46557,260],{"class":210},[204,46559,417],{"class":263},[204,46561,591],{"class":214},[204,46563,30960],{"class":5303},[204,46565,260],{"class":210},[204,46567,431],{"class":263},[204,46569,38133],{"class":214},[204,46571,46572],{"class":206,"line":8102},[204,46573,38138],{"class":214},[204,46575,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608],{"class":206,"line":8108},[204,46577,38100],{"class":214},[204,46579,30942],{"class":5303},[204,46581,260],{"class":210},[204,46583,417],{"class":263},[204,46585,591],{"class":214},[204,46587,30951],{"class":5303},[204,46589,260],{"class":210},[204,46591,42245],{"class":263},[204,46593,591],{"class":214},[204,46595,30960],{"class":5303},[204,46597,260],{"class":210},[204,46599,286],{"class":263},[204,46601,591],{"class":214},[204,46603,30969],{"class":5303},[204,46605,260],{"class":210},[204,46607,431],{"class":263},[204,46609,38133],{"class":214},[204,46611,46612],{"class":206,"line":8120},[204,46613,38138],{"class":214},[204,46615,46616,46618,46620,46622,46624,46626,46628,46630,46632,46634,46636,46638,46640],{"class":206,"line":8132},[204,46617,38183],{"class":214},[204,46619,30960],{"class":5303},[204,46621,260],{"class":210},[204,46623,286],{"class":263},[204,46625,591],{"class":214},[204,46627,31015],{"class":5303},[204,46629,260],{"class":210},[204,46631,292],{"class":263},[204,46633,591],{"class":214},[204,46635,30969],{"class":5303},[204,46637,260],{"class":210},[204,46639,431],{"class":263},[204,46641,221],{"class":214},[204,46643,46644],{"class":206,"line":8144},[204,46645,38212],{"class":214},[204,46647,46648,46650,46652,46654],{"class":206,"line":9803},[204,46649,30931],{"class":263},[204,46651,42306],{"class":214},[204,46653,260],{"class":210},[204,46655,38095],{"class":214},[204,46657,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686],{"class":206,"line":9828},[204,46659,42315],{"class":214},[204,46661,42245],{"class":263},[204,46663,591],{"class":214},[204,46665,417],{"class":263},[204,46667,42324],{"class":214},[204,46669,423],{"class":263},[204,46671,591],{"class":214},[204,46673,32156],{"class":263},[204,46675,42333],{"class":214},[204,46677,814],{"class":263},[204,46679,591],{"class":214},[204,46681,411],{"class":263},[204,46683,42342],{"class":214},[204,46685,411],{"class":263},[204,46687,38133],{"class":214},[204,46689,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718],{"class":206,"line":9851},[204,46691,42315],{"class":214},[204,46693,34956],{"class":263},[204,46695,591],{"class":214},[204,46697,32156],{"class":263},[204,46699,42324],{"class":214},[204,46701,32156],{"class":263},[204,46703,591],{"class":214},[204,46705,42245],{"class":263},[204,46707,42333],{"class":214},[204,46709,411],{"class":263},[204,46711,591],{"class":214},[204,46713,423],{"class":263},[204,46715,42342],{"class":214},[204,46717,417],{"class":263},[204,46719,38133],{"class":214},[204,46721,46722,46724,46726,46728,46730,46732,46734,46736,46738,46740,46742,46744,46746],{"class":206,"line":9875},[204,46723,38183],{"class":214},[204,46725,30960],{"class":5303},[204,46727,260],{"class":210},[204,46729,286],{"class":263},[204,46731,591],{"class":214},[204,46733,31015],{"class":5303},[204,46735,260],{"class":210},[204,46737,292],{"class":263},[204,46739,591],{"class":214},[204,46741,30969],{"class":5303},[204,46743,260],{"class":210},[204,46745,431],{"class":263},[204,46747,221],{"class":214},[204,46749,46750],{"class":206,"line":9880},[204,46751,38212],{"class":214},[204,46753,46754,46756,46758,46760],{"class":206,"line":9885},[204,46755,30931],{"class":263},[204,46757,42417],{"class":214},[204,46759,260],{"class":210},[204,46761,38095],{"class":214},[204,46763,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792],{"class":206,"line":9890},[204,46765,42315],{"class":214},[204,46767,42428],{"class":263},[204,46769,591],{"class":214},[204,46771,42245],{"class":263},[204,46773,42324],{"class":214},[204,46775,423],{"class":263},[204,46777,591],{"class":214},[204,46779,42441],{"class":263},[204,46781,42333],{"class":214},[204,46783,814],{"class":263},[204,46785,591],{"class":214},[204,46787,820],{"class":263},[204,46789,42342],{"class":214},[204,46791,417],{"class":263},[204,46793,38133],{"class":214},[204,46795,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824],{"class":206,"line":9899},[204,46797,42315],{"class":214},[204,46799,38543],{"class":263},[204,46801,591],{"class":214},[204,46803,21135],{"class":263},[204,46805,42324],{"class":214},[204,46807,831],{"class":263},[204,46809,591],{"class":214},[204,46811,31587],{"class":263},[204,46813,42333],{"class":214},[204,46815,1013],{"class":263},[204,46817,591],{"class":214},[204,46819,417],{"class":263},[204,46821,42342],{"class":214},[204,46823,417],{"class":263},[204,46825,38133],{"class":214},[204,46827,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":206,"line":9904},[204,46829,42315],{"class":214},[204,46831,38543],{"class":263},[204,46833,591],{"class":214},[204,46835,32156],{"class":263},[204,46837,42324],{"class":214},[204,46839,32156],{"class":263},[204,46841,591],{"class":214},[204,46843,34956],{"class":263},[204,46845,42333],{"class":214},[204,46847,1013],{"class":263},[204,46849,591],{"class":214},[204,46851,417],{"class":263},[204,46853,42342],{"class":214},[204,46855,417],{"class":263},[204,46857,38133],{"class":214},[204,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888],{"class":206,"line":9910},[204,46861,42315],{"class":214},[204,46863,38543],{"class":263},[204,46865,591],{"class":214},[204,46867,831],{"class":263},[204,46869,42324],{"class":214},[204,46871,32156],{"class":263},[204,46873,591],{"class":214},[204,46875,42538],{"class":263},[204,46877,42333],{"class":214},[204,46879,411],{"class":263},[204,46881,591],{"class":214},[204,46883,417],{"class":263},[204,46885,42342],{"class":214},[204,46887,417],{"class":263},[204,46889,38133],{"class":214},[204,46891,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920],{"class":206,"line":9931},[204,46893,42315],{"class":214},[204,46895,42559],{"class":263},[204,46897,591],{"class":214},[204,46899,34956],{"class":263},[204,46901,42324],{"class":214},[204,46903,21135],{"class":263},[204,46905,591],{"class":214},[204,46907,42572],{"class":263},[204,46909,42333],{"class":214},[204,46911,411],{"class":263},[204,46913,591],{"class":214},[204,46915,32156],{"class":263},[204,46917,42342],{"class":214},[204,46919,32156],{"class":263},[204,46921,38133],{"class":214},[204,46923,46924,46926,46928,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948],{"class":206,"line":9937},[204,46925,38183],{"class":214},[204,46927,30960],{"class":5303},[204,46929,260],{"class":210},[204,46931,286],{"class":263},[204,46933,591],{"class":214},[204,46935,31015],{"class":5303},[204,46937,260],{"class":210},[204,46939,292],{"class":263},[204,46941,591],{"class":214},[204,46943,30969],{"class":5303},[204,46945,260],{"class":210},[204,46947,431],{"class":263},[204,46949,221],{"class":214},[204,46951,46952],{"class":206,"line":9951},[204,46953,38212],{"class":214},[204,46955,46956,46958,46960,46962],{"class":206,"line":9957},[204,46957,30931],{"class":263},[204,46959,42625],{"class":214},[204,46961,260],{"class":210},[204,46963,38095],{"class":214},[204,46965,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994],{"class":206,"line":9984},[204,46967,42315],{"class":214},[204,46969,42636],{"class":263},[204,46971,591],{"class":214},[204,46973,34956],{"class":263},[204,46975,42324],{"class":214},[204,46977,21135],{"class":263},[204,46979,591],{"class":214},[204,46981,42572],{"class":263},[204,46983,42333],{"class":214},[204,46985,411],{"class":263},[204,46987,591],{"class":214},[204,46989,32156],{"class":263},[204,46991,42342],{"class":214},[204,46993,32156],{"class":263},[204,46995,38133],{"class":214},[204,46997,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022,47024,47026],{"class":206,"line":9993},[204,46999,42315],{"class":214},[204,47001,42636],{"class":263},[204,47003,591],{"class":214},[204,47005,35026],{"class":263},[204,47007,42324],{"class":214},[204,47009,42245],{"class":263},[204,47011,591],{"class":214},[204,47013,35026],{"class":263},[204,47015,42333],{"class":214},[204,47017,820],{"class":263},[204,47019,591],{"class":214},[204,47021,32156],{"class":263},[204,47023,42342],{"class":214},[204,47025,32156],{"class":263},[204,47027,38133],{"class":214},[204,47029,47030,47032,47034,47036,47038],{"class":206,"line":9999},[204,47031,42699],{"class":214},[204,47033,431],{"class":263},[204,47035,591],{"class":214},[204,47037,431],{"class":263},[204,47039,42708],{"class":214},[204,47041,47042],{"class":206,"line":10007},[204,47043,38876],{"class":214},[204,47045,47046,47048,47050,47052,47054],{"class":206,"line":10012},[204,47047,38881],{"class":214},[204,47049,42719],{"class":263},[204,47051,591],{"class":214},[204,47053,292],{"class":263},[204,47055,221],{"class":214},[204,47057,47058],{"class":206,"line":16691},[204,47059,38212],{"class":214},[204,47061,47062],{"class":206,"line":16697},[204,47063,42734],{"class":273},[204,47065,47066,47068,47070,47072,47074],{"class":206,"line":16720},[204,47067,3489],{"class":210},[204,47069,38954],{"class":214},[204,47071,26129],{"class":210},[204,47073,38959],{"class":263},[204,47075,38962],{"class":214},[204,47077,47078,47080,47082],{"class":206,"line":16726},[204,47079,4728],{"class":210},[204,47081,38974],{"class":263},[204,47083,38977],{"class":214},[204,47085,47086,47088,47090,47092,47094,47096,47098,47100,47102],{"class":206,"line":16749},[204,47087,38987],{"class":214},[204,47089,42761],{"class":5303},[204,47091,260],{"class":210},[204,47093,42766],{"class":319},[204,47095,591],{"class":214},[204,47097,38990],{"class":5303},[204,47099,260],{"class":210},[204,47101,38995],{"class":319},[204,47103,221],{"class":214},[204,47105,47106],{"class":206,"line":16763},[204,47107,42781],{"class":273},[204,47109,47110],{"class":206,"line":16783},[204,47111,42786],{"class":273},[204,47113,47114],{"class":206,"line":16789},[204,47115,42791],{"class":273},[204,47117,47118],{"class":206,"line":16800},[204,47119,42796],{"class":273},[204,47121,47122],{"class":206,"line":16823},[204,47123,42801],{"class":273},[204,47125,47126],{"class":206,"line":16845},[204,47127,42806],{"class":273},[204,47129,47130,47132,47134,47136,47138,47140],{"class":206,"line":16850},[204,47131,39007],{"class":210},[204,47133,39010],{"class":214},[204,47135,39013],{"class":210},[204,47137,39016],{"class":210},[204,47139,39019],{"class":263},[204,47141,3825],{"class":214},[204,47143,47144,47146,47148],{"class":206,"line":16856},[204,47145,39031],{"class":214},[204,47147,405],{"class":263},[204,47149,221],{"class":214},[204,47151,47152,47154,47156],{"class":206,"line":16870},[204,47153,42833],{"class":210},[204,47155,38974],{"class":263},[204,47157,39050],{"class":214},[204,47159,47160,47162,47164,47166,47168],{"class":206,"line":16883},[204,47161,42842],{"class":214},[204,47163,405],{"class":263},[204,47165,591],{"class":214},[204,47167,39072],{"class":263},[204,47169,221],{"class":214},[204,47171,47172,47174,47176,47178,47180,47182],{"class":206,"line":16888},[204,47173,42855],{"class":210},[204,47175,39010],{"class":214},[204,47177,39013],{"class":210},[204,47179,39016],{"class":210},[204,47181,39019],{"class":263},[204,47183,3825],{"class":214},[204,47185,47186,47188,47190],{"class":206,"line":16902},[204,47187,42870],{"class":214},[204,47189,405],{"class":263},[204,47191,221],{"class":214},[204,47193,47194],{"class":206,"line":16907},[204,47195,35251],{"class":273},[204,47197,47198,47200,47202],{"class":206,"line":16913},[204,47199,30887],{"class":210},[204,47201,31179],{"class":2049},[204,47203,31182],{"class":214},[204,47205,47206,47208,47210,47212],{"class":206,"line":16918},[204,47207,31187],{"class":214},[204,47209,260],{"class":210},[204,47211,30909],{"class":263},[204,47213,42897],{"class":214},[204,47215,47216,47218,47220,47222],{"class":206,"line":16932},[204,47217,31187],{"class":214},[204,47219,260],{"class":210},[204,47221,30909],{"class":263},[204,47223,42908],{"class":214},[204,47225,47226,47228,47230,47232],{"class":206,"line":16937},[204,47227,31187],{"class":214},[204,47229,260],{"class":210},[204,47231,30909],{"class":263},[204,47233,42919],{"class":214},[204,47235,47236,47238,47240,47242],{"class":206,"line":16942},[204,47237,31187],{"class":214},[204,47239,260],{"class":210},[204,47241,30909],{"class":263},[204,47243,42930],{"class":214},[204,47245,47246,47248,47250,47252],{"class":206,"line":16956},[204,47247,31187],{"class":214},[204,47249,260],{"class":210},[204,47251,30909],{"class":263},[204,47253,42941],{"class":214},[204,47255,47256,47258],{"class":206,"line":16968},[204,47257,14839],{"class":210},[204,47259,31295],{"class":214},[204,47261,47262],{"class":206,"line":16973},[204,47263,2486],{"emptyLinePlaceholder":135},[204,47265,47266],{"class":206,"line":16986},[204,47267,42956],{"class":273},[204,47269,47270,47272,47274,47276,47278],{"class":206,"line":16991},[204,47271,1617],{"class":210},[204,47273,31306],{"class":263},[204,47275,3035],{"class":210},[204,47277,31311],{"class":319},[204,47279,3825],{"class":214},[204,47281,47282,47284,47286,47288,47290,47292,47294,47296,47298],{"class":206,"line":16996},[204,47283,31323],{"class":214},[204,47285,260],{"class":210},[204,47287,30537],{"class":214},[204,47289,31330],{"class":319},[204,47291,1790],{"class":210},[204,47293,31335],{"class":214},[204,47295,1787],{"class":210},[204,47297,30562],{"class":319},[204,47299,221],{"class":214},[204,47301,47302,47304,47306],{"class":206,"line":17001},[204,47303,31375],{"class":214},[204,47305,260],{"class":210},[204,47307,42997],{"class":214},[204,47309,47310,47312,47314,47316,47318,47320,47322,47324],{"class":206,"line":17014},[204,47311,31385],{"class":263},[204,47313,31388],{"class":214},[204,47315,431],{"class":263},[204,47317,591],{"class":214},[204,47319,31587],{"class":263},[204,47321,591],{"class":214},[204,47323,31587],{"class":263},[204,47325,31401],{"class":214},[22085,47327,47329],{"id":47328},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47331,47332],{},"计算图片的均值与方差，用于训练中归一化处理操作",[196,47334,47336],{"className":30464,"code":47335,"language":30466,"meta":125,"style":125},"# 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",[81,47337,47338,47343,47356,47361,47367,47372,47382,47386,47391,47401,47405,47410,47420,47437,47441,47446,47458,47470,47501,47510,47520,47530,47534,47539,47554,47558,47563,47568,47573,47583,47588,47613,47617,47622,47637,47641,47654,47658,47663,47668,47673,47678,47683,47693,47703,47726,47734,47742,47750,47754,47766,47770,47775,47779,47783,47790,47810,47834,47841,47855,47860,47865,47869,47883,47887,47899],{"__ignoreMap":125},[204,47339,47340],{"class":206,"line":207},[204,47341,47342],{"class":273},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[204,47344,47345,47347,47350,47353],{"class":206,"line":126},[204,47346,30823],{"class":210},[204,47348,47349],{"class":263}," PIL",[204,47351,47352],{"class":210}," import",[204,47354,47355],{"class":214}," Image\n",[204,47357,47358],{"class":206,"line":131},[204,47359,47360],{"class":273},"# os 用来处理文件夹和文件路径\n",[204,47362,47363,47365],{"class":206,"line":1281},[204,47364,30478],{"class":210},[204,47366,45391],{"class":214},[204,47368,47369],{"class":206,"line":1287},[204,47370,47371],{"class":273},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[204,47373,47374,47376,47378,47380],{"class":206,"line":1301},[204,47375,30478],{"class":210},[204,47377,31466],{"class":214},[204,47379,31469],{"class":210},[204,47381,31472],{"class":214},[204,47383,47384],{"class":206,"line":1307},[204,47385,2486],{"emptyLinePlaceholder":135},[204,47387,47388],{"class":206,"line":1398},[204,47389,47390],{"class":273},"# 文件夹路径，包含所有图片文件\n",[204,47392,47393,47396,47398],{"class":206,"line":1404},[204,47394,47395],{"class":214},"folder_path ",[204,47397,260],{"class":210},[204,47399,47400],{"class":319}," 'data_cat_dog'\n",[204,47402,47403],{"class":206,"line":1416},[204,47404,2486],{"emptyLinePlaceholder":135},[204,47406,47407],{"class":206,"line":1698},[204,47408,47409],{"class":273},"# 初始化累积变量\n",[204,47411,47412,47415,47417],{"class":206,"line":1703},[204,47413,47414],{"class":214},"total_pixels ",[204,47416,260],{"class":210},[204,47418,47419],{"class":263}," 0\n",[204,47421,47422,47425,47427,47430,47432,47434],{"class":206,"line":1709},[204,47423,47424],{"class":214},"sum_normalized_pixel_values ",[204,47426,260],{"class":210},[204,47428,47429],{"class":214}," np.zeros(",[204,47431,286],{"class":263},[204,47433,45894],{"class":214},[204,47435,47436],{"class":273},"# 如果是RGB图像，需要三个通道的均值和方差\n",[204,47438,47439],{"class":206,"line":1714},[204,47440,2486],{"emptyLinePlaceholder":135},[204,47442,47443],{"class":206,"line":1728},[204,47444,47445],{"class":273},"# 遍历文件夹中的图片文件\n",[204,47447,47448,47450,47453,47455],{"class":206,"line":1733},[204,47449,3111],{"class":210},[204,47451,47452],{"class":214}," root, dirs, files ",[204,47454,26129],{"class":210},[204,47456,47457],{"class":214}," os.walk(folder_path):\n",[204,47459,47460,47462,47465,47467],{"class":206,"line":1739},[204,47461,3287],{"class":210},[204,47463,47464],{"class":214}," filename ",[204,47466,26129],{"class":210},[204,47468,47469],{"class":214}," files:\n",[204,47471,47472,47474,47477,47480,47482,47485,47487,47490,47492,47495,47498],{"class":206,"line":1760},[204,47473,2583],{"class":210},[204,47475,47476],{"class":214}," filename.endswith((",[204,47478,47479],{"class":319},"'.jpg'",[204,47481,12522],{"class":214},[204,47483,47484],{"class":319},"'.jpeg'",[204,47486,12522],{"class":214},[204,47488,47489],{"class":319},"'.png'",[204,47491,12522],{"class":214},[204,47493,47494],{"class":319},"'.bmp'",[204,47496,47497],{"class":214},")):  ",[204,47499,47500],{"class":273},"# 可根据实际情况添加其他格式\n",[204,47502,47503,47505,47507],{"class":206,"line":1765},[204,47504,45759],{"class":214},[204,47506,260],{"class":210},[204,47508,47509],{"class":214}," os.path.join(root, filename)\n",[204,47511,47512,47515,47517],{"class":206,"line":1779},[204,47513,47514],{"class":214},"            image ",[204,47516,260],{"class":210},[204,47518,47519],{"class":214}," Image.open(image_path)\n",[204,47521,47522,47525,47527],{"class":206,"line":1784},[204,47523,47524],{"class":214},"            image_array ",[204,47526,260],{"class":210},[204,47528,47529],{"class":214}," np.array(image)\n",[204,47531,47532],{"class":206,"line":1813},[204,47533,2486],{"emptyLinePlaceholder":135},[204,47535,47536],{"class":206,"line":1818},[204,47537,47538],{"class":273},"            # 归一化像素值到0-1之间\n",[204,47540,47541,47544,47546,47549,47551],{"class":206,"line":1835},[204,47542,47543],{"class":214},"            normalized_image_array ",[204,47545,260],{"class":210},[204,47547,47548],{"class":214}," image_array ",[204,47550,797],{"class":210},[204,47552,47553],{"class":263}," 255.0\n",[204,47555,47556],{"class":206,"line":1840},[204,47557,2486],{"emptyLinePlaceholder":135},[204,47559,47560],{"class":206,"line":1845},[204,47561,47562],{"class":273},"            # print(image_path)\n",[204,47564,47565],{"class":206,"line":1850},[204,47566,47567],{"class":273},"            # print(normalized_image_array.shape)\n",[204,47569,47570],{"class":206,"line":1864},[204,47571,47572],{"class":273},"            # 累积归一化后的像素值和像素数量\n",[204,47574,47575,47578,47580],{"class":206,"line":1869},[204,47576,47577],{"class":214},"            total_pixels ",[204,47579,9564],{"class":210},[204,47581,47582],{"class":214}," normalized_image_array.size\n",[204,47584,47585],{"class":206,"line":2663},[204,47586,47587],{"class":273},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[204,47589,47590,47593,47595,47598,47601,47603,47605,47607,47609,47611],{"class":206,"line":2677},[204,47591,47592],{"class":214},"            sum_normalized_pixel_values ",[204,47594,9564],{"class":210},[204,47596,47597],{"class":214}," np.sum(normalized_image_array, ",[204,47599,47600],{"class":5303},"axis",[204,47602,260],{"class":210},[204,47604,215],{"class":214},[204,47606,405],{"class":263},[204,47608,12522],{"class":214},[204,47610,431],{"class":263},[204,47612,30583],{"class":214},[204,47614,47615],{"class":206,"line":2685},[204,47616,2486],{"emptyLinePlaceholder":135},[204,47618,47619],{"class":206,"line":2690},[204,47620,47621],{"class":273},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[204,47623,47624,47627,47629,47632,47634],{"class":206,"line":2696},[204,47625,47626],{"class":214},"mean ",[204,47628,260],{"class":210},[204,47630,47631],{"class":214}," sum_normalized_pixel_values ",[204,47633,797],{"class":210},[204,47635,47636],{"class":214}," total_pixels\n",[204,47638,47639],{"class":206,"line":2702},[204,47640,2486],{"emptyLinePlaceholder":135},[204,47642,47643,47646,47648,47650,47652],{"class":206,"line":2707},[204,47644,47645],{"class":214},"sum_squared_diff ",[204,47647,260],{"class":210},[204,47649,47429],{"class":214},[204,47651,286],{"class":263},[204,47653,221],{"class":214},[204,47655,47656],{"class":206,"line":8035},[204,47657,2486],{"emptyLinePlaceholder":135},[204,47659,47660],{"class":206,"line":8059},[204,47661,47662],{"class":273},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[204,47664,47665],{"class":206,"line":8064},[204,47666,47667],{"class":273},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[204,47669,47670],{"class":206,"line":8070},[204,47671,47672],{"class":273},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[204,47674,47675],{"class":206,"line":8097},[204,47676,47677],{"class":273},"# Image.open(image_path)：打开图片\n",[204,47679,47680],{"class":206,"line":8102},[204,47681,47682],{"class":273},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[204,47684,47685,47687,47689,47691],{"class":206,"line":8108},[204,47686,3111],{"class":210},[204,47688,47452],{"class":214},[204,47690,26129],{"class":210},[204,47692,47457],{"class":214},[204,47694,47695,47697,47699,47701],{"class":206,"line":8120},[204,47696,3287],{"class":210},[204,47698,47464],{"class":214},[204,47700,26129],{"class":210},[204,47702,47469],{"class":214},[204,47704,47705,47707,47709,47711,47713,47715,47717,47719,47721,47723],{"class":206,"line":8132},[204,47706,2583],{"class":210},[204,47708,47476],{"class":214},[204,47710,47479],{"class":319},[204,47712,12522],{"class":214},[204,47714,47484],{"class":319},[204,47716,12522],{"class":214},[204,47718,47489],{"class":319},[204,47720,12522],{"class":214},[204,47722,47494],{"class":319},[204,47724,47725],{"class":214},")):\n",[204,47727,47728,47730,47732],{"class":206,"line":8144},[204,47729,45759],{"class":214},[204,47731,260],{"class":210},[204,47733,47509],{"class":214},[204,47735,47736,47738,47740],{"class":206,"line":9803},[204,47737,47514],{"class":214},[204,47739,260],{"class":210},[204,47741,47519],{"class":214},[204,47743,47744,47746,47748],{"class":206,"line":9828},[204,47745,47524],{"class":214},[204,47747,260],{"class":210},[204,47749,47529],{"class":214},[204,47751,47752],{"class":206,"line":9851},[204,47753,47538],{"class":273},[204,47755,47756,47758,47760,47762,47764],{"class":206,"line":9875},[204,47757,47543],{"class":214},[204,47759,260],{"class":210},[204,47761,47548],{"class":214},[204,47763,797],{"class":210},[204,47765,47553],{"class":263},[204,47767,47768],{"class":206,"line":9880},[204,47769,47567],{"class":273},[204,47771,47772],{"class":206,"line":9885},[204,47773,47774],{"class":273},"            # print(mean.shape)\n",[204,47776,47777],{"class":206,"line":9890},[204,47778,47562],{"class":273},[204,47780,47781],{"class":206,"line":9899},[204,47782,2486],{"emptyLinePlaceholder":135},[204,47784,47785,47788],{"class":206,"line":9904},[204,47786,47787],{"class":210},"            try",[204,47789,3825],{"class":214},[204,47791,47792,47795,47797,47800,47802,47805,47807],{"class":206,"line":9910},[204,47793,47794],{"class":214},"                diff ",[204,47796,260],{"class":210},[204,47798,47799],{"class":214}," (normalized_image_array ",[204,47801,745],{"class":210},[204,47803,47804],{"class":214}," mean) ",[204,47806,10748],{"class":210},[204,47808,47809],{"class":263}," 2\n",[204,47811,47812,47815,47817,47820,47822,47824,47826,47828,47830,47832],{"class":206,"line":9931},[204,47813,47814],{"class":214},"                sum_squared_diff ",[204,47816,9564],{"class":210},[204,47818,47819],{"class":214}," np.sum(diff, ",[204,47821,47600],{"class":5303},[204,47823,260],{"class":210},[204,47825,215],{"class":214},[204,47827,405],{"class":263},[204,47829,12522],{"class":214},[204,47831,431],{"class":263},[204,47833,30583],{"class":214},[204,47835,47836,47839],{"class":206,"line":9937},[204,47837,47838],{"class":210},"            except",[204,47840,3825],{"class":214},[204,47842,47843,47846,47848,47850,47853],{"class":206,"line":9951},[204,47844,47845],{"class":263},"                print",[204,47847,215],{"class":214},[204,47849,267],{"class":210},[204,47851,47852],{"class":319},"\"捕获到自定义异常\"",[204,47854,221],{"class":214},[204,47856,47857],{"class":206,"line":9957},[204,47858,47859],{"class":273},"            # diff = (normalized_image_array - mean) ** 2\n",[204,47861,47862],{"class":206,"line":9984},[204,47863,47864],{"class":273},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[204,47866,47867],{"class":206,"line":9993},[204,47868,2486],{"emptyLinePlaceholder":135},[204,47870,47871,47874,47876,47879,47881],{"class":206,"line":9999},[204,47872,47873],{"class":214},"variance ",[204,47875,260],{"class":210},[204,47877,47878],{"class":214}," sum_squared_diff ",[204,47880,797],{"class":210},[204,47882,47636],{"class":214},[204,47884,47885],{"class":206,"line":10007},[204,47886,2486],{"emptyLinePlaceholder":135},[204,47888,47889,47891,47893,47896],{"class":206,"line":10012},[204,47890,30501],{"class":263},[204,47892,215],{"class":214},[204,47894,47895],{"class":319},"\"Mean:\"",[204,47897,47898],{"class":214},", mean)\n",[204,47900,47901,47903,47905,47908],{"class":206,"line":16691},[204,47902,30501],{"class":263},[204,47904,215],{"class":214},[204,47906,47907],{"class":319},"\"Variance:\"",[204,47909,47910],{"class":214},", variance)\n",[196,47912,47914],{"className":30464,"code":47913,"language":30466,"meta":125,"style":125},"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",[81,47915,47916,47922,47928,47938,47944,47954,47968,47978,47988,47998,48002,48012,48022,48026,48030,48038,48043,48048,48067,48071,48076,48081,48086,48091,48132,48137,48147,48152,48165,48170,48175,48180,48185,48190,48194,48199,48204,48226,48230,48262,48276,48286,48296,48300,48310,48324,48334,48344,48354,48360,48364,48368,48372,48376,48380,48388,48408,48412,48416,48420,48424,48440,48444,48448,48456,48460,48464,48472,48476,48480,48484,48492,48496,48500,48504,48512,48516,48524,48528,48536,48540,48548,48552,48560,48564,48568,48576,48580,48584,48596,48620,48634,48638,48642,48646,48654,48658,48666,48670,48678,48682,48690,48694,48702,48706,48714,48718,48730,48734,48742,48746,48754,48758,48762,48766,48770,48778,48782,48798,48802,48810,48814,48818,48822,48826,48830,48834,48838,48854,48858,48870,48874,48886,48890,48902,48906,48914,48918,48926,48930,48934,48938,48944,48948,48956,48960,48976,48980,48988,48992,49008,49020,49024,49036,49040,49044,49052,49056,49060,49068,49072,49080,49084,49092,49096,49100,49142,49184,49188,49192,49208,49212,49228,49232,49236,49244,49248,49252,49264,49302,49306,49310,49318,49322,49336,49346,49352,49358,49364,49370,49374,49378,49384,49388,49392,49400,49404,49422,49426,49430,49434,49450,49454,49458,49462,49466,49470,49490,49510,49514,49518,49522,49530,49538,49542,49558,49578,49598,49602,49607,49616,49625,49630,49635,49640,49653,49658,49667,49676,49693],{"__ignoreMap":125},[204,47917,47918,47920],{"class":206,"line":207},[204,47919,30478],{"class":210},[204,47921,31908],{"class":214},[204,47923,47924,47926],{"class":206,"line":126},[204,47925,30478],{"class":210},[204,47927,31915],{"class":214},[204,47929,47930,47932,47934,47936],{"class":206,"line":131},[204,47931,30478],{"class":210},[204,47933,31926],{"class":214},[204,47935,31469],{"class":210},[204,47937,31931],{"class":214},[204,47939,47940,47942],{"class":206,"line":1281},[204,47941,30478],{"class":210},[204,47943,30481],{"class":214},[204,47945,47946,47948,47950,47952],{"class":206,"line":1287},[204,47947,30823],{"class":210},[204,47949,31501],{"class":214},[204,47951,30478],{"class":210},[204,47953,31948],{"class":214},[204,47955,47956,47958,47960,47962,47965],{"class":206,"line":1301},[204,47957,30823],{"class":210},[204,47959,31454],{"class":214},[204,47961,30478],{"class":210},[204,47963,47964],{"class":214}," ImageFolder ",[204,47966,47967],{"class":273},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[204,47969,47970,47972,47974,47976],{"class":206,"line":1307},[204,47971,30823],{"class":210},[204,47973,31484],{"class":214},[204,47975,30478],{"class":210},[204,47977,31489],{"class":214},[204,47979,47980,47982,47984,47986],{"class":206,"line":1398},[204,47981,30478],{"class":210},[204,47983,31501],{"class":214},[204,47985,31469],{"class":210},[204,47987,31506],{"class":214},[204,47989,47990,47992,47994,47996],{"class":206,"line":1404},[204,47991,30478],{"class":210},[204,47993,31518],{"class":214},[204,47995,31469],{"class":210},[204,47997,31523],{"class":214},[204,47999,48000],{"class":206,"line":1416},[204,48001,31993],{"class":273},[204,48003,48004,48006,48008,48010],{"class":206,"line":1698},[204,48005,30823],{"class":210},[204,48007,32000],{"class":214},[204,48009,30478],{"class":210},[204,48011,43117],{"class":214},[204,48013,48014,48016,48018,48020],{"class":206,"line":1703},[204,48015,30823],{"class":210},[204,48017,30826],{"class":214},[204,48019,30478],{"class":210},[204,48021,30831],{"class":214},[204,48023,48024],{"class":206,"line":1709},[204,48025,2486],{"emptyLinePlaceholder":135},[204,48027,48028],{"class":206,"line":1714},[204,48029,32028],{"class":273},[204,48031,48032,48034,48036],{"class":206,"line":1728},[204,48033,32033],{"class":210},[204,48035,32036],{"class":2049},[204,48037,32039],{"class":214},[204,48039,48040],{"class":206,"line":1733},[204,48041,48042],{"class":273},"    # 导入自己的数据集，并进行数据处理\n",[204,48044,48045],{"class":206,"line":1739},[204,48046,48047],{"class":273},"    # 定义数据集的路径\n",[204,48049,48050,48053,48055,48057,48059,48061,48065],{"class":206,"line":1760},[204,48051,48052],{"class":263},"    ROOT_PATH",[204,48054,260],{"class":210},[204,48056,883],{"class":210},[204,48058,464],{"class":319},[204,48060,771],{"class":263},[204,48062,48064],{"class":48063},"sA_wV","\u002Fdata\u002Ftrain",[204,48066,25220],{"class":319},[204,48068,48069],{"class":206,"line":1765},[204,48070,2486],{"emptyLinePlaceholder":135},[204,48072,48073],{"class":206,"line":1779},[204,48074,48075],{"class":273},"    # 定义归一化方法\n",[204,48077,48078],{"class":206,"line":1784},[204,48079,48080],{"class":273},"    # 这里需要先计算一下数据集的均值和方差\n",[204,48082,48083],{"class":206,"line":1813},[204,48084,48085],{"class":273},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[204,48087,48088],{"class":206,"line":1818},[204,48089,48090],{"class":273},"    # 第一个参数是均值，第二个参数是方差\n",[204,48092,48093,48096,48098,48101,48104,48106,48109,48111,48114,48117,48120,48122,48125,48127,48130],{"class":206,"line":1835},[204,48094,48095],{"class":214},"    normalize",[204,48097,260],{"class":210},[204,48099,48100],{"class":214},"transforms.Normalize([",[204,48102,48103],{"class":263},"0.162",[204,48105,591],{"class":214},[204,48107,48108],{"class":263},"0.151",[204,48110,591],{"class":214},[204,48112,48113],{"class":263},"0.138",[204,48115,48116],{"class":214},"],[",[204,48118,48119],{"class":263},"0.058",[204,48121,591],{"class":214},[204,48123,48124],{"class":263},"0.052",[204,48126,591],{"class":214},[204,48128,48129],{"class":263},"0.048",[204,48131,4743],{"class":214},[204,48133,48134],{"class":206,"line":1840},[204,48135,48136],{"class":273},"    # 定义数据集处理方法变量\n",[204,48138,48139,48142,48144],{"class":206,"line":1845},[204,48140,48141],{"class":214},"    train_transform",[204,48143,260],{"class":210},[204,48145,48146],{"class":214},"transforms.Compose([\n",[204,48148,48149],{"class":206,"line":1850},[204,48150,48151],{"class":273},"        # 调整图像大小为224*224\n",[204,48153,48154,48157,48159,48161,48163],{"class":206,"line":1864},[204,48155,48156],{"class":214},"        transforms.Resize((",[204,48158,31587],{"class":263},[204,48160,591],{"class":214},[204,48162,31587],{"class":263},[204,48164,42708],{"class":214},[204,48166,48167],{"class":206,"line":1869},[204,48168,48169],{"class":273},"        # 将图像转换为张量\n",[204,48171,48172],{"class":206,"line":2663},[204,48173,48174],{"class":214},"        transforms.ToTensor(),\n",[204,48176,48177],{"class":206,"line":2677},[204,48178,48179],{"class":214},"        normalize])\n",[204,48181,48182],{"class":206,"line":2685},[204,48183,48184],{"class":273},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[204,48186,48187],{"class":206,"line":2690},[204,48188,48189],{"class":273},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[204,48191,48192],{"class":206,"line":2696},[204,48193,2486],{"emptyLinePlaceholder":135},[204,48195,48196],{"class":206,"line":2702},[204,48197,48198],{"class":273},"    # 加载数据集\n",[204,48200,48201],{"class":206,"line":2707},[204,48202,48203],{"class":273},"    # 传入数据集路径与处理方法\n",[204,48205,48206,48208,48210,48213,48216,48218,48221,48223],{"class":206,"line":8035},[204,48207,32044],{"class":214},[204,48209,260],{"class":210},[204,48211,48212],{"class":214},"ImageFolder(",[204,48214,48215],{"class":263},"ROOT_PATH",[204,48217,591],{"class":214},[204,48219,48220],{"class":5303},"transform",[204,48222,260],{"class":210},[204,48224,48225],{"class":214},"train_transform)\n",[204,48227,48228],{"class":206,"line":8059},[204,48229,2486],{"emptyLinePlaceholder":135},[204,48231,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254,48256,48258,48260],{"class":206,"line":8064},[204,48233,32096],{"class":214},[204,48235,260],{"class":210},[204,48237,32101],{"class":214},[204,48239,32104],{"class":263},[204,48241,215],{"class":214},[204,48243,32109],{"class":263},[204,48245,668],{"class":210},[204,48247,7445],{"class":263},[204,48249,32116],{"class":214},[204,48251,32104],{"class":263},[204,48253,215],{"class":214},[204,48255,32123],{"class":263},[204,48257,668],{"class":210},[204,48259,7445],{"class":263},[204,48261,32130],{"class":214},[204,48263,48264,48266,48268,48270,48272,48274],{"class":206,"line":8070},[204,48265,32135],{"class":214},[204,48267,260],{"class":210},[204,48269,32140],{"class":214},[204,48271,31623],{"class":5303},[204,48273,260],{"class":210},[204,48275,31628],{"class":214},[204,48277,48278,48280,48282,48284],{"class":206,"line":8097},[204,48279,32151],{"class":5303},[204,48281,260],{"class":210},[204,48283,411],{"class":263},[204,48285,31552],{"class":214},[204,48287,48288,48290,48292,48294],{"class":206,"line":8102},[204,48289,32163],{"class":5303},[204,48291,260],{"class":210},[204,48293,31562],{"class":263},[204,48295,31552],{"class":214},[204,48297,48298],{"class":206,"line":8108},[204,48299,32174],{"class":273},[204,48301,48302,48304,48306,48308],{"class":206,"line":8120},[204,48303,32179],{"class":5303},[204,48305,260],{"class":210},[204,48307,608],{"class":263},[204,48309,221],{"class":214},[204,48311,48312,48314,48316,48318,48320,48322],{"class":206,"line":8132},[204,48313,32190],{"class":214},[204,48315,260],{"class":210},[204,48317,31620],{"class":214},[204,48319,31623],{"class":5303},[204,48321,260],{"class":210},[204,48323,32201],{"class":214},[204,48325,48326,48328,48330,48332],{"class":206,"line":8144},[204,48327,32206],{"class":5303},[204,48329,260],{"class":210},[204,48331,411],{"class":263},[204,48333,31552],{"class":214},[204,48335,48336,48338,48340,48342],{"class":206,"line":9803},[204,48337,32217],{"class":5303},[204,48339,260],{"class":210},[204,48341,31562],{"class":263},[204,48343,31552],{"class":214},[204,48345,48346,48348,48350,48352],{"class":206,"line":9828},[204,48347,32228],{"class":5303},[204,48349,260],{"class":210},[204,48351,608],{"class":263},[204,48353,221],{"class":214},[204,48355,48356,48358],{"class":206,"line":9851},[204,48357,4176],{"class":210},[204,48359,32241],{"class":214},[204,48361,48362],{"class":206,"line":9875},[204,48363,2486],{"emptyLinePlaceholder":135},[204,48365,48366],{"class":206,"line":9880},[204,48367,32250],{"class":273},[204,48369,48370],{"class":206,"line":9885},[204,48371,32255],{"class":273},[204,48373,48374],{"class":206,"line":9890},[204,48375,2486],{"emptyLinePlaceholder":135},[204,48377,48378],{"class":206,"line":9899},[204,48379,32264],{"class":273},[204,48381,48382,48384,48386],{"class":206,"line":9904},[204,48383,32033],{"class":210},[204,48385,32271],{"class":2049},[204,48387,32274],{"class":214},[204,48389,48390,48392,48394,48396,48398,48400,48402,48404,48406],{"class":206,"line":9910},[204,48391,31323],{"class":214},[204,48393,260],{"class":210},[204,48395,30537],{"class":214},[204,48397,31330],{"class":319},[204,48399,1790],{"class":210},[204,48401,31335],{"class":214},[204,48403,1787],{"class":210},[204,48405,32293],{"class":319},[204,48407,221],{"class":214},[204,48409,48410],{"class":206,"line":9931},[204,48411,2486],{"emptyLinePlaceholder":135},[204,48413,48414],{"class":206,"line":9937},[204,48415,32308],{"class":273},[204,48417,48418],{"class":206,"line":9951},[204,48419,32313],{"class":273},[204,48421,48422],{"class":206,"line":9957},[204,48423,32318],{"class":273},[204,48425,48426,48428,48430,48432,48434,48436,48438],{"class":206,"line":9984},[204,48427,32323],{"class":214},[204,48429,260],{"class":210},[204,48431,32328],{"class":214},[204,48433,32331],{"class":5303},[204,48435,260],{"class":210},[204,48437,32336],{"class":263},[204,48439,221],{"class":214},[204,48441,48442],{"class":206,"line":9993},[204,48443,2486],{"emptyLinePlaceholder":135},[204,48445,48446],{"class":206,"line":9999},[204,48447,32347],{"class":273},[204,48449,48450,48452,48454],{"class":206,"line":10007},[204,48451,32352],{"class":214},[204,48453,260],{"class":210},[204,48455,32357],{"class":214},[204,48457,48458],{"class":206,"line":10012},[204,48459,2486],{"emptyLinePlaceholder":135},[204,48461,48462],{"class":206,"line":16691},[204,48463,32366],{"class":273},[204,48465,48466,48468,48470],{"class":206,"line":16697},[204,48467,31375],{"class":214},[204,48469,260],{"class":210},[204,48471,32375],{"class":214},[204,48473,48474],{"class":206,"line":16720},[204,48475,32380],{"class":273},[204,48477,48478],{"class":206,"line":16726},[204,48479,32385],{"class":273},[204,48481,48482],{"class":206,"line":16749},[204,48483,32390],{"class":273},[204,48485,48486,48488,48490],{"class":206,"line":16763},[204,48487,32395],{"class":214},[204,48489,260],{"class":210},[204,48491,32400],{"class":214},[204,48493,48494],{"class":206,"line":16783},[204,48495,2486],{"emptyLinePlaceholder":135},[204,48497,48498],{"class":206,"line":16789},[204,48499,32413],{"class":273},[204,48501,48502],{"class":206,"line":16800},[204,48503,32418],{"class":273},[204,48505,48506,48508,48510],{"class":206,"line":16823},[204,48507,32423],{"class":214},[204,48509,260],{"class":210},[204,48511,32428],{"class":263},[204,48513,48514],{"class":206,"line":16845},[204,48515,32433],{"class":273},[204,48517,48518,48520,48522],{"class":206,"line":16850},[204,48519,32438],{"class":214},[204,48521,260],{"class":210},[204,48523,32443],{"class":214},[204,48525,48526],{"class":206,"line":16856},[204,48527,32448],{"class":273},[204,48529,48530,48532,48534],{"class":206,"line":16870},[204,48531,32453],{"class":214},[204,48533,260],{"class":210},[204,48535,32443],{"class":214},[204,48537,48538],{"class":206,"line":16883},[204,48539,32462],{"class":273},[204,48541,48542,48544,48546],{"class":206,"line":16888},[204,48543,32467],{"class":214},[204,48545,260],{"class":210},[204,48547,32443],{"class":214},[204,48549,48550],{"class":206,"line":16902},[204,48551,32476],{"class":273},[204,48553,48554,48556,48558],{"class":206,"line":16907},[204,48555,32481],{"class":214},[204,48557,260],{"class":210},[204,48559,32443],{"class":214},[204,48561,48562],{"class":206,"line":16913},[204,48563,2486],{"emptyLinePlaceholder":135},[204,48565,48566],{"class":206,"line":16918},[204,48567,32494],{"class":273},[204,48569,48570,48572,48574],{"class":206,"line":16932},[204,48571,32499],{"class":214},[204,48573,260],{"class":210},[204,48575,32504],{"class":214},[204,48577,48578],{"class":206,"line":16937},[204,48579,2486],{"emptyLinePlaceholder":135},[204,48581,48582],{"class":206,"line":16942},[204,48583,32517],{"class":273},[204,48585,48586,48588,48590,48592,48594],{"class":206,"line":16956},[204,48587,3287],{"class":210},[204,48589,32524],{"class":214},[204,48591,26129],{"class":210},[204,48593,32529],{"class":263},[204,48595,32532],{"class":214},[204,48597,48598,48600,48602,48604,48606,48608,48610,48612,48614,48616,48618],{"class":206,"line":16968},[204,48599,32537],{"class":263},[204,48601,215],{"class":214},[204,48603,32542],{"class":319},[204,48605,32545],{"class":263},[204,48607,797],{"class":319},[204,48609,32545],{"class":263},[204,48611,464],{"class":319},[204,48613,32554],{"class":214},[204,48615,745],{"class":210},[204,48617,431],{"class":263},[204,48619,30583],{"class":214},[204,48621,48622,48624,48626,48628,48630,48632],{"class":206,"line":16973},[204,48623,32537],{"class":263},[204,48625,215],{"class":214},[204,48627,32569],{"class":319},[204,48629,668],{"class":210},[204,48631,659],{"class":263},[204,48633,221],{"class":214},[204,48635,48636],{"class":206,"line":16986},[204,48637,2486],{"emptyLinePlaceholder":135},[204,48639,48640],{"class":206,"line":16991},[204,48641,32584],{"class":273},[204,48643,48644],{"class":206,"line":16996},[204,48645,32589],{"class":273},[204,48647,48648,48650,48652],{"class":206,"line":17001},[204,48649,32594],{"class":214},[204,48651,260],{"class":210},[204,48653,32428],{"class":263},[204,48655,48656],{"class":206,"line":17014},[204,48657,32603],{"class":273},[204,48659,48660,48662,48664],{"class":206,"line":17019},[204,48661,32608],{"class":214},[204,48663,260],{"class":210},[204,48665,3171],{"class":263},[204,48667,48668],{"class":206,"line":32719},[204,48669,32617],{"class":273},[204,48671,48672,48674,48676],{"class":206,"line":32725},[204,48673,32622],{"class":214},[204,48675,260],{"class":210},[204,48677,32428],{"class":263},[204,48679,48680],{"class":206,"line":32731},[204,48681,32631],{"class":273},[204,48683,48684,48686,48688],{"class":206,"line":32737},[204,48685,32636],{"class":214},[204,48687,260],{"class":210},[204,48689,3171],{"class":263},[204,48691,48692],{"class":206,"line":32743},[204,48693,32645],{"class":273},[204,48695,48696,48698,48700],{"class":206,"line":32754},[204,48697,32650],{"class":214},[204,48699,260],{"class":210},[204,48701,3171],{"class":263},[204,48703,48704],{"class":206,"line":32760},[204,48705,32659],{"class":273},[204,48707,48708,48710,48712],{"class":206,"line":32780},[204,48709,32664],{"class":214},[204,48711,260],{"class":210},[204,48713,3171],{"class":263},[204,48715,48716],{"class":206,"line":32786},[204,48717,32673],{"class":273},[204,48719,48720,48722,48724,48726,48728],{"class":206,"line":32797},[204,48721,3489],{"class":210},[204,48723,31687],{"class":214},[204,48725,26129],{"class":210},[204,48727,31692],{"class":263},[204,48729,32686],{"class":214},[204,48731,48732],{"class":206,"line":32803},[204,48733,32691],{"class":273},[204,48735,48736,48738,48740],{"class":206,"line":32809},[204,48737,32696],{"class":214},[204,48739,260],{"class":210},[204,48741,32701],{"class":214},[204,48743,48744],{"class":206,"line":32815},[204,48745,32706],{"class":273},[204,48747,48748,48750,48752],{"class":206,"line":32821},[204,48749,32711],{"class":214},[204,48751,260],{"class":210},[204,48753,32716],{"class":214},[204,48755,48756],{"class":206,"line":32827},[204,48757,32722],{"class":273},[204,48759,48760],{"class":206,"line":32833},[204,48761,32728],{"class":214},[204,48763,48764],{"class":206,"line":32839},[204,48765,32734],{"class":273},[204,48767,48768],{"class":206,"line":32859},[204,48769,32740],{"class":273},[204,48771,48772,48774,48776],{"class":206,"line":32865},[204,48773,32746],{"class":214},[204,48775,260],{"class":210},[204,48777,32751],{"class":214},[204,48779,48780],{"class":206,"line":32881},[204,48781,32757],{"class":273},[204,48783,48784,48786,48788,48790,48792,48794,48796],{"class":206,"line":32887},[204,48785,32763],{"class":214},[204,48787,260],{"class":210},[204,48789,32768],{"class":214},[204,48791,32771],{"class":5303},[204,48793,260],{"class":210},[204,48795,431],{"class":263},[204,48797,221],{"class":214},[204,48799,48800],{"class":206,"line":32901},[204,48801,32783],{"class":273},[204,48803,48804,48806,48808],{"class":206,"line":32907},[204,48805,32789],{"class":214},[204,48807,260],{"class":210},[204,48809,32794],{"class":214},[204,48811,48812],{"class":206,"line":32922},[204,48813,32800],{"class":273},[204,48815,48816],{"class":206,"line":32928},[204,48817,32806],{"class":214},[204,48819,48820],{"class":206,"line":32937},[204,48821,32812],{"class":273},[204,48823,48824],{"class":206,"line":32943},[204,48825,32818],{"class":214},[204,48827,48828],{"class":206,"line":32952},[204,48829,32824],{"class":273},[204,48831,48832],{"class":206,"line":32958},[204,48833,32830],{"class":214},[204,48835,48836],{"class":206,"line":32964},[204,48837,32836],{"class":273},[204,48839,48840,48842,48844,48846,48848,48850,48852],{"class":206,"line":32973},[204,48841,32842],{"class":214},[204,48843,9564],{"class":210},[204,48845,32847],{"class":214},[204,48847,668],{"class":210},[204,48849,32852],{"class":214},[204,48851,405],{"class":263},[204,48853,221],{"class":214},[204,48855,48856],{"class":206,"line":32979},[204,48857,32862],{"class":273},[204,48859,48860,48862,48864,48866,48868],{"class":206,"line":32990},[204,48861,32868],{"class":214},[204,48863,9564],{"class":210},[204,48865,32873],{"class":214},[204,48867,3035],{"class":210},[204,48869,32878],{"class":214},[204,48871,48872],{"class":206,"line":32996},[204,48873,32884],{"class":273},[204,48875,48876,48878,48880,48882,48884],{"class":206,"line":33015},[204,48877,32890],{"class":214},[204,48879,9564],{"class":210},[204,48881,32852],{"class":214},[204,48883,405],{"class":263},[204,48885,221],{"class":214},[204,48887,48888],{"class":206,"line":33021},[204,48889,32904],{"class":273},[204,48891,48892,48894,48896,48898,48900],{"class":206,"line":33032},[204,48893,3489],{"class":210},[204,48895,32912],{"class":214},[204,48897,26129],{"class":210},[204,48899,31692],{"class":263},[204,48901,32919],{"class":214},[204,48903,48904],{"class":206,"line":33038},[204,48905,32925],{"class":273},[204,48907,48908,48910,48912],{"class":206,"line":33058},[204,48909,32696],{"class":214},[204,48911,260],{"class":210},[204,48913,32701],{"class":214},[204,48915,48916],{"class":206,"line":33074},[204,48917,32940],{"class":273},[204,48919,48920,48922,48924],{"class":206,"line":33080},[204,48921,32711],{"class":214},[204,48923,260],{"class":210},[204,48925,32716],{"class":214},[204,48927,48928],{"class":206,"line":33094},[204,48929,32955],{"class":273},[204,48931,48932],{"class":206,"line":33100},[204,48933,32961],{"class":214},[204,48935,48936],{"class":206,"line":33106},[204,48937,36442],{"class":273},[204,48939,48940,48942],{"class":206,"line":33117},[204,48941,32967],{"class":210},[204,48943,32970],{"class":214},[204,48945,48946],{"class":206,"line":33123},[204,48947,32976],{"class":273},[204,48949,48950,48952,48954],{"class":206,"line":33129},[204,48951,36457],{"class":214},[204,48953,260],{"class":210},[204,48955,32751],{"class":214},[204,48957,48958],{"class":206,"line":33139},[204,48959,32993],{"class":273},[204,48961,48962,48964,48966,48968,48970,48972,48974],{"class":206,"line":33145},[204,48963,36470],{"class":214},[204,48965,260],{"class":210},[204,48967,32768],{"class":214},[204,48969,32771],{"class":5303},[204,48971,260],{"class":210},[204,48973,431],{"class":263},[204,48975,221],{"class":214},[204,48977,48978],{"class":206,"line":33156},[204,48979,33018],{"class":273},[204,48981,48982,48984,48986],{"class":206,"line":33162},[204,48983,36491],{"class":214},[204,48985,260],{"class":210},[204,48987,32794],{"class":214},[204,48989,48990],{"class":206,"line":33172},[204,48991,33035],{"class":273},[204,48993,48994,48996,48998,49000,49002,49004,49006],{"class":206,"line":33177},[204,48995,36504],{"class":214},[204,48997,9564],{"class":210},[204,48999,36509],{"class":214},[204,49001,668],{"class":210},[204,49003,32852],{"class":214},[204,49005,405],{"class":263},[204,49007,221],{"class":214},[204,49009,49010,49012,49014,49016,49018],{"class":206,"line":33183},[204,49011,36522],{"class":214},[204,49013,9564],{"class":210},[204,49015,32873],{"class":214},[204,49017,3035],{"class":210},[204,49019,32878],{"class":214},[204,49021,49022],{"class":206,"line":33232},[204,49023,36535],{"class":273},[204,49025,49026,49028,49030,49032,49034],{"class":206,"line":33279},[204,49027,36540],{"class":214},[204,49029,9564],{"class":210},[204,49031,32852],{"class":214},[204,49033,405],{"class":263},[204,49035,221],{"class":214},[204,49037,49038],{"class":206,"line":33284},[204,49039,33097],{"class":273},[204,49041,49042],{"class":206,"line":33290},[204,49043,33103],{"class":273},[204,49045,49046,49048,49050],{"class":206,"line":33309},[204,49047,33109],{"class":214},[204,49049,797],{"class":210},[204,49051,33114],{"class":214},[204,49053,49054],{"class":206,"line":33315},[204,49055,33120],{"class":273},[204,49057,49058],{"class":206,"line":33335},[204,49059,33126],{"class":273},[204,49061,49062,49064,49066],{"class":206,"line":33341},[204,49063,33132],{"class":214},[204,49065,797],{"class":210},[204,49067,33114],{"class":214},[204,49069,49070],{"class":206,"line":33347},[204,49071,33142],{"class":273},[204,49073,49074,49076,49078],{"class":206,"line":33357},[204,49075,33148],{"class":214},[204,49077,797],{"class":210},[204,49079,33153],{"class":214},[204,49081,49082],{"class":206,"line":33362},[204,49083,33159],{"class":273},[204,49085,49086,49088,49090],{"class":206,"line":33368},[204,49087,33165],{"class":214},[204,49089,797],{"class":210},[204,49091,33153],{"class":214},[204,49093,49094],{"class":206,"line":33384},[204,49095,2486],{"emptyLinePlaceholder":135},[204,49097,49098],{"class":206,"line":33429},[204,49099,33180],{"class":273},[204,49101,49102,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138,49140],{"class":206,"line":33435},[204,49103,32537],{"class":263},[204,49105,215],{"class":214},[204,49107,3678],{"class":319},[204,49109,32545],{"class":263},[204,49111,33194],{"class":319},[204,49113,1109],{"class":263},[204,49115,33199],{"class":210},[204,49117,1159],{"class":263},[204,49119,33204],{"class":319},[204,49121,1109],{"class":263},[204,49123,33199],{"class":210},[204,49125,1159],{"class":263},[204,49127,3678],{"class":319},[204,49129,33215],{"class":214},[204,49131,745],{"class":210},[204,49133,431],{"class":263},[204,49135,33222],{"class":214},[204,49137,745],{"class":210},[204,49139,431],{"class":263},[204,49141,33229],{"class":214},[204,49143,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182],{"class":206,"line":33441},[204,49145,32537],{"class":263},[204,49147,215],{"class":214},[204,49149,3678],{"class":319},[204,49151,32545],{"class":263},[204,49153,33243],{"class":319},[204,49155,1109],{"class":263},[204,49157,33199],{"class":210},[204,49159,1159],{"class":263},[204,49161,33252],{"class":319},[204,49163,1109],{"class":263},[204,49165,33199],{"class":210},[204,49167,1159],{"class":263},[204,49169,3678],{"class":319},[204,49171,33263],{"class":214},[204,49173,745],{"class":210},[204,49175,431],{"class":263},[204,49177,33270],{"class":214},[204,49179,745],{"class":210},[204,49181,431],{"class":263},[204,49183,33229],{"class":214},[204,49185,49186],{"class":206,"line":33447},[204,49187,2486],{"emptyLinePlaceholder":135},[204,49189,49190],{"class":206,"line":33458},[204,49191,33287],{"class":273},[204,49193,49194,49196,49198,49200,49202,49204,49206],{"class":206,"line":33464},[204,49195,2583],{"class":210},[204,49197,33295],{"class":214},[204,49199,745],{"class":210},[204,49201,431],{"class":263},[204,49203,1153],{"class":214},[204,49205,1173],{"class":210},[204,49207,33306],{"class":214},[204,49209,49210],{"class":206,"line":33470},[204,49211,33312],{"class":273},[204,49213,49214,49216,49218,49220,49222,49224,49226],{"class":206,"line":33476},[204,49215,33318],{"class":214},[204,49217,254],{"class":263},[204,49219,260],{"class":210},[204,49221,33325],{"class":214},[204,49223,745],{"class":210},[204,49225,431],{"class":263},[204,49227,33332],{"class":214},[204,49229,49230],{"class":206,"line":33494},[204,49231,33338],{"class":273},[204,49233,49234],{"class":206,"line":33508},[204,49235,33344],{"class":273},[204,49237,49238,49240,49242],{"class":206,"line":33517},[204,49239,33350],{"class":214},[204,49241,260],{"class":210},[204,49243,32400],{"class":214},[204,49245,49246],{"class":206,"line":33526},[204,49247,2486],{"emptyLinePlaceholder":135},[204,49249,49250],{"class":206,"line":33535},[204,49251,33365],{"class":273},[204,49253,49254,49256,49258,49260,49262],{"class":206,"line":33544},[204,49255,33371],{"class":214},[204,49257,260],{"class":210},[204,49259,33376],{"class":214},[204,49261,745],{"class":210},[204,49263,33381],{"class":214},[204,49265,49266,49268,49270,49272,49274,49276,49278,49280,49282,49284,49286,49288,49290,49292,49294,49296,49298,49300],{"class":206,"line":33550},[204,49267,32537],{"class":263},[204,49269,215],{"class":214},[204,49271,33391],{"class":319},[204,49273,1109],{"class":263},[204,49275,33396],{"class":210},[204,49277,1159],{"class":263},[204,49279,757],{"class":319},[204,49281,1109],{"class":263},[204,49283,33396],{"class":210},[204,49285,1159],{"class":263},[204,49287,33409],{"class":319},[204,49289,33412],{"class":214},[204,49291,33415],{"class":210},[204,49293,1120],{"class":263},[204,49295,33420],{"class":214},[204,49297,541],{"class":210},[204,49299,1120],{"class":263},[204,49301,30583],{"class":214},[204,49303,49304],{"class":206,"line":33556},[204,49305,36819],{"class":273},[204,49307,49308],{"class":206,"line":33564},[204,49309,36824],{"class":273},[204,49311,49312,49314,49316],{"class":206,"line":33569},[204,49313,36829],{"class":214},[204,49315,33453],{"class":319},[204,49317,221],{"class":214},[204,49319,49320],{"class":206,"line":33575},[204,49321,33473],{"class":273},[204,49323,49324,49326,49328,49330,49332,49334],{"class":206,"line":33586},[204,49325,33479],{"class":214},[204,49327,260],{"class":210},[204,49329,33484],{"class":214},[204,49331,33487],{"class":5303},[204,49333,260],{"class":210},[204,49335,1632],{"class":214},[204,49337,49338,49340,49342,49344],{"class":206,"line":33592},[204,49339,33497],{"class":319},[204,49341,1072],{"class":214},[204,49343,33502],{"class":263},[204,49345,33505],{"class":214},[204,49347,49348,49350],{"class":206,"line":33612},[204,49349,33511],{"class":319},[204,49351,33514],{"class":214},[204,49353,49354,49356],{"class":206,"line":33618},[204,49355,33520],{"class":319},[204,49357,33523],{"class":214},[204,49359,49360,49362],{"class":206,"line":33624},[204,49361,33529],{"class":319},[204,49363,33532],{"class":214},[204,49365,49366,49368],{"class":206,"line":33630},[204,49367,33538],{"class":319},[204,49369,33541],{"class":214},[204,49371,49372],{"class":206,"line":33647},[204,49373,33547],{"class":214},[204,49375,49376],{"class":206,"line":33653},[204,49377,33553],{"class":273},[204,49379,49380,49382],{"class":206,"line":33659},[204,49381,4176],{"class":210},[204,49383,33561],{"class":214},[204,49385,49386],{"class":206,"line":33665},[204,49387,2486],{"emptyLinePlaceholder":135},[204,49389,49390],{"class":206,"line":33671},[204,49391,33572],{"class":273},[204,49393,49394,49396,49398],{"class":206,"line":33677},[204,49395,32033],{"class":210},[204,49397,33580],{"class":2049},[204,49399,33583],{"class":214},[204,49401,49402],{"class":206,"line":33704},[204,49403,33589],{"class":273},[204,49405,49406,49408,49410,49412,49414,49416,49418,49420],{"class":206,"line":33728},[204,49407,33595],{"class":214},[204,49409,31779],{"class":5303},[204,49411,260],{"class":210},[204,49413,215],{"class":214},[204,49415,711],{"class":263},[204,49417,591],{"class":214},[204,49419,506],{"class":263},[204,49421,30583],{"class":214},[204,49423,49424],{"class":206,"line":33734},[204,49425,33615],{"class":273},[204,49427,49428],{"class":206,"line":33740},[204,49429,33621],{"class":273},[204,49431,49432],{"class":206,"line":33746},[204,49433,33627],{"class":273},[204,49435,49436,49438,49440,49442,49444,49446,49448],{"class":206,"line":33757},[204,49437,31813],{"class":214},[204,49439,431],{"class":263},[204,49441,591],{"class":214},[204,49443,292],{"class":263},[204,49445,591],{"class":214},[204,49447,431],{"class":263},[204,49449,221],{"class":214},[204,49451,49452],{"class":206,"line":33768},[204,49453,33650],{"class":273},[204,49455,49456],{"class":206,"line":33774},[204,49457,33656],{"class":273},[204,49459,49460],{"class":206,"line":33791},[204,49461,33662],{"class":273},[204,49463,49464],{"class":206,"line":33814},[204,49465,33668],{"class":273},[204,49467,49468],{"class":206,"line":33837},[204,49469,33674],{"class":273},[204,49471,49472,49474,49476,49478,49480,49482,49484,49486,49488],{"class":206,"line":33843},[204,49473,33680],{"class":214},[204,49475,33683],{"class":319},[204,49477,33686],{"class":214},[204,49479,33689],{"class":319},[204,49481,591],{"class":214},[204,49483,33694],{"class":5303},[204,49485,260],{"class":210},[204,49487,33699],{"class":319},[204,49489,221],{"class":214},[204,49491,49492,49494,49496,49498,49500,49502,49504,49506,49508],{"class":206,"line":33848},[204,49493,33680],{"class":214},[204,49495,33683],{"class":319},[204,49497,33711],{"class":214},[204,49499,33714],{"class":319},[204,49501,591],{"class":214},[204,49503,33694],{"class":5303},[204,49505,260],{"class":210},[204,49507,33723],{"class":319},[204,49509,221],{"class":214},[204,49511,49512],{"class":206,"line":33857},[204,49513,33731],{"class":273},[204,49515,49516],{"class":206,"line":33867},[204,49517,33737],{"class":214},[204,49519,49520],{"class":206,"line":33873},[204,49521,33743],{"class":273},[204,49523,49524,49526,49528],{"class":206,"line":33878},[204,49525,33749],{"class":214},[204,49527,33752],{"class":319},[204,49529,221],{"class":214},[204,49531,49532,49534,49536],{"class":206,"line":33884},[204,49533,33760],{"class":214},[204,49535,33763],{"class":319},[204,49537,221],{"class":214},[204,49539,49540],{"class":206,"line":33897},[204,49541,33771],{"class":273},[204,49543,49544,49546,49548,49550,49552,49554,49556],{"class":206,"line":33903},[204,49545,31813],{"class":214},[204,49547,431],{"class":263},[204,49549,591],{"class":214},[204,49551,292],{"class":263},[204,49553,591],{"class":214},[204,49555,292],{"class":263},[204,49557,221],{"class":214},[204,49559,49560,49562,49564,49566,49568,49570,49572,49574,49576],{"class":206,"line":33914},[204,49561,33680],{"class":214},[204,49563,33683],{"class":319},[204,49565,33798],{"class":214},[204,49567,33689],{"class":319},[204,49569,591],{"class":214},[204,49571,33694],{"class":5303},[204,49573,260],{"class":210},[204,49575,33809],{"class":319},[204,49577,221],{"class":214},[204,49579,49580,49582,49584,49586,49588,49590,49592,49594,49596],{"class":206,"line":33925},[204,49581,33680],{"class":214},[204,49583,33683],{"class":319},[204,49585,33821],{"class":214},[204,49587,33714],{"class":319},[204,49589,591],{"class":214},[204,49591,33694],{"class":5303},[204,49593,260],{"class":210},[204,49595,33832],{"class":319},[204,49597,221],{"class":214},[204,49599,49600],{"class":206,"line":33944},[204,49601,33840],{"class":273},[204,49603,49605],{"class":206,"line":49604},219,[204,49606,33737],{"class":214},[204,49608,49610,49612,49614],{"class":206,"line":49609},220,[204,49611,33749],{"class":214},[204,49613,33683],{"class":319},[204,49615,221],{"class":214},[204,49617,49619,49621,49623],{"class":206,"line":49618},221,[204,49620,33760],{"class":214},[204,49622,33862],{"class":319},[204,49624,221],{"class":214},[204,49626,49628],{"class":206,"line":49627},222,[204,49629,33870],{"class":214},[204,49631,49633],{"class":206,"line":49632},223,[204,49634,2486],{"emptyLinePlaceholder":135},[204,49636,49638],{"class":206,"line":49637},224,[204,49639,33881],{"class":273},[204,49641,49643,49645,49647,49649,49651],{"class":206,"line":49642},225,[204,49644,1617],{"class":210},[204,49646,31306],{"class":263},[204,49648,3035],{"class":210},[204,49650,31311],{"class":319},[204,49652,3825],{"class":214},[204,49654,49656],{"class":206,"line":49655},226,[204,49657,33900],{"class":273},[204,49659,49661,49663,49665],{"class":206,"line":49660},227,[204,49662,44632],{"class":214},[204,49664,260],{"class":210},[204,49666,44637],{"class":214},[204,49668,49670,49672,49674],{"class":206,"line":49669},228,[204,49671,33917],{"class":214},[204,49673,260],{"class":210},[204,49675,33922],{"class":214},[204,49677,49679,49681,49683,49685,49687,49689,49691],{"class":206,"line":49678},229,[204,49680,33479],{"class":214},[204,49682,260],{"class":210},[204,49684,44654],{"class":214},[204,49686,33935],{"class":5303},[204,49688,260],{"class":210},[204,49690,1120],{"class":263},[204,49692,221],{"class":214},[204,49694,49696],{"class":206,"line":49695},230,[204,49697,33947],{"class":214},[22085,49699,49701],{"id":49700},"_242测试代码","2.4.2.测试代码",[19,49703,49704],{},"使用测试集进行测试与推理",[196,49706,49708],{"className":30464,"code":49707,"language":30466,"meta":125,"style":125},"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",[81,49709,49710,49716,49726,49736,49747,49757,49761,49765,49773,49778,49782,49799,49803,49807,49811,49815,49819,49851,49855,49863,49867,49879,49883,49887,49891,49895,49899,49903,49907,49911,49929,49943,49947,49957,49967,49977,49983,49987,49991,49999,50003,50019,50027,50031,50035,50043,50051,50055,50059,50063,50067,50073,50077,50087,50095,50103,50107,50111,50115,50123,50127,50143,50147,50151,50155,50167,50171,50183,50187,50191,50203,50207,50217,50221,50225,50237,50241,50249,50253,50257,50265,50269,50277,50281,50285,50289,50293,50297,50313,50321,50325,50329,50347,50353,50357,50367,50375,50383,50387,50391,50395,50399,50407,50411,50427,50431,50439,50447],{"__ignoreMap":125},[204,49711,49712,49714],{"class":206,"line":207},[204,49713,30478],{"class":210},[204,49715,30481],{"class":214},[204,49717,49718,49720,49722,49724],{"class":206,"line":126},[204,49719,30478],{"class":210},[204,49721,31501],{"class":214},[204,49723,31469],{"class":210},[204,49725,31506],{"class":214},[204,49727,49728,49730,49732,49734],{"class":206,"line":131},[204,49729,30823],{"class":210},[204,49731,31484],{"class":214},[204,49733,30478],{"class":210},[204,49735,31489],{"class":214},[204,49737,49738,49740,49742,49744],{"class":206,"line":1281},[204,49739,30823],{"class":210},[204,49741,31454],{"class":214},[204,49743,30478],{"class":210},[204,49745,49746],{"class":214}," ImageFolder\n",[204,49748,49749,49751,49753,49755],{"class":206,"line":1287},[204,49750,30823],{"class":210},[204,49752,32000],{"class":214},[204,49754,30478],{"class":210},[204,49756,44726],{"class":214},[204,49758,49759],{"class":206,"line":1301},[204,49760,2486],{"emptyLinePlaceholder":135},[204,49762,49763],{"class":206,"line":1307},[204,49764,34037],{"class":273},[204,49766,49767,49769,49771],{"class":206,"line":1398},[204,49768,32033],{"class":210},[204,49770,34044],{"class":2049},[204,49772,32039],{"class":214},[204,49774,49775],{"class":206,"line":1404},[204,49776,49777],{"class":273},"   # 导入自己的数据集，并进行数据处理\n",[204,49779,49780],{"class":206,"line":1416},[204,49781,48047],{"class":273},[204,49783,49784,49786,49788,49790,49792,49794,49797],{"class":206,"line":1698},[204,49785,48052],{"class":263},[204,49787,260],{"class":210},[204,49789,883],{"class":210},[204,49791,464],{"class":319},[204,49793,771],{"class":263},[204,49795,49796],{"class":48063},"\u002Fdata\u002Ftest",[204,49798,25220],{"class":319},[204,49800,49801],{"class":206,"line":1703},[204,49802,2486],{"emptyLinePlaceholder":135},[204,49804,49805],{"class":206,"line":1709},[204,49806,48075],{"class":273},[204,49808,49809],{"class":206,"line":1714},[204,49810,48080],{"class":273},[204,49812,49813],{"class":206,"line":1728},[204,49814,48085],{"class":273},[204,49816,49817],{"class":206,"line":1733},[204,49818,48090],{"class":273},[204,49820,49821,49823,49825,49827,49829,49831,49833,49835,49837,49839,49841,49843,49845,49847,49849],{"class":206,"line":1739},[204,49822,48095],{"class":214},[204,49824,260],{"class":210},[204,49826,48100],{"class":214},[204,49828,48103],{"class":263},[204,49830,591],{"class":214},[204,49832,48108],{"class":263},[204,49834,591],{"class":214},[204,49836,48113],{"class":263},[204,49838,48116],{"class":214},[204,49840,48119],{"class":263},[204,49842,591],{"class":214},[204,49844,48124],{"class":263},[204,49846,591],{"class":214},[204,49848,48129],{"class":263},[204,49850,4743],{"class":214},[204,49852,49853],{"class":206,"line":1760},[204,49854,48136],{"class":273},[204,49856,49857,49859,49861],{"class":206,"line":1765},[204,49858,48141],{"class":214},[204,49860,260],{"class":210},[204,49862,48146],{"class":214},[204,49864,49865],{"class":206,"line":1779},[204,49866,48151],{"class":273},[204,49868,49869,49871,49873,49875,49877],{"class":206,"line":1784},[204,49870,48156],{"class":214},[204,49872,31587],{"class":263},[204,49874,591],{"class":214},[204,49876,31587],{"class":263},[204,49878,42708],{"class":214},[204,49880,49881],{"class":206,"line":1813},[204,49882,48169],{"class":273},[204,49884,49885],{"class":206,"line":1818},[204,49886,48174],{"class":214},[204,49888,49889],{"class":206,"line":1835},[204,49890,48179],{"class":214},[204,49892,49893],{"class":206,"line":1840},[204,49894,48184],{"class":273},[204,49896,49897],{"class":206,"line":1845},[204,49898,48189],{"class":273},[204,49900,49901],{"class":206,"line":1850},[204,49902,2486],{"emptyLinePlaceholder":135},[204,49904,49905],{"class":206,"line":1864},[204,49906,48198],{"class":273},[204,49908,49909],{"class":206,"line":1869},[204,49910,48203],{"class":273},[204,49912,49913,49915,49917,49919,49921,49923,49925,49927],{"class":206,"line":2663},[204,49914,34051],{"class":214},[204,49916,260],{"class":210},[204,49918,48212],{"class":214},[204,49920,48215],{"class":263},[204,49922,591],{"class":214},[204,49924,48220],{"class":5303},[204,49926,260],{"class":210},[204,49928,48225],{"class":214},[204,49930,49931,49933,49935,49937,49939,49941],{"class":206,"line":2677},[204,49932,34108],{"class":214},[204,49934,260],{"class":210},[204,49936,31620],{"class":214},[204,49938,31623],{"class":5303},[204,49940,260],{"class":210},[204,49942,34119],{"class":214},[204,49944,49945],{"class":206,"line":2685},[204,49946,34124],{"class":273},[204,49948,49949,49951,49953,49955],{"class":206,"line":2690},[204,49950,34129],{"class":5303},[204,49952,260],{"class":210},[204,49954,431],{"class":263},[204,49956,31552],{"class":214},[204,49958,49959,49961,49963,49965],{"class":206,"line":2696},[204,49960,34140],{"class":5303},[204,49962,260],{"class":210},[204,49964,31562],{"class":263},[204,49966,31552],{"class":214},[204,49968,49969,49971,49973,49975],{"class":206,"line":2702},[204,49970,34151],{"class":5303},[204,49972,260],{"class":210},[204,49974,405],{"class":263},[204,49976,221],{"class":214},[204,49978,49979,49981],{"class":206,"line":2707},[204,49980,4176],{"class":210},[204,49982,34164],{"class":214},[204,49984,49985],{"class":206,"line":8035},[204,49986,2486],{"emptyLinePlaceholder":135},[204,49988,49989],{"class":206,"line":8059},[204,49990,34173],{"class":273},[204,49992,49993,49995,49997],{"class":206,"line":8064},[204,49994,32033],{"class":210},[204,49996,34180],{"class":2049},[204,49998,34183],{"class":214},[204,50000,50001],{"class":206,"line":8070},[204,50002,34188],{"class":273},[204,50004,50005,50007,50009,50011,50013,50015,50017],{"class":206,"line":8097},[204,50006,31323],{"class":214},[204,50008,260],{"class":210},[204,50010,31330],{"class":319},[204,50012,1790],{"class":210},[204,50014,31335],{"class":214},[204,50016,1787],{"class":210},[204,50018,34205],{"class":319},[204,50020,50021,50023,50025],{"class":206,"line":8102},[204,50022,31375],{"class":214},[204,50024,260],{"class":210},[204,50026,32375],{"class":214},[204,50028,50029],{"class":206,"line":8108},[204,50030,2486],{"emptyLinePlaceholder":135},[204,50032,50033],{"class":206,"line":8120},[204,50034,34222],{"class":273},[204,50036,50037,50039,50041],{"class":206,"line":8132},[204,50038,34227],{"class":214},[204,50040,260],{"class":210},[204,50042,32428],{"class":263},[204,50044,50045,50047,50049],{"class":206,"line":8144},[204,50046,34236],{"class":214},[204,50048,260],{"class":210},[204,50050,3171],{"class":263},[204,50052,50053],{"class":206,"line":9803},[204,50054,2486],{"emptyLinePlaceholder":135},[204,50056,50057],{"class":206,"line":9828},[204,50058,34249],{"class":273},[204,50060,50061],{"class":206,"line":9851},[204,50062,34254],{"class":273},[204,50064,50065],{"class":206,"line":9875},[204,50066,34259],{"class":273},[204,50068,50069,50071],{"class":206,"line":9880},[204,50070,34264],{"class":210},[204,50072,32970],{"class":214},[204,50074,50075],{"class":206,"line":9885},[204,50076,34271],{"class":273},[204,50078,50079,50081,50083,50085],{"class":206,"line":9890},[204,50080,3489],{"class":210},[204,50082,34278],{"class":214},[204,50084,26129],{"class":210},[204,50086,34283],{"class":214},[204,50088,50089,50091,50093],{"class":206,"line":9899},[204,50090,34288],{"class":214},[204,50092,260],{"class":210},[204,50094,34293],{"class":214},[204,50096,50097,50099,50101],{"class":206,"line":9904},[204,50098,34298],{"class":214},[204,50100,260],{"class":210},[204,50102,34303],{"class":214},[204,50104,50105],{"class":206,"line":9910},[204,50106,34308],{"class":273},[204,50108,50109],{"class":206,"line":9931},[204,50110,32961],{"class":214},[204,50112,50113],{"class":206,"line":9937},[204,50114,34317],{"class":273},[204,50116,50117,50119,50121],{"class":206,"line":9951},[204,50118,32746],{"class":214},[204,50120,260],{"class":210},[204,50122,34326],{"class":214},[204,50124,50125],{"class":206,"line":9957},[204,50126,34331],{"class":273},[204,50128,50129,50131,50133,50135,50137,50139,50141],{"class":206,"line":9984},[204,50130,32763],{"class":214},[204,50132,260],{"class":210},[204,50134,32768],{"class":214},[204,50136,32771],{"class":5303},[204,50138,260],{"class":210},[204,50140,431],{"class":263},[204,50142,221],{"class":214},[204,50144,50145],{"class":206,"line":9993},[204,50146,34352],{"class":273},[204,50148,50149],{"class":206,"line":9999},[204,50150,34357],{"class":273},[204,50152,50153],{"class":206,"line":10007},[204,50154,34362],{"class":273},[204,50156,50157,50159,50161,50163,50165],{"class":206,"line":10012},[204,50158,34367],{"class":214},[204,50160,9564],{"class":210},[204,50162,32873],{"class":214},[204,50164,3035],{"class":210},[204,50166,34376],{"class":214},[204,50168,50169],{"class":206,"line":16691},[204,50170,34381],{"class":273},[204,50172,50173,50175,50177,50179,50181],{"class":206,"line":16697},[204,50174,34386],{"class":214},[204,50176,9564],{"class":210},[204,50178,34391],{"class":214},[204,50180,405],{"class":263},[204,50182,221],{"class":214},[204,50184,50185],{"class":206,"line":16720},[204,50186,2486],{"emptyLinePlaceholder":135},[204,50188,50189],{"class":206,"line":16726},[204,50190,34404],{"class":273},[204,50192,50193,50195,50197,50199,50201],{"class":206,"line":16749},[204,50194,34409],{"class":214},[204,50196,260],{"class":210},[204,50198,34414],{"class":214},[204,50200,797],{"class":210},[204,50202,34419],{"class":214},[204,50204,50205],{"class":206,"line":16763},[204,50206,34424],{"class":273},[204,50208,50209,50211,50213,50215],{"class":206,"line":16783},[204,50210,32537],{"class":263},[204,50212,215],{"class":214},[204,50214,34433],{"class":319},[204,50216,34436],{"class":214},[204,50218,50219],{"class":206,"line":16789},[204,50220,2486],{"emptyLinePlaceholder":135},[204,50222,50223],{"class":206,"line":16800},[204,50224,34445],{"class":273},[204,50226,50227,50229,50231,50233,50235],{"class":206,"line":16823},[204,50228,1617],{"class":210},[204,50230,31306],{"class":263},[204,50232,3035],{"class":210},[204,50234,31311],{"class":319},[204,50236,3825],{"class":214},[204,50238,50239],{"class":206,"line":16845},[204,50240,34462],{"class":273},[204,50242,50243,50245,50247],{"class":206,"line":16850},[204,50244,31375],{"class":214},[204,50246,260],{"class":210},[204,50248,44637],{"class":214},[204,50250,50251],{"class":206,"line":16856},[204,50252,34475],{"class":273},[204,50254,50255],{"class":206,"line":16870},[204,50256,34480],{"class":273},[204,50258,50259,50261,50263],{"class":206,"line":16883},[204,50260,34485],{"class":214},[204,50262,34488],{"class":319},[204,50264,30583],{"class":214},[204,50266,50267],{"class":206,"line":16888},[204,50268,34495],{"class":273},[204,50270,50271,50273,50275],{"class":206,"line":16902},[204,50272,34108],{"class":214},[204,50274,260],{"class":210},[204,50276,34504],{"class":214},[204,50278,50279],{"class":206,"line":16907},[204,50280,34509],{"class":273},[204,50282,50283],{"class":206,"line":16913},[204,50284,34514],{"class":214},[204,50286,50287],{"class":206,"line":16918},[204,50288,2486],{"emptyLinePlaceholder":135},[204,50290,50291],{"class":206,"line":16932},[204,50292,34523],{"class":273},[204,50294,50295],{"class":206,"line":16937},[204,50296,34528],{"class":273},[204,50298,50299,50301,50303,50305,50307,50309,50311],{"class":206,"line":16942},[204,50300,31323],{"class":214},[204,50302,260],{"class":210},[204,50304,31330],{"class":319},[204,50306,1790],{"class":210},[204,50308,31335],{"class":214},[204,50310,1787],{"class":210},[204,50312,34205],{"class":319},[204,50314,50315,50317,50319],{"class":206,"line":16956},[204,50316,31375],{"class":214},[204,50318,260],{"class":210},[204,50320,32375],{"class":214},[204,50322,50323],{"class":206,"line":16968},[204,50324,34557],{"class":273},[204,50326,50327],{"class":206,"line":16973},[204,50328,34562],{"class":273},[204,50330,50331,50333,50335,50337,50340,50342,50345],{"class":206,"line":16986},[204,50332,34567],{"class":214},[204,50334,260],{"class":210},[204,50336,1103],{"class":214},[204,50338,50339],{"class":319},"'猫'",[204,50341,591],{"class":214},[204,50343,50344],{"class":319},"'狗'",[204,50346,33332],{"class":214},[204,50348,50349,50351],{"class":206,"line":16991},[204,50350,34264],{"class":210},[204,50352,32970],{"class":214},[204,50354,50355],{"class":206,"line":16996},[204,50356,34632],{"class":273},[204,50358,50359,50361,50363,50365],{"class":206,"line":17001},[204,50360,3489],{"class":210},[204,50362,34639],{"class":214},[204,50364,26129],{"class":210},[204,50366,34283],{"class":214},[204,50368,50369,50371,50373],{"class":206,"line":17014},[204,50370,32696],{"class":214},[204,50372,260],{"class":210},[204,50374,32701],{"class":214},[204,50376,50377,50379,50381],{"class":206,"line":17019},[204,50378,32711],{"class":214},[204,50380,260],{"class":210},[204,50382,32716],{"class":214},[204,50384,50385],{"class":206,"line":32719},[204,50386,2486],{"emptyLinePlaceholder":135},[204,50388,50389],{"class":206,"line":32725},[204,50390,34668],{"class":273},[204,50392,50393],{"class":206,"line":32731},[204,50394,32961],{"class":214},[204,50396,50397],{"class":206,"line":32737},[204,50398,34677],{"class":273},[204,50400,50401,50403,50405],{"class":206,"line":32743},[204,50402,32746],{"class":214},[204,50404,260],{"class":210},[204,50406,32751],{"class":214},[204,50408,50409],{"class":206,"line":32754},[204,50410,34690],{"class":273},[204,50412,50413,50415,50417,50419,50421,50423,50425],{"class":206,"line":32760},[204,50414,32763],{"class":214},[204,50416,260],{"class":210},[204,50418,32768],{"class":214},[204,50420,32771],{"class":5303},[204,50422,260],{"class":210},[204,50424,431],{"class":263},[204,50426,221],{"class":214},[204,50428,50429],{"class":206,"line":32780},[204,50430,34711],{"class":273},[204,50432,50433,50435,50437],{"class":206,"line":32786},[204,50434,34716],{"class":214},[204,50436,260],{"class":210},[204,50438,34721],{"class":214},[204,50440,50441,50443,50445],{"class":206,"line":32797},[204,50442,34726],{"class":214},[204,50444,260],{"class":210},[204,50446,34731],{"class":214},[204,50448,50449,50451,50453,50455,50457,50459,50461,50463],{"class":206,"line":32803},[204,50450,34736],{"class":263},[204,50452,215],{"class":214},[204,50454,34741],{"class":319},[204,50456,34744],{"class":214},[204,50458,34747],{"class":319},[204,50460,591],{"class":214},[204,50462,34752],{"class":319},[204,50464,34755],{"class":214},[5213,50466,50467],{},"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":125,"searchDepth":126,"depth":126,"links":50469},[50470,50471,50472,50473],{"id":30677,"depth":131,"text":30678},{"id":37925,"depth":131,"text":37926},{"id":41358,"depth":131,"text":41359},{"id":45367,"depth":131,"text":45368},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30669,"description":132},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50480,"title":50481,"body":50482,"description":132,"extension":133,"meta":50489,"navigation":135,"path":50490,"seo":50491,"stem":50492,"__hash__":50493},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50483,"toc":50487},[50484],[10,50485,50481],{"id":50486},"_3yolo模型学习",{"title":125,"searchDepth":126,"depth":126,"links":50488},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50481,"description":132},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50495,"title":50496,"body":50497,"description":50504,"extension":133,"meta":50505,"navigation":135,"path":50507,"seo":50508,"stem":50509,"__hash__":50510},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50498,"toc":50502},[50499],[19,50500,50501],{},"yolo模型还未补充",{"title":125,"searchDepth":126,"depth":126,"links":50503},[],"深度学习学习",{"category":50506},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50496,"description":50504},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50512,"title":50513,"body":50514,"description":132,"extension":133,"meta":50539,"navigation":135,"path":50540,"seo":50541,"stem":50542,"__hash__":50543},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50515,"toc":50537},[50516,50519,50522,50527,50534],[10,50517,50513],{"id":50518},"_1工具",[19,50520,50521],{},"提示错误插件：有问题会提前报错",[19,50523,50524],{},[23,50525],{"alt":125,"src":50526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50528,50529],{},[62,50530,50533],{"href":50531,"rel":50532},"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",[66],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50535,50536],{},"alt键加上下箭头可以实现语句的移动",{"title":125,"searchDepth":126,"depth":126,"links":50538},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50513,"description":132},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50545,"title":50546,"body":50547,"description":132,"extension":133,"meta":53411,"navigation":135,"path":53412,"seo":53413,"stem":53414,"__hash__":53415},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50548,"toc":53362},[50549,50552,50556,50560,50565,50568,50573,50577,50584,50589,50596,50601,50608,50613,50617,50622,50625,50629,50634,50638,50643,50646,50649,50652,50655,50658,50661,50664,50667,50672,50677,50682,50686,50689,50692,50696,50701,50704,50712,50717,50734,50742,50747,50752,50757,50762,50767,50770,50775,50780,50784,50793,50798,50803,50807,50812,50815,50819,50824,50832,50837,50842,50845,50850,50855,50860,50863,50866,50869,50874,50879,50882,50887,50890,50895,50898,50901,50904,50909,50912,50915,50930,50935,50940,50945,50948,50951,50954,50968,50971,50976,50981,50984,50987,50990,50993,50996,50999,51002,51006,51010,51015,51019,51022,51027,51032,51035,51040,51043,51047,51052,51055,51058,51061,51064,51067,51070,51073,51076,51079,51083,51088,51093,51098,51101,51104,51108,51113,51116,51120,51123,51126,51131,51134,51137,51141,51145,51148,51153,51158,51161,51190,51195,51200,51205,51210,51214,51219,51223,51228,51231,51235,51239,51244,51248,51253,51258,51262,51267,51270,51272,51275,51280,51284,51289,51293,51297,51302,51307,51312,51317,51321,51326,51331,51336,51339,51342,51347,51350,51355,51360,51365,51370,51374,52181,52185,52528,52533,52536,52539,52542,52545,52548,52551,52554,52557,52559,52562,52564,52567,52571,52576,52579,52582,52585,52589,52594,52599,52619,52622,52626,52631,52636,52653,52657,52686,52690,52712,52714,52753,52761,52767,52771,52774,52777,52782,52787,52790,52793,52796,52801,52806,52809,52812,52815,52818,52821,52824,52827,52830,52833,52836,52839,52841,52844,52847,52850,52853,52856,52859,52862,52865,52869,52874,52877,52882,52885,52888,52891,52894,52897,52900,52903,52905,52908,52911,52914,52917,52920,52923,52927,52930,52939,52942,52947,52950,52955,52958,52961,52964,52967,52970,52973,52976,52980,52984,52987,52990,52995,53000,53005,53009,53014,53019,53022,53025,53028,53031,53034,53039,53042,53047,53049,53054,53057,53061,53066,53069,53072,53077,53081,53084,53089,53092,53095,53124,53129,53132,53135,53138,53141,53144,53148,53151,53237,53241,53244,53249,53254,53261,53264,53267,53270,53273,53276,53281,53286,53289,53292,53295,53298,53301,53304,53307,53310,53313,53315,53318,53322,53327,53332,53337,53340,53345,53350,53353,53356,53359],[10,50550,50546],{"id":50551},"_2基础语法",[14,50553,50555],{"id":50554},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[49,50557,50559],{"id":50558},"_211-js组成","2.1.1 js组成",[161,50561,50562],{},[71,50563,50564],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50566,50567],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[161,50569,50570],{"start":126},[71,50571,50572],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[49,50574,50576],{"id":50575},"_212-js书写位置","2.1.2 js书写位置",[161,50578,50579],{},[71,50580,50581],{},[30,50582,50583],{},"内部 JavaScript",[19,50585,50586],{},[23,50587],{"alt":125,"src":50588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[161,50590,50591],{"start":126},[71,50592,50593],{},[30,50594,50595],{},"外部 JavaScript",[19,50597,50598],{},[23,50599],{"alt":125,"src":50600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[161,50602,50603],{"start":131},[71,50604,50605],{},[30,50606,50607],{},"内联 JavaScript",[19,50609,50610],{},[23,50611],{"alt":125,"src":50612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[49,50614,50616],{"id":50615},"_213-javascript注释","2.1.3 JavaScript注释",[19,50618,50619],{},[23,50620],{"alt":125,"src":50621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50623,50624],{},"alt+shift+a一定要记住！",[49,50626,50628],{"id":50627},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50630,50631],{},[23,50632],{"alt":125,"src":50633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[49,50635,50637],{"id":50636},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[161,50639,50640],{},[71,50641,50642],{},"输出语法：",[19,50644,50645],{},"①document.write('要出的内容')",[19,50647,50648],{},"向body内输出内容；",[19,50650,50651],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50653,50654],{},"②alert('要出的内容')",[19,50656,50657],{},"页面弹出警告对话框",[19,50659,50660],{},"③console.log('控制台打印')",[19,50662,50663],{},"控制台输出语法，程序员调试使用",[19,50665,50666],{},"输入log就行，自动生成：",[19,50668,50669],{},[23,50670],{"alt":125,"src":50671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[161,50673,50674],{"start":126},[71,50675,50676],{},"输入语法：",[19,50678,50679],{},[23,50680],{"alt":125,"src":50681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[49,50683,50685],{"id":50684},"_2116-字面量","21.1.6 字面量",[19,50687,50688],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50690,50691],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50693,50695],{"id":50694},"_22-变量","2.2 变量",[161,50697,50698],{},[71,50699,50700],{},"变量声明",[19,50702,50703],{},"let 变量名",[68,50705,50706,50709],{},[71,50707,50708],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[71,50710,50711],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[161,50713,50714],{"start":126},[71,50715,50716],{},"变量赋值",[196,50718,50722],{"className":50719,"code":50720,"language":50721,"meta":125,"style":125},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[81,50723,50724,50729],{"__ignoreMap":125},[204,50725,50726],{"class":206,"line":207},[204,50727,50728],{"class":214},"let age\n",[204,50730,50731],{"class":206,"line":126},[204,50732,50733],{"class":214},"age=18\n",[161,50735,50736,50739],{"start":131},[71,50737,50738],{},"连这些（变量的初始化）：let age=18",[71,50740,50741],{},"更新变量",[19,50743,50744],{},[23,50745],{"alt":125,"src":50746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[161,50748,50749],{"start":1287},[71,50750,50751],{},"声明多个变量",[19,50753,50754],{},[23,50755],{"alt":125,"src":50756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[161,50758,50759],{"start":1301},[71,50760,50761],{},"变量命名规则与规范",[19,50763,50764],{},[23,50765],{"alt":125,"src":50766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50768,50769],{},"遵守小驼峰！",[161,50771,50772],{"start":1307},[71,50773,50774],{},"变量拓展-let和var的区别",[19,50776,50777],{},[23,50778],{"alt":125,"src":50779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50781,50783],{"id":50782},"_23-数组","2.3 数组",[196,50785,50787],{"className":50719,"code":50786,"language":50721,"meta":125,"style":125},"let arr = []\n",[81,50788,50789],{"__ignoreMap":125},[204,50790,50791],{"class":206,"line":207},[204,50792,50786],{"class":214},[19,50794,50795],{},[23,50796],{"alt":125,"src":50797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50799,50800],{},[23,50801],{"alt":125,"src":50802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50804,50806],{"id":50805},"_24-常量","2.4 常量",[19,50808,50809],{},[23,50810],{"alt":125,"src":50811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50813,50814],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50816,50818],{"id":50817},"_25-数据类型","2.5 数据类型",[19,50820,50821],{},[23,50822],{"alt":125,"src":50823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[161,50825,50826,50829],{},[71,50827,50828],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[71,50830,50831],{},"算数运算符：",[19,50833,50834],{},[23,50835],{"alt":125,"src":50836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[161,50838,50839],{"start":131},[71,50840,50841],{},"数字类型（Number）",[19,50843,50844],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50846,50847],{},[23,50848],{"alt":125,"src":50849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[161,50851,50852],{"start":1281},[71,50853,50854],{},"字符串类型（string）",[19,50856,50857],{},[23,50858],{"alt":125,"src":50859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50861,50862],{},"反引号也是可以使用的",[19,50864,50865],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50867,50868],{},"例如：document.write(\"我今年\"+age+\"岁\")",[161,50870,50871],{"start":1287},[71,50872,50873],{},"模板字符串",[19,50875,50876],{},[23,50877],{"alt":125,"src":50878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50880,50881],{},"类似于python的字符串格式化",[161,50883,50884],{"start":1301},[71,50885,50886],{},"布尔类型",[19,50888,50889],{},"true 和 false",[161,50891,50892],{"start":1307},[71,50893,50894],{},"未定义类型（underfined）",[19,50896,50897],{},"表示没有赋值",[19,50899,50900],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50902,50903],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[161,50905,50906],{"start":1398},[71,50907,50908],{},"null（空类型）",[19,50910,50911],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50913,50914],{},"赋值了，但是内容为空",[196,50916,50918],{"className":50719,"code":50917,"language":50721,"meta":125,"style":125},"typeof null\n输出的是'object'，是一个对象数据类型\n",[81,50919,50920,50925],{"__ignoreMap":125},[204,50921,50922],{"class":206,"line":207},[204,50923,50924],{"class":214},"typeof null\n",[204,50926,50927],{"class":206,"line":126},[204,50928,50929],{"class":214},"输出的是'object'，是一个对象数据类型\n",[161,50931,50932],{"start":1404},[71,50933,50934],{},"控制台检测数据类型",[19,50936,50937],{},[23,50938],{"alt":125,"src":50939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[161,50941,50942],{"start":1416},[71,50943,50944],{},"类型转换",[19,50946,50947],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,50949,50950],{},"转换方式：隐式转换和显示转换",[19,50952,50953],{},"①隐式转换",[68,50955,50956,50959,50962,50965],{},[71,50957,50958],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[71,50960,50961],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[71,50963,50964],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[71,50966,50967],{},"任何数据和字符串相加结果都是字符串",[19,50969,50970],{},"②显示转换",[19,50972,50973],{},[23,50974],{"alt":125,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,50977,50978],{},[23,50979],{"alt":125,"src":50980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,50982,50983],{},"在输入的时候要用好隐式转换，简单写起来",[19,50985,50986],{},"let num = +prompt(’请输入数字：‘)",[19,50988,50989],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,50991,50992],{},"console.log(parseInt('12.333px'))",[19,50994,50995],{},"输出为：12",[19,50997,50998],{},"console.log(parseInt('a'a'a12.333px'))",[19,51000,51001],{},"输出：NaN",[14,51003,51005],{"id":51004},"_26-运算符","2.6 运算符",[49,51007,51009],{"id":51008},"_261-赋值运算符","2.6.1 赋值运算符",[19,51011,51012],{},[23,51013],{"alt":125,"src":51014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[49,51016,51018],{"id":51017},"_262-一元运算符","2.6.2 一元运算符",[19,51020,51021],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51023,51024],{},[23,51025],{"alt":125,"src":51026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51028,51029],{},[23,51030],{"alt":125,"src":51031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51033,51034],{},"两者的区别：",[19,51036,51037],{},[23,51038],{"alt":125,"src":51039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51041,51042],{},"前置先自加；后置后加，代码执行完之后再加",[49,51044,51046],{"id":51045},"_263-比较运算符","2.6.3 比较运算符",[19,51048,51049],{},[23,51050],{"alt":125,"src":51051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51053,51054],{},"比较运算符也有隐式转换",[19,51056,51057],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51059,51060],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51062,51063],{},"要使用三等，开发的时候",[19,51065,51066],{},"NaN不等于任何人，包括它自己",[19,51068,51069],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51071,51072],{},"7\u002F10=0.7",[19,51074,51075],{},"最后：0.5+0.2=0.7",[19,51077,51078],{},"字符串比较，比较的是字符对应的ASCII码",[49,51080,51082],{"id":51081},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51084,51085],{},[23,51086],{"alt":125,"src":51087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51089,51090],{},[23,51091],{"alt":125,"src":51092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51094,51095],{},[23,51096],{"alt":125,"src":51097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51099,51100],{},"上述题目选D",[19,51102,51103],{},"与真2假1；或真1假2",[49,51105,51107],{"id":51106},"_265-运算符优先级","2.6.5 运算符优先级",[19,51109,51110],{},[23,51111],{"alt":125,"src":51112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51114,51115],{},"先算逻辑与，后算逻辑或",[14,51117,51119],{"id":51118},"_27-语句","2.7 语句",[19,51121,51122],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51124,51125],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51127,51128],{},[23,51129],{"alt":125,"src":51130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51132,51133],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51135,51136],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[49,51138,51140],{"id":51139},"_271-分支语句","2.7.1 分支语句",[22085,51142,51144],{"id":51143},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51146,51147],{},"if语句单行简单的话，可以不写{}，写在一行就行",[161,51149,51150],{},[71,51151,51152],{},"单分支语句",[19,51154,51155],{},[23,51156],{"alt":125,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51159,51160],{},"除了0，所有数字都为真",[196,51162,51164],{"className":50719,"code":51163,"language":50721,"meta":125,"style":125},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[81,51165,51166,51171,51176,51181,51185],{"__ignoreMap":125},[204,51167,51168],{"class":206,"line":207},[204,51169,51170],{"class":214},"if（0) {\n",[204,51172,51173],{"class":206,"line":126},[204,51174,51175],{"class":214},"    let a=1\n",[204,51177,51178],{"class":206,"line":131},[204,51179,51180],{"class":214},"    alert(typeof a)\n",[204,51182,51183],{"class":206,"line":1281},[204,51184,1651],{"class":214},[204,51186,51187],{"class":206,"line":1287},[204,51188,51189],{"class":214},"不输出，括号为假\n",[161,51191,51192],{"start":126},[71,51193,51194],{},"双分支语句",[19,51196,51197],{},[23,51198],{"alt":125,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[161,51201,51202],{"start":131},[71,51203,51204],{},"多分支语句",[19,51206,51207],{},[23,51208],{"alt":125,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22085,51211,51213],{"id":51212},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51215,51216],{},[23,51217],{"alt":125,"src":51218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22085,51220,51222],{"id":51221},"_2713-switch语句","2.7.1.3 switch语句",[19,51224,51225],{},[23,51226],{"alt":125,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51229,51230],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[49,51232,51234],{"id":51233},"_272-循环语句","2.7.2 循环语句",[22085,51236,51238],{"id":51237},"_2721-断点演示","2.7.2.1 断点演示",[19,51240,51241],{},[23,51242],{"alt":125,"src":51243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22085,51245,51247],{"id":51246},"_2722-while循环","2.7.2.2 while循环",[19,51249,51250],{},[23,51251],{"alt":125,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51254,51255],{},[23,51256],{"alt":125,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22085,51259,51261],{"id":51260},"_2723-for循环","2.7.2.3 for循环",[19,51263,51264],{},[23,51265],{"alt":125,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51268,51269],{},"for(;;) {",[19,51271,1159],{},[19,51273,51274],{},"表示无限循环",[19,51276,51277],{},[23,51278],{"alt":125,"src":51279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22085,51281,51283],{"id":51282},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51285,51286],{},[23,51287],{"alt":125,"src":51288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51290,51292],{"id":51291},"_28-数组","2.8 数组",[49,51294,51296],{"id":51295},"_281-基础认识","2.8.1 基础认识",[19,51298,51299],{},[23,51300],{"alt":125,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51303,51304],{},[23,51305],{"alt":125,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51308,51309],{},[23,51310],{"alt":125,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51313,51314],{},[23,51315],{"alt":125,"src":51316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[49,51318,51320],{"id":51319},"_282-操作数组","2.8.2 操作数组",[19,51322,51323],{},[23,51324],{"alt":125,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[161,51327,51328],{},[71,51329,51330],{},"添加元素",[19,51332,51333],{},[23,51334],{"alt":125,"src":51335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51337,51338],{},"console.log(arr.push('green'))",[19,51340,51341],{},"输出结果：为新数组的长度",[19,51343,51344],{},[23,51345],{"alt":125,"src":51346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51348,51349],{},"push用的非常多，一定要记住",[161,51351,51352],{},[71,51353,51354],{},"删除元素",[19,51356,51357],{},[23,51358],{"alt":125,"src":51359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51361,51362],{},[23,51363],{"alt":125,"src":51364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51366,51367],{},[23,51368],{"alt":125,"src":51369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[49,51371,51373],{"id":51372},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[196,51375,51377],{"className":50719,"code":51376,"language":50721,"meta":125,"style":125},"\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",[81,51378,51379,51394,51410,51414,51423,51441,51465,51487,51501,51509,51516,51528,51539,51543,51547,51554,51566,51581,51594,51613,51630,51645,51657,51669,51681,51685,51689,51700,51710,51722,51734,51746,51757,51761,51765,51777,51781,51795,51799,51803,51814,51828,51840,51854,51858,51867,51876,51880,51889,51893,51902,51907,51912,51925,51953,51958,51963,51988,51993,51997,52002,52007,52022,52026,52031,52061,52073,52089,52105,52119,52124,52131,52135,52140,52153,52161,52169,52173],{"__ignoreMap":125},[204,51380,51381,51384,51388,51391],{"class":206,"line":207},[204,51382,51383],{"class":214},"\u003C!",[204,51385,51387],{"class":51386},"s9eBZ","DOCTYPE",[204,51389,51390],{"class":2049}," html",[204,51392,51393],{"class":214},">\n",[204,51395,51396,51398,51400,51403,51405,51408],{"class":206,"line":126},[204,51397,1123],{"class":214},[204,51399,50721],{"class":51386},[204,51401,51402],{"class":2049}," lang",[204,51404,260],{"class":214},[204,51406,51407],{"class":319},"\"en\"",[204,51409,51393],{"class":214},[204,51411,51412],{"class":206,"line":131},[204,51413,2486],{"emptyLinePlaceholder":135},[204,51415,51416,51418,51421],{"class":206,"line":1281},[204,51417,1123],{"class":214},[204,51419,51420],{"class":51386},"head",[204,51422,51393],{"class":214},[204,51424,51425,51428,51431,51434,51436,51439],{"class":206,"line":1287},[204,51426,51427],{"class":214},"    \u003C",[204,51429,51430],{"class":51386},"meta",[204,51432,51433],{"class":2049}," charset",[204,51435,260],{"class":214},[204,51437,51438],{"class":319},"\"UTF-8\"",[204,51440,51393],{"class":214},[204,51442,51443,51445,51447,51450,51452,51455,51458,51460,51463],{"class":206,"line":1301},[204,51444,51427],{"class":214},[204,51446,51430],{"class":51386},[204,51448,51449],{"class":2049}," http-equiv",[204,51451,260],{"class":214},[204,51453,51454],{"class":319},"\"X-UA-Compatible\"",[204,51456,51457],{"class":2049}," content",[204,51459,260],{"class":214},[204,51461,51462],{"class":319},"\"IE=edge\"",[204,51464,51393],{"class":214},[204,51466,51467,51469,51471,51473,51475,51478,51480,51482,51485],{"class":206,"line":1307},[204,51468,51427],{"class":214},[204,51470,51430],{"class":51386},[204,51472,15007],{"class":2049},[204,51474,260],{"class":214},[204,51476,51477],{"class":319},"\"viewport\"",[204,51479,51457],{"class":2049},[204,51481,260],{"class":214},[204,51483,51484],{"class":319},"\"width=device-width, initial-scale=1.0\"",[204,51486,51393],{"class":214},[204,51488,51489,51491,51494,51497,51499],{"class":206,"line":1398},[204,51490,51427],{"class":214},[204,51492,51493],{"class":51386},"title",[204,51495,51496],{"class":214},">Document\u003C\u002F",[204,51498,51493],{"class":51386},[204,51500,51393],{"class":214},[204,51502,51503,51505,51507],{"class":206,"line":1404},[204,51504,51427],{"class":214},[204,51506,5213],{"class":51386},[204,51508,51393],{"class":214},[204,51510,51511,51514],{"class":206,"line":1416},[204,51512,51513],{"class":51386},"        *",[204,51515,15659],{"class":214},[204,51517,51518,51521,51524,51526],{"class":206,"line":1698},[204,51519,51520],{"class":263},"            margin",[204,51522,51523],{"class":214},": ",[204,51525,405],{"class":263},[204,51527,1377],{"class":214},[204,51529,51530,51533,51535,51537],{"class":206,"line":1703},[204,51531,51532],{"class":263},"            padding",[204,51534,51523],{"class":214},[204,51536,405],{"class":263},[204,51538,1377],{"class":214},[204,51540,51541],{"class":206,"line":1709},[204,51542,2615],{"class":214},[204,51544,51545],{"class":206,"line":1714},[204,51546,2486],{"emptyLinePlaceholder":135},[204,51548,51549,51552],{"class":206,"line":1728},[204,51550,51551],{"class":2049},"        .box",[204,51553,15659],{"class":214},[204,51555,51556,51559,51561,51564],{"class":206,"line":1733},[204,51557,51558],{"class":263},"            display",[204,51560,51523],{"class":214},[204,51562,51563],{"class":263},"flex",[204,51565,1377],{"class":214},[204,51567,51568,51571,51573,51576,51579],{"class":206,"line":1739},[204,51569,51570],{"class":263},"            width",[204,51572,51523],{"class":214},[204,51574,51575],{"class":263},"700",[204,51577,51578],{"class":210},"px",[204,51580,1377],{"class":214},[204,51582,51583,51586,51588,51590,51592],{"class":206,"line":1760},[204,51584,51585],{"class":263},"            height",[204,51587,51523],{"class":214},[204,51589,4059],{"class":263},[204,51591,51578],{"class":210},[204,51593,1377],{"class":214},[204,51595,51596,51599,51601,51603,51605,51608,51611],{"class":206,"line":1765},[204,51597,51598],{"class":263},"            border-left",[204,51600,51523],{"class":214},[204,51602,431],{"class":263},[204,51604,51578],{"class":210},[204,51606,51607],{"class":263}," solid",[204,51609,51610],{"class":263}," pink",[204,51612,1377],{"class":214},[204,51614,51615,51618,51620,51622,51624,51626,51628],{"class":206,"line":1779},[204,51616,51617],{"class":263},"            border-bottom",[204,51619,51523],{"class":214},[204,51621,431],{"class":263},[204,51623,51578],{"class":210},[204,51625,51607],{"class":263},[204,51627,51610],{"class":263},[204,51629,1377],{"class":214},[204,51631,51632,51634,51636,51638,51640,51643],{"class":206,"line":1784},[204,51633,51520],{"class":263},[204,51635,51523],{"class":214},[204,51637,869],{"class":263},[204,51639,51578],{"class":210},[204,51641,51642],{"class":263}," auto",[204,51644,1377],{"class":214},[204,51646,51647,51650,51652,51655],{"class":206,"line":1813},[204,51648,51649],{"class":263},"            justify-content",[204,51651,51523],{"class":214},[204,51653,51654],{"class":263},"space-around",[204,51656,1377],{"class":214},[204,51658,51659,51662,51664,51667],{"class":206,"line":1818},[204,51660,51661],{"class":263},"            align-items",[204,51663,51523],{"class":214},[204,51665,51666],{"class":263},"flex-end",[204,51668,1377],{"class":214},[204,51670,51671,51674,51676,51679],{"class":206,"line":1835},[204,51672,51673],{"class":263},"            text-align",[204,51675,51523],{"class":214},[204,51677,51678],{"class":263},"center",[204,51680,1377],{"class":214},[204,51682,51683],{"class":206,"line":1840},[204,51684,2615],{"class":214},[204,51686,51687],{"class":206,"line":1845},[204,51688,2486],{"emptyLinePlaceholder":135},[204,51690,51691,51693,51695,51698],{"class":206,"line":1850},[204,51692,51551],{"class":2049},[204,51694,1173],{"class":210},[204,51696,51697],{"class":51386},"div",[204,51699,15659],{"class":214},[204,51701,51702,51704,51706,51708],{"class":206,"line":1864},[204,51703,51558],{"class":263},[204,51705,51523],{"class":214},[204,51707,51563],{"class":263},[204,51709,1377],{"class":214},[204,51711,51712,51714,51716,51718,51720],{"class":206,"line":1869},[204,51713,51570],{"class":263},[204,51715,51523],{"class":214},[204,51717,869],{"class":263},[204,51719,51578],{"class":210},[204,51721,1377],{"class":214},[204,51723,51724,51727,51729,51732],{"class":206,"line":2663},[204,51725,51726],{"class":263},"            background-color",[204,51728,51523],{"class":214},[204,51730,51731],{"class":263},"pink",[204,51733,1377],{"class":214},[204,51735,51736,51739,51741,51744],{"class":206,"line":2677},[204,51737,51738],{"class":263},"            flex-direction",[204,51740,51523],{"class":214},[204,51742,51743],{"class":263},"column",[204,51745,1377],{"class":214},[204,51747,51748,51750,51752,51755],{"class":206,"line":2685},[204,51749,51649],{"class":263},[204,51751,51523],{"class":214},[204,51753,51754],{"class":263},"space-between",[204,51756,1377],{"class":214},[204,51758,51759],{"class":206,"line":2690},[204,51760,2615],{"class":214},[204,51762,51763],{"class":206,"line":2696},[204,51764,2486],{"emptyLinePlaceholder":135},[204,51766,51767,51769,51772,51775],{"class":206,"line":2702},[204,51768,51551],{"class":2049},[204,51770,51771],{"class":51386}," div",[204,51773,51774],{"class":51386}," span",[204,51776,15659],{"class":214},[204,51778,51779],{"class":206,"line":2707},[204,51780,2486],{"emptyLinePlaceholder":135},[204,51782,51783,51786,51788,51791,51793],{"class":206,"line":8035},[204,51784,51785],{"class":263},"            margin-top",[204,51787,51523],{"class":214},[204,51789,51790],{"class":263},"-20",[204,51792,51578],{"class":210},[204,51794,1377],{"class":214},[204,51796,51797],{"class":206,"line":8059},[204,51798,2615],{"class":214},[204,51800,51801],{"class":206,"line":8064},[204,51802,2486],{"emptyLinePlaceholder":135},[204,51804,51805,51807,51809,51812],{"class":206,"line":8070},[204,51806,51551],{"class":2049},[204,51808,51771],{"class":51386},[204,51810,51811],{"class":51386}," h4",[204,51813,15659],{"class":214},[204,51815,51816,51819,51821,51824,51826],{"class":206,"line":8097},[204,51817,51818],{"class":263},"            margin-bottom",[204,51820,51523],{"class":214},[204,51822,51823],{"class":263},"-35",[204,51825,51578],{"class":210},[204,51827,1377],{"class":214},[204,51829,51830,51832,51834,51836,51838],{"class":206,"line":8102},[204,51831,51570],{"class":263},[204,51833,51523],{"class":214},[204,51835,569],{"class":263},[204,51837,51578],{"class":210},[204,51839,1377],{"class":214},[204,51841,51842,51845,51847,51850,51852],{"class":206,"line":8108},[204,51843,51844],{"class":263},"            margin-left",[204,51846,51523],{"class":214},[204,51848,51849],{"class":263},"-10",[204,51851,51578],{"class":210},[204,51853,1377],{"class":214},[204,51855,51856],{"class":206,"line":8120},[204,51857,2615],{"class":214},[204,51859,51860,51863,51865],{"class":206,"line":8132},[204,51861,51862],{"class":214},"    \u003C\u002F",[204,51864,5213],{"class":51386},[204,51866,51393],{"class":214},[204,51868,51869,51872,51874],{"class":206,"line":8144},[204,51870,51871],{"class":214},"\u003C\u002F",[204,51873,51420],{"class":51386},[204,51875,51393],{"class":214},[204,51877,51878],{"class":206,"line":9803},[204,51879,2486],{"emptyLinePlaceholder":135},[204,51881,51882,51884,51887],{"class":206,"line":9828},[204,51883,1123],{"class":214},[204,51885,51886],{"class":51386},"body",[204,51888,51393],{"class":214},[204,51890,51891],{"class":206,"line":9851},[204,51892,2486],{"emptyLinePlaceholder":135},[204,51894,51895,51897,51900],{"class":206,"line":9875},[204,51896,51427],{"class":214},[204,51898,51899],{"class":51386},"script",[204,51901,51393],{"class":214},[204,51903,51904],{"class":206,"line":9880},[204,51905,51906],{"class":273},"        \u002F\u002F 1. 四次弹框效果\n",[204,51908,51909],{"class":206,"line":9885},[204,51910,51911],{"class":273},"        \u002F\u002F 声明一个新的数组\n",[204,51913,51914,51917,51920,51922],{"class":206,"line":9890},[204,51915,51916],{"class":210},"        let",[204,51918,51919],{"class":214}," arr ",[204,51921,260],{"class":210},[204,51923,51924],{"class":214}," []\n",[204,51926,51927,51929,51931,51934,51936,51938,51940,51942,51944,51947,51949,51951],{"class":206,"line":9899},[204,51928,3489],{"class":210},[204,51930,1744],{"class":214},[204,51932,51933],{"class":210},"let",[204,51935,9525],{"class":214},[204,51937,260],{"class":210},[204,51939,25205],{"class":263},[204,51941,9532],{"class":214},[204,51943,1674],{"class":210},[204,51945,51946],{"class":263}," 4",[204,51948,3300],{"class":214},[204,51950,2378],{"class":210},[204,51952,12529],{"class":214},[204,51954,51955],{"class":206,"line":9904},[204,51956,51957],{"class":273},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[204,51959,51960],{"class":206,"line":9910},[204,51961,51962],{"class":273},"            \u002F\u002F arr.push(num)\n",[204,51964,51965,51968,51971,51973,51976,51978,51981,51983,51986],{"class":206,"line":9931},[204,51966,51967],{"class":214},"            arr.",[204,51969,51970],{"class":2049},"push",[204,51972,215],{"class":214},[204,51974,51975],{"class":2049},"prompt",[204,51977,215],{"class":214},[204,51979,51980],{"class":319},"`请输入第${",[204,51982,654],{"class":214},[204,51984,51985],{"class":319},"}季度的数据:`",[204,51987,30583],{"class":214},[204,51989,51990],{"class":206,"line":9937},[204,51991,51992],{"class":273},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[204,51994,51995],{"class":206,"line":9951},[204,51996,2615],{"class":214},[204,51998,51999],{"class":206,"line":9957},[204,52000,52001],{"class":273},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[204,52003,52004],{"class":206,"line":9984},[204,52005,52006],{"class":273},"        \u002F\u002F 盒子开头\n",[204,52008,52009,52012,52015,52017,52020],{"class":206,"line":9993},[204,52010,52011],{"class":214},"        document.",[204,52013,52014],{"class":2049},"write",[204,52016,215],{"class":214},[204,52018,52019],{"class":319},"` \u003Cdiv class=\"box\">`",[204,52021,221],{"class":214},[204,52023,52024],{"class":206,"line":9999},[204,52025,2486],{"emptyLinePlaceholder":135},[204,52027,52028],{"class":206,"line":10007},[204,52029,52030],{"class":273},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[204,52032,52033,52035,52037,52039,52041,52043,52045,52047,52049,52052,52055,52057,52059],{"class":206,"line":10012},[204,52034,3489],{"class":210},[204,52036,1744],{"class":214},[204,52038,51933],{"class":210},[204,52040,9525],{"class":214},[204,52042,260],{"class":210},[204,52044,4179],{"class":263},[204,52046,9532],{"class":214},[204,52048,1123],{"class":210},[204,52050,52051],{"class":214}," arr.",[204,52053,52054],{"class":263},"length",[204,52056,3300],{"class":214},[204,52058,2378],{"class":210},[204,52060,12529],{"class":214},[204,52062,52063,52066,52068,52070],{"class":206,"line":16691},[204,52064,52065],{"class":214},"            document.",[204,52067,52014],{"class":2049},[204,52069,215],{"class":214},[204,52071,52072],{"class":319},"`\n",[204,52074,52075,52078,52080,52082,52084,52086],{"class":206,"line":16697},[204,52076,52077],{"class":319},"              \u003Cdiv style=\"height: ${",[204,52079,3966],{"class":214},[204,52081,1103],{"class":319},[204,52083,654],{"class":214},[204,52085,1153],{"class":319},[204,52087,52088],{"class":319},"}px;\">\n",[204,52090,52091,52094,52096,52098,52100,52102],{"class":206,"line":16720},[204,52092,52093],{"class":319},"                \u003Cspan>${",[204,52095,3966],{"class":214},[204,52097,1103],{"class":319},[204,52099,654],{"class":214},[204,52101,1153],{"class":319},[204,52103,52104],{"class":319},"}\u003C\u002Fspan>\n",[204,52106,52107,52110,52112,52114,52116],{"class":206,"line":16726},[204,52108,52109],{"class":319},"                \u003Ch4>第${",[204,52111,654],{"class":214},[204,52113,45652],{"class":210},[204,52115,25205],{"class":263},[204,52117,52118],{"class":319},"}季度\u003C\u002Fh4>\n",[204,52120,52121],{"class":206,"line":16749},[204,52122,52123],{"class":319},"              \u003C\u002Fdiv>          \n",[204,52125,52126,52129],{"class":206,"line":16763},[204,52127,52128],{"class":319},"            `",[204,52130,221],{"class":214},[204,52132,52133],{"class":206,"line":16783},[204,52134,2615],{"class":214},[204,52136,52137],{"class":206,"line":16789},[204,52138,52139],{"class":273},"        \u002F\u002F 盒子结尾\n",[204,52141,52142,52144,52146,52148,52151],{"class":206,"line":16800},[204,52143,52011],{"class":214},[204,52145,52014],{"class":2049},[204,52147,215],{"class":214},[204,52149,52150],{"class":319},"` \u003C\u002Fdiv>`",[204,52152,221],{"class":214},[204,52154,52155,52157,52159],{"class":206,"line":16823},[204,52156,51862],{"class":214},[204,52158,51899],{"class":51386},[204,52160,51393],{"class":214},[204,52162,52163,52165,52167],{"class":206,"line":16845},[204,52164,51871],{"class":214},[204,52166,51886],{"class":51386},[204,52168,51393],{"class":214},[204,52170,52171],{"class":206,"line":16850},[204,52172,2486],{"emptyLinePlaceholder":135},[204,52174,52175,52177,52179],{"class":206,"line":16856},[204,52176,51871],{"class":214},[204,52178,50721],{"class":51386},[204,52180,51393],{"class":214},[49,52182,52184],{"id":52183},"_284-冒泡排序","2.8.4 冒泡排序",[196,52186,52188],{"className":50719,"code":52187,"language":50721,"meta":125,"style":125},"\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",[81,52189,52190,52200,52214,52218,52226,52241,52261,52273,52281,52285,52293,52301,52333,52366,52403,52408,52427,52432,52445,52460,52476,52480,52485,52489,52499,52508,52516,52520],{"__ignoreMap":125},[204,52191,52192,52194,52196,52198],{"class":206,"line":207},[204,52193,51383],{"class":214},[204,52195,51387],{"class":51386},[204,52197,51390],{"class":2049},[204,52199,51393],{"class":214},[204,52201,52202,52204,52206,52208,52210,52212],{"class":206,"line":126},[204,52203,1123],{"class":214},[204,52205,50721],{"class":51386},[204,52207,51402],{"class":2049},[204,52209,260],{"class":214},[204,52211,51407],{"class":319},[204,52213,51393],{"class":214},[204,52215,52216],{"class":206,"line":131},[204,52217,2486],{"emptyLinePlaceholder":135},[204,52219,52220,52222,52224],{"class":206,"line":1281},[204,52221,1123],{"class":214},[204,52223,51420],{"class":51386},[204,52225,51393],{"class":214},[204,52227,52228,52231,52233,52235,52237,52239],{"class":206,"line":1287},[204,52229,52230],{"class":214},"  \u003C",[204,52232,51430],{"class":51386},[204,52234,51433],{"class":2049},[204,52236,260],{"class":214},[204,52238,51438],{"class":319},[204,52240,51393],{"class":214},[204,52242,52243,52245,52247,52249,52251,52253,52255,52257,52259],{"class":206,"line":1301},[204,52244,52230],{"class":214},[204,52246,51430],{"class":51386},[204,52248,15007],{"class":2049},[204,52250,260],{"class":214},[204,52252,51477],{"class":319},[204,52254,51457],{"class":2049},[204,52256,260],{"class":214},[204,52258,51484],{"class":319},[204,52260,51393],{"class":214},[204,52262,52263,52265,52267,52269,52271],{"class":206,"line":1307},[204,52264,52230],{"class":214},[204,52266,51493],{"class":51386},[204,52268,51496],{"class":214},[204,52270,51493],{"class":51386},[204,52272,51393],{"class":214},[204,52274,52275,52277,52279],{"class":206,"line":1398},[204,52276,51871],{"class":214},[204,52278,51420],{"class":51386},[204,52280,51393],{"class":214},[204,52282,52283],{"class":206,"line":1404},[204,52284,2486],{"emptyLinePlaceholder":135},[204,52286,52287,52289,52291],{"class":206,"line":1416},[204,52288,1123],{"class":214},[204,52290,51886],{"class":51386},[204,52292,51393],{"class":214},[204,52294,52295,52297,52299],{"class":206,"line":1698},[204,52296,52230],{"class":214},[204,52298,51899],{"class":51386},[204,52300,51393],{"class":214},[204,52302,52303,52306,52308,52310,52313,52315,52317,52319,52321,52323,52325,52327,52329,52331],{"class":206,"line":1703},[204,52304,52305],{"class":210},"    let",[204,52307,51919],{"class":214},[204,52309,260],{"class":210},[204,52311,52312],{"class":214}," [",[204,52314,532],{"class":263},[204,52316,12522],{"class":214},[204,52318,506],{"class":263},[204,52320,12522],{"class":214},[204,52322,286],{"class":263},[204,52324,12522],{"class":214},[204,52326,292],{"class":263},[204,52328,12522],{"class":214},[204,52330,431],{"class":263},[204,52332,33332],{"class":214},[204,52334,52335,52337,52339,52341,52343,52345,52347,52349,52351,52353,52355,52358,52360,52362,52364],{"class":206,"line":1709},[204,52336,3287],{"class":210},[204,52338,1744],{"class":214},[204,52340,51933],{"class":210},[204,52342,9525],{"class":214},[204,52344,260],{"class":210},[204,52346,4179],{"class":263},[204,52348,9532],{"class":214},[204,52350,1123],{"class":210},[204,52352,52051],{"class":214},[204,52354,52054],{"class":263},[204,52356,52357],{"class":210}," -",[204,52359,25205],{"class":263},[204,52361,3300],{"class":214},[204,52363,2378],{"class":210},[204,52365,12529],{"class":214},[204,52367,52368,52371,52373,52375,52377,52379,52381,52383,52385,52387,52389,52391,52393,52395,52397,52399,52401],{"class":206,"line":1714},[204,52369,52370],{"class":210},"      for",[204,52372,1744],{"class":214},[204,52374,51933],{"class":210},[204,52376,9587],{"class":214},[204,52378,260],{"class":210},[204,52380,4179],{"class":263},[204,52382,9594],{"class":214},[204,52384,1123],{"class":210},[204,52386,52051],{"class":214},[204,52388,52054],{"class":263},[204,52390,52357],{"class":210},[204,52392,9525],{"class":214},[204,52394,745],{"class":210},[204,52396,25205],{"class":263},[204,52398,9601],{"class":214},[204,52400,2378],{"class":210},[204,52402,12529],{"class":214},[204,52404,52405],{"class":206,"line":1728},[204,52406,52407],{"class":273},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[204,52409,52410,52412,52415,52417,52420,52422,52424],{"class":206,"line":1733},[204,52411,2583],{"class":210},[204,52413,52414],{"class":214}," (arr[j] ",[204,52416,1173],{"class":210},[204,52418,52419],{"class":214}," arr[j ",[204,52421,694],{"class":210},[204,52423,25205],{"class":263},[204,52425,52426],{"class":214},"]) {\n",[204,52428,52429],{"class":206,"line":1739},[204,52430,52431],{"class":273},"          \u002F\u002F 交换两个变量\n",[204,52433,52434,52437,52440,52442],{"class":206,"line":1760},[204,52435,52436],{"class":210},"          let",[204,52438,52439],{"class":214}," tmp ",[204,52441,260],{"class":210},[204,52443,52444],{"class":214}," arr[j]\n",[204,52446,52447,52450,52452,52454,52456,52458],{"class":206,"line":1765},[204,52448,52449],{"class":214},"          arr[j] ",[204,52451,260],{"class":210},[204,52453,52419],{"class":214},[204,52455,694],{"class":210},[204,52457,25205],{"class":263},[204,52459,33332],{"class":214},[204,52461,52462,52465,52467,52469,52471,52473],{"class":206,"line":1779},[204,52463,52464],{"class":214},"          arr[j ",[204,52466,694],{"class":210},[204,52468,25205],{"class":263},[204,52470,4529],{"class":214},[204,52472,260],{"class":210},[204,52474,52475],{"class":214}," tmp\n",[204,52477,52478],{"class":206,"line":1784},[204,52479,2615],{"class":214},[204,52481,52482],{"class":206,"line":1813},[204,52483,52484],{"class":214},"      }\n",[204,52486,52487],{"class":206,"line":1818},[204,52488,2273],{"class":214},[204,52490,52491,52494,52496],{"class":206,"line":1835},[204,52492,52493],{"class":214},"    document.",[204,52495,52014],{"class":2049},[204,52497,52498],{"class":214},"(arr)\n",[204,52500,52501,52504,52506],{"class":206,"line":1840},[204,52502,52503],{"class":214},"  \u003C\u002F",[204,52505,51899],{"class":51386},[204,52507,51393],{"class":214},[204,52509,52510,52512,52514],{"class":206,"line":1845},[204,52511,51871],{"class":214},[204,52513,51886],{"class":51386},[204,52515,51393],{"class":214},[204,52517,52518],{"class":206,"line":1850},[204,52519,2486],{"emptyLinePlaceholder":135},[204,52521,52522,52524,52526],{"class":206,"line":1864},[204,52523,51871],{"class":214},[204,52525,50721],{"class":51386},[204,52527,51393],{"class":214},[19,52529,52530],{},[23,52531],{"alt":125,"src":52532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52534,52535],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52537,52538],{},"let arr = [4, 2, 5, 1, 3]",[19,52540,52541],{},"\u002F\u002F 1.升序排列写法",[19,52543,52544],{},"arr.sort(function (a, b) {",[19,52546,52547],{},"return a - b",[19,52549,52550],{},"})",[19,52552,52553],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52555,52556],{},"\u002F\u002F 降序排列写法",[19,52558,52544],{},[19,52560,52561],{},"return b - a",[19,52563,52550],{},[19,52565,52566],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52568,52570],{"id":52569},"_29-函数","2.9 函数",[19,52572,52573],{},[23,52574],{"alt":125,"src":52575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52577,52578],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52580,52581],{},"函数的声明用function",[19,52583,52584],{},"函数里边可以嵌套函数",[49,52586,52588],{"id":52587},"_291-函数传参","2.9.1 函数传参",[19,52590,52591],{},[23,52592],{"alt":125,"src":52593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52595,52596],{},[23,52597],{"alt":125,"src":52598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[68,52600,52601,52604,52607,52610,52613,52616],{},[71,52602,52603],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[71,52605,52606],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[71,52608,52609],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[71,52611,52612],{},"开发中尽量保持形参和实参个数一致",[71,52614,52615],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[71,52617,52618],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52620,52621],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[49,52623,52625],{"id":52624},"_292-函数的返回值","2.9.2 函数的返回值",[19,52627,52628],{},[23,52629],{"alt":125,"src":52630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52632,52633],{},[23,52634],{"alt":125,"src":52635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[68,52637,52638,52641,52644,52647,52650],{},[71,52639,52640],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[71,52642,52643],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[71,52645,52646],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[71,52648,52649],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[71,52651,52652],{},"断点调试:进入函数内部看执行过程F11",[49,52654,52656],{"id":52655},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[196,52658,52660],{"className":50719,"code":52659,"language":50721,"meta":125,"style":125},"    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",[81,52661,52662,52667,52672,52676,52681],{"__ignoreMap":125},[204,52663,52664],{"class":206,"line":207},[204,52665,52666],{"class":214},"    function fn(a, b) {\n",[204,52668,52669],{"class":206,"line":126},[204,52670,52671],{"class":214},"      console.log(a + b);\n",[204,52673,52674],{"class":206,"line":131},[204,52675,2273],{"class":214},[204,52677,52678],{"class":206,"line":1281},[204,52679,52680],{"class":214},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[204,52682,52683],{"class":206,"line":1287},[204,52684,52685],{"class":214},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[49,52687,52689],{"id":52688},"_294-作用域","2.9.4 作用域",[68,52691,52692,52698,52703,52706,52709],{},[71,52693,52694,52695],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[30,52696,52697],{},"作用域",[71,52699,52700],{},[30,52701,52702],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[71,52704,52705],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[71,52707,52708],{},"函数内部可以直接所使用全局变量",[71,52710,52711],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52713,14720],{},[196,52715,52717],{"className":50719,"code":52716,"language":50721,"meta":125,"style":125},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[81,52718,52719,52724,52729,52733,52738,52743,52748],{"__ignoreMap":125},[204,52720,52721],{"class":206,"line":207},[204,52722,52723],{"class":214},"    function fun() {\n",[204,52725,52726],{"class":206,"line":126},[204,52727,52728],{"class":214},"      num = 10\n",[204,52730,52731],{"class":206,"line":131},[204,52732,2273],{"class":214},[204,52734,52735],{"class":206,"line":1281},[204,52736,52737],{"class":214},"    fun()\n",[204,52739,52740],{"class":206,"line":1287},[204,52741,52742],{"class":214},"    console.log(num)\n",[204,52744,52745],{"class":206,"line":1301},[204,52746,52747],{"class":214},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[204,52749,52750],{"class":206,"line":1307},[204,52751,52752],{"class":214},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[68,52754,52755,52758],{},[71,52756,52757],{},"函数内部的形参可以看做是局部变量",[71,52759,52760],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52762,52763,52764],{},"变量访问原则： ",[30,52765,52766],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[49,52768,52770],{"id":52769},"_295-匿名函数","2.9.5 匿名函数",[19,52772,52773],{},"函数可以分为具名函数和匿名函数",[19,52775,52776],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[161,52778,52779],{},[71,52780,52781],{},"函数表达式",[19,52783,52784],{},[23,52785],{"alt":125,"src":52786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52788,52789],{},"里边也可以写参数",[19,52791,52792],{},"具名函数调用位置可以随意调整；",[19,52794,52795],{},"匿名函数函数表达式形式只能在声明后才可以使用",[161,52797,52798],{"start":126},[71,52799,52800],{},"立即执行函数",[19,52802,52803],{},[23,52804],{"alt":125,"src":52805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52807,52808],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52810,52811],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52813,52814],{},"(function () {})();",[19,52816,52817],{},"不要落下最后的;",[19,52819,52820],{},"立即执行函数必须要加;",[19,52822,52823],{},"分号写前写后都没问题",[19,52825,52826],{},"写前：",[19,52828,52829],{},"(function() {})()",[19,52831,52832],{},";(function () {})();",[19,52834,52835],{},"写后:",[19,52837,52838],{},"(function() {})();",[19,52840,52814],{},[19,52842,52843],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52845,52846],{},"还有一种写法：",[19,52848,52849],{},"(function(){}());",[19,52851,52852],{},"或者:",[19,52854,52855],{},"!function(){}();",[19,52857,52858],{},"立即执行函数有时候也是可以加名字的：",[19,52860,52861],{},"(function flexible(window,document) {}(window,document));",[19,52863,52864],{},"省一些调用方法",[49,52866,52868],{"id":52867},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52870,52871],{},[23,52872],{"alt":125,"src":52873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52875,52876],{},"这样就不用非得给x,y初始化了",[19,52878,52879],{},[23,52880],{"alt":125,"src":52881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52883,52884],{},"代码执行时先看左边",[19,52886,52887],{},"例如：console.log(false && 3+5)",[19,52889,52890],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52892,52893],{},"&&都是真时，就返回最后一个真值",[19,52895,52896],{},"console.log(11 && 22)",[19,52898,52899],{},"输出22",[19,52901,52902],{},"逻辑与：遇真则真",[19,52904,14720],{},[19,52906,52907],{},"let age=1",[19,52909,52910],{},"console.log(11 || age++)",[19,52912,52913],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52915,52916],{},"console.log(11 || 22)",[19,52918,52919],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52921,52922],{},"||如果都是假的话，就取最后一个假的值了",[49,52924,52926],{"id":52925},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52928,52929],{},"显示转换：",[19,52931,52932,52935,52936],{},[30,52933,52934],{},"记忆","： ",[30,52937,52938],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52940,52941],{},"空字符串为假，其他字符串全为真",[19,52943,52944],{},[23,52945],{"alt":125,"src":52946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,52948,52949],{},"隐式转换：",[19,52951,52952],{},[23,52953],{"alt":125,"src":52954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,52956,52957],{},"隐式转换:",[19,52959,52960],{},"null+3=3",[19,52962,52963],{},"undefined+3=NaN",[19,52965,52966],{},"null==undefined 输出true,他两个都当0看",[19,52968,52969],{},"null===undefined 输出false",[19,52971,52972],{},"undefined做任何操作都是NaN",[19,52974,52975],{},"NaN不等于NaN，NaN表示计算错误",[14,52977,52979],{"id":52978},"_210-对象","2.10 对象",[49,52981,52983],{"id":52982},"_2101-对象的介绍","2.10.1 对象的介绍",[19,52985,52986],{},"对象也是一种数据类型，里边的数据是无序的",[19,52988,52989],{},"对象由属性和方法组成",[19,52991,52992],{},[23,52993],{"alt":125,"src":52994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,52996,52997],{},[23,52998],{"alt":125,"src":52999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53001,53002],{},[23,53003],{"alt":125,"src":53004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[49,53006,53008],{"id":53007},"_2102-对象属性","2.10.2 对象属性",[19,53010,53011],{},[23,53012],{"alt":125,"src":53013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[161,53015,53016],{},[71,53017,53018],{},"查询对象",[19,53020,53021],{},"对象名.属性 goods.uname",[19,53023,53024],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53026,53027],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53029,53030],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53032,53033],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[161,53035,53036],{"start":126},[71,53037,53038],{},"重新赋值",[19,53040,53041],{},"对象名.属性=新值",[161,53043,53044],{"start":131},[71,53045,53046],{},"增加新数据",[19,53048,53041],{},[161,53050,53051],{"start":1281},[71,53052,53053],{},"删除对象中的属性",[19,53055,53056],{},"delete 对象名.属性",[49,53058,53060],{"id":53059},"_2103-对象方法","2.10.3 对象方法",[19,53062,53063],{},[23,53064],{"alt":125,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53067,53068],{},"后边跟的是匿名函数",[19,53070,53071],{},"对象外面的叫函数；对象内部的叫方法",[19,53073,53074],{},[23,53075],{"alt":125,"src":53076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[49,53078,53080],{"id":53079},"_2104-遍历对象","2.10.4 遍历对象",[19,53082,53083],{},"理解为加括号的python字典遍历",[19,53085,53086],{},[23,53087],{"alt":125,"src":53088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53090,53091],{},"k是字符串类型",[19,53093,53094],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[196,53096,53098],{"className":50719,"code":53097,"language":50721,"meta":125,"style":125},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[81,53099,53100,53105,53110,53115,53120],{"__ignoreMap":125},[204,53101,53102],{"class":206,"line":207},[204,53103,53104],{"class":214},"   let arr = [1, 2, 3]\n",[204,53106,53107],{"class":206,"line":126},[204,53108,53109],{"class":214},"    for (let k in arr) {\n",[204,53111,53112],{"class":206,"line":131},[204,53113,53114],{"class":214},"      console.log(k)\n",[204,53116,53117],{"class":206,"line":1281},[204,53118,53119],{"class":214},"      console.log(arr[k])\n",[204,53121,53122],{"class":206,"line":1287},[204,53123,2273],{"class":214},[19,53125,53126],{},[23,53127],{"alt":125,"src":53128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53130,53131],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53133,53134],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53136,53137],{},"for in 得到的k是属性名",[51899,53139,53140],{},"\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",[19,53142,53143],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[49,53145,53147],{"id":53146},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53149,53150],{},"数组中放对象信息",[196,53152,53156],{"className":53153,"code":53154,"language":53155,"meta":125,"style":125},"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",[81,53157,53158,53166,53171,53176,53181,53186,53191,53196,53201,53206,53211,53216,53221,53225,53229],{"__ignoreMap":125},[204,53159,53160,53162,53164],{"class":206,"line":207},[204,53161,1123],{"class":214},[204,53163,51899],{"class":51386},[204,53165,51393],{"class":214},[204,53167,53168],{"class":206,"line":126},[204,53169,53170],{"class":214},"    let students = [\n",[204,53172,53173],{"class":206,"line":131},[204,53174,53175],{"class":214},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[204,53177,53178],{"class":206,"line":1281},[204,53179,53180],{"class":214},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[204,53182,53183],{"class":206,"line":1287},[204,53184,53185],{"class":214},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[204,53187,53188],{"class":206,"line":1301},[204,53189,53190],{"class":214},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[204,53192,53193],{"class":206,"line":1307},[204,53194,53195],{"class":214},"    ]\n",[204,53197,53198],{"class":206,"line":1398},[204,53199,53200],{"class":214},"    for (let i = 0; i \u003C students.length; i++) {\n",[204,53202,53203],{"class":206,"line":1404},[204,53204,53205],{"class":214},"      for (let k in students[i]) {\n",[204,53207,53208],{"class":206,"line":1416},[204,53209,53210],{"class":214},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[204,53212,53213],{"class":206,"line":1698},[204,53214,53215],{"class":214},"        \u002F\u002F输出每个人的名字：\n",[204,53217,53218],{"class":206,"line":1703},[204,53219,53220],{"class":214},"        \u002F\u002Fconsole.log(students[i].name)\n",[204,53222,53223],{"class":206,"line":1709},[204,53224,52484],{"class":214},[204,53226,53227],{"class":206,"line":1714},[204,53228,2273],{"class":214},[204,53230,53231,53233,53235],{"class":206,"line":1728},[204,53232,52503],{"class":214},[204,53234,51899],{"class":51386},[204,53236,51393],{"class":214},[49,53238,53240],{"id":53239},"_2106-内置对象","2.10.6 内置对象",[19,53242,53243],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[161,53245,53246],{},[71,53247,53248],{},"数学对象Math",[19,53250,53251],{},[23,53252],{"alt":125,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53255,53256],{},[62,53257,53260],{"href":53258,"rel":53259},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[66],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53262,53263],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53265,53266],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53268,53269],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53271,53272],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53274,53275],{},"null属于对象数据类型",[161,53277,53278],{"start":126},[71,53279,53280],{},"生成任意范围随机数",[19,53282,53283],{},[23,53284],{"alt":125,"src":53285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53287,53288],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53290,53291],{},"乘以几就取不到几",[19,53293,53294],{},"取数组中的随机元素：",[19,53296,53297],{},"let arr = ['red', 'green', 'blue']",[19,53299,53300],{},"let random = Math.floor(Math.random() * arr.length)",[19,53302,53303],{},"console.log(arr[random])",[19,53305,53306],{},"这个函数得到的是全闭区间",[19,53308,53309],{},"function getRandom(N, M) {",[19,53311,53312],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53314,1159],{},[19,53316,53317],{},"console.log(getRandom(4, 8))",[49,53319,53321],{"id":53320},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53323,53324],{},[23,53325],{"alt":125,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53328,53329],{},[23,53330],{"alt":125,"src":53331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53333,53334],{},[23,53335],{"alt":125,"src":53336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53338,53339],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53341,53342],{},[23,53343],{"alt":125,"src":53344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53346,53347],{},[23,53348],{"alt":125,"src":53349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53351,53352],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53354,53355],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53357,53358],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5213,53360,53361],{},"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":125,"searchDepth":126,"depth":126,"links":53363},[53364,53372,53373,53374,53375,53376,53383,53387,53393,53402],{"id":50554,"depth":126,"text":50555,"children":53365},[53366,53367,53368,53369,53370,53371],{"id":50558,"depth":131,"text":50559},{"id":50575,"depth":131,"text":50576},{"id":50615,"depth":131,"text":50616},{"id":50627,"depth":131,"text":50628},{"id":50636,"depth":131,"text":50637},{"id":50684,"depth":131,"text":50685},{"id":50694,"depth":126,"text":50695},{"id":50782,"depth":126,"text":50783},{"id":50805,"depth":126,"text":50806},{"id":50817,"depth":126,"text":50818},{"id":51004,"depth":126,"text":51005,"children":53377},[53378,53379,53380,53381,53382],{"id":51008,"depth":131,"text":51009},{"id":51017,"depth":131,"text":51018},{"id":51045,"depth":131,"text":51046},{"id":51081,"depth":131,"text":51082},{"id":51106,"depth":131,"text":51107},{"id":51118,"depth":126,"text":51119,"children":53384},[53385,53386],{"id":51139,"depth":131,"text":51140},{"id":51233,"depth":131,"text":51234},{"id":51291,"depth":126,"text":51292,"children":53388},[53389,53390,53391,53392],{"id":51295,"depth":131,"text":51296},{"id":51319,"depth":131,"text":51320},{"id":51372,"depth":131,"text":51373},{"id":52183,"depth":131,"text":52184},{"id":52569,"depth":126,"text":52570,"children":53394},[53395,53396,53397,53398,53399,53400,53401],{"id":52587,"depth":131,"text":52588},{"id":52624,"depth":131,"text":52625},{"id":52655,"depth":131,"text":52656},{"id":52688,"depth":131,"text":52689},{"id":52769,"depth":131,"text":52770},{"id":52867,"depth":131,"text":52868},{"id":52925,"depth":131,"text":52926},{"id":52978,"depth":126,"text":52979,"children":53403},[53404,53405,53406,53407,53408,53409,53410],{"id":52982,"depth":131,"text":52983},{"id":53007,"depth":131,"text":53008},{"id":53059,"depth":131,"text":53060},{"id":53079,"depth":131,"text":53080},{"id":53146,"depth":131,"text":53147},{"id":53239,"depth":131,"text":53240},{"id":53320,"depth":131,"text":53321},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50546,"description":132},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53417,"title":53418,"body":53419,"description":132,"extension":133,"meta":76759,"navigation":135,"path":76760,"seo":76761,"stem":76762,"__hash__":76763},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53420,"toc":76699},[53421,53424,53427,53430,53435,53438,53441,53444,53448,53452,53458,53463,53471,53478,53481,53485,53490,53495,53500,53503,53506,53517,53520,53524,53527,53530,53535,53540,53545,53548,53551,53643,53646,53651,53654,53659,53662,53665,53670,53673,53678,53682,53685,53699,53703,53708,53711,53714,53718,53723,53726,53730,53734,53739,53743,53748,53751,53754,53757,53760,53763,53766,53771,53776,53804,53807,53810,53813,53818,53821,53824,53827,53830,53834,53863,53867,53872,53877,53880,53883,53886,53891,54006,54011,54016,54177,54182,54185,54189,54194,54199,54202,54205,54208,54211,54214,54217,54220,54223,54226,54229,54232,54235,54238,54241,54243,54246,54249,54252,54257,54261,54658,54661,54667,54671,54676,55958,55963,55966,55969,55972,55977,57173,57177,57183,57188,57191,57196,57201,57205,57209,57214,57217,57222,57225,57228,57232,58140,58143,58147,58368,58371,58374,58377,58603,58606,58830,58833,58837,58842,58845,58848,59076,59079,59112,59115,59119,59124,59128,59131,59134,59137,59140,59143,59146,59149,59154,60434,60438,60441,61534,61538,61541,61544,61547,61550,61554,61557,61560,61562,61570,63051,63055,63058,63061,63064,63273,63276,63280,63284,63289,63294,63297,63300,63305,63309,63314,63317,63426,63430,63435,63440,63443,63446,63450,63455,63460,63465,63468,63471,63482,63485,63490,63495,63498,63501,63574,63578,63583,63586,63588,63599,63603,63608,64934,64937,64940,64943,64945,64948,64951,64954,64957,64960,64963,64966,64969,64972,64975,64978,64981,64983,64985,64988,64992,66086,66089,66092,66108,66122,66125,66130,66136,66141,66145,66149,66154,66158,66163,66605,66610,66613,66617,66622,66625,66628,66632,66637,66641,66646,66651,66655,66660,66665,66668,66673,66678,66682,66687,66692,66796,66799,66803,66808,67174,67177,67180,67183,67186,67189,67192,67195,67198,68494,68498,68503,68508,68511,68514,68517,68520,68522,68527,68532,68535,68539,68544,68549,68554,68557,68560,68563,68566,68569,68574,68577,68581,68586,68591,68595,68600,68603,68608,68611,68614,68617,68620,68623,68628,68631,68634,68637,68640,68644,68649,68652,68656,68661,68664,68667,68671,68700,68703,68707,68711,68716,68720,68725,68728,68731,68734,68737,68740,68743,68746,68749,68752,68755,68758,68761,68764,68767,68771,68776,68781,68784,68788,68792,68797,68800,68804,68807,68810,68815,68820,68825,68830,68835,68838,68841,68846,68851,68855,68860,68863,68868,68871,68874,68877,68880,68885,68888,68897,68901,68906,68909,68912,68916,68919,68924,68928,68931,68937,68943,68947,68973,68976,70537,70540,71036,71039,71044,71049,71054,71058,71063,71068,71073,71077,71082,71085,71088,71091,71094,71098,71101,71106,71109,71114,71118,71123,71126,71131,71136,71141,71144,71147,71152,71157,71160,71163,71167,71170,71175,71178,71183,71186,71191,71196,71201,71204,71209,71274,71277,71288,71292,71297,71469,71473,71478,71481,71484,71487,71491,71502,71506,71509,71514,71519,71522,71525,71528,71531,71534,71536,71539,71542,71545,71550,71553,71558,71561,71565,71568,71571,71585,71589,71592,71647,71652,71655,71658,71663,71666,71670,71675,71805,71809,71814,71819,71900,71905,71909,71912,71917,71922,71928,71931,71934,71937,71941,71946,71949,71960,71964,71981,75028,75032,75035,75038,75041,75062,75066,75069,75077,75080,75085,75088,75091,75096,75101,75105,75126,75130,75135,75138,75141,75144,75147,75151,75156,75159,75163,75168,75171,75176,75179,75184,75187,75192,76395,76399,76404,76407,76412,76696],[10,53422,53418],{"id":53423},"_3web-apis",[19,53425,53426],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53428,53429],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53431,53432],{},[23,53433],{"alt":125,"src":53434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53436,53437],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53439,53440],{},"建议数组和对象使用 const 来声明",[19,53442,53443],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53445,53447],{"id":53446},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[49,53449,53451],{"id":53450},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53453,53454,53457],{},[81,53455,53456],{},"document"," = HTML 文件解析后的对象化表示；",[19,53459,53460,53462],{},[81,53461,53456],{}," ≠ HTML 文件本身",[19,53464,53465,53470],{},[30,53466,53467],{},[81,53468,53469],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53472,53473,53477],{},[30,53474,53475],{},[81,53476,53456],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53479,53480],{},"document实际上为window.document的简写",[49,53482,53484],{"id":53483},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53486,53487],{},[23,53488],{"alt":125,"src":53489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53491,53492],{},[23,53493],{"alt":125,"src":53494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53496,53497],{},[23,53498],{"alt":125,"src":53499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53501,53502],{},"console.dir()",[19,53504,53505],{},"dir用来打印对象",[68,53507,53508,53511,53514],{},[71,53509,53510],{},"任何一个标签，都是一个对象",[71,53512,53513],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[71,53515,53516],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53518,53519],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[49,53521,53523],{"id":53522},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53525,53526],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53528,53529],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53531,53532],{},[30,53533,53534],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[161,53536,53537],{},[71,53538,53539],{},"利用CSS选择器来获取标签元素",[19,53541,53542],{},[23,53543],{"alt":125,"src":53544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53546,53547],{},"里边的选择器必须必须加引号！！！",[19,53549,53550],{},"只选择第一个元素",[196,53552,53554],{"className":53153,"code":53553,"language":53155,"meta":125,"style":125},"\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",[81,53555,53556,53564,53585,53604,53612,53617,53622,53627,53635],{"__ignoreMap":125},[204,53557,53558,53560,53562],{"class":206,"line":207},[204,53559,1123],{"class":214},[204,53561,51886],{"class":51386},[204,53563,51393],{"class":214},[204,53565,53566,53568,53570,53573,53575,53578,53581,53583],{"class":206,"line":126},[204,53567,52230],{"class":214},[204,53569,51697],{"class":51386},[204,53571,53572],{"class":2049}," class",[204,53574,260],{"class":214},[204,53576,53577],{"class":319},"\"box\"",[204,53579,53580],{"class":214},">123\u003C\u002F",[204,53582,51697],{"class":51386},[204,53584,51393],{"class":214},[204,53586,53587,53589,53591,53593,53595,53597,53600,53602],{"class":206,"line":131},[204,53588,52230],{"class":214},[204,53590,51697],{"class":51386},[204,53592,53572],{"class":2049},[204,53594,260],{"class":214},[204,53596,53577],{"class":319},[204,53598,53599],{"class":214},">456\u003C\u002F",[204,53601,51697],{"class":51386},[204,53603,51393],{"class":214},[204,53605,53606,53608,53610],{"class":206,"line":1281},[204,53607,52230],{"class":214},[204,53609,51899],{"class":51386},[204,53611,51393],{"class":214},[204,53613,53614],{"class":206,"line":1287},[204,53615,53616],{"class":214},"    \u002F\u002F 1.获取匹配的第一个元素\n",[204,53618,53619],{"class":206,"line":1301},[204,53620,53621],{"class":214},"    const box = document.querySelector('div')\n",[204,53623,53624],{"class":206,"line":1307},[204,53625,53626],{"class":214},"    console.dir(box)\n",[204,53628,53629,53631,53633],{"class":206,"line":1398},[204,53630,52503],{"class":214},[204,53632,51899],{"class":51386},[204,53634,51393],{"class":214},[204,53636,53637,53639,53641],{"class":206,"line":1404},[204,53638,51871],{"class":214},[204,53640,51886],{"class":51386},[204,53642,51393],{"class":214},[19,53644,53645],{},"只选123，不选456",[19,53647,53648],{},[23,53649],{"alt":125,"src":53650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53652,53653],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53655,53656],{},[23,53657],{"alt":125,"src":53658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53660,53661],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53663,53664],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[161,53666,53667],{"start":126},[71,53668,53669],{},"其他方法来获取标签元素",[19,53671,53672],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53674,53675],{},[23,53676],{"alt":125,"src":53677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[49,53679,53681],{"id":53680},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53683,53684],{},"设置修改DOM元素内容有两种方式：",[68,53686,53687,53690,53693,53696],{},[71,53688,53689],{},"元素.innerText=''",[71,53691,53692],{},"元素.innerHTML=''",[71,53694,53695],{},"不写字符串输出数字也是可以的",[71,53697,53698],{},"元素.innerHtml=1",[22085,53700,53702],{"id":53701},"_3131-innertext","3.1.3.1 innerText",[19,53704,53705],{},[23,53706],{"alt":125,"src":53707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53709,53710],{},"思路：实现了修改盒子中的内容！",[19,53712,53713],{},"它只显示纯文本，不解析标签",[22085,53715,53717],{"id":53716},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53719,53720],{},[23,53721],{"alt":125,"src":53722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53724,53725],{},"相比于innerText，他的强大之处在于可以解析标签",[49,53727,53729],{"id":53728},"_314-操作元素属性","3.1.4 操作元素属性",[22085,53731,53733],{"id":53732},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53735,53736],{},[23,53737],{"alt":125,"src":53738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22085,53740,53742],{"id":53741},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53744,53745],{},[23,53746],{"alt":125,"src":53747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53749,53750],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53752,53753],{},"div.style.backgroundColor = 'hotpink'",[19,53755,53756],{},"如果按照css的写法，-表示减，就会出错",[19,53758,53759],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53761,53762],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53764,53765],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53767,53768],{},[23,53769],{"alt":125,"src":53770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53772,53773],{},[23,53774],{"alt":125,"src":53775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[161,53777,53778,53781,53784,53787,53790,53793],{},[71,53779,53780],{},"className这个方式就是修改很多样式的时候来使用的！",[71,53782,53783],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[71,53785,53786],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[71,53788,53789],{},"className为属性名，如果还用class的话就导致与关键字冲突",[71,53791,53792],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[71,53794,53795,53796,53801],{},"解析标签的时候就变为了",[51697,53797],{"className":53798},[53799,53800],"nav","box",[53802,53803],"br",{},[19,53805,53806],{},"例子：",[51697,53808],{"className":53809},[53799],[51899,53811,53812],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53814,53815],{},[23,53816],{"alt":125,"src":53817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53819,53820],{},"追加和删除类名用classList",[19,53822,53823],{},"常用于类似于开关的操作",[19,53825,53826],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53828,53829],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22085,53831,53833],{"id":53832},"_3143-牢记点","3.1.4.3 牢记点",[161,53835,53836,53839,53842,53845,53848,53851,53854,53857,53860],{},[71,53837,53838],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[71,53840,53841],{},"使用style属性操作css时不要忘记引号",[71,53843,53844],{},"使用className或者classList时也不要忘记引号",[71,53846,53847],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[71,53849,53850],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[71,53852,53853],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[71,53855,53856],{},"若： let arr=['1','2',3] arr[0]=1",[71,53858,53859],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[71,53861,53862],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[49,53864,53866],{"id":53865},"_315-操作表单元素","3.1.5 操作表单元素",[161,53868,53869],{},[71,53870,53871],{},"天生的属性",[19,53873,53874],{},[23,53875],{"alt":125,"src":53876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53878,53879],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53881,53882],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53884,53885],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53887,53888],{},[23,53889],{"alt":125,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[196,53892,53894],{"className":50719,"code":53893,"language":50721,"meta":125,"style":125},"在复选框中如果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",[81,53895,53896,53901,53933,53938,53943,53948,53953,53957,53962,53967,53984,53996,54001],{"__ignoreMap":125},[204,53897,53898],{"class":206,"line":207},[204,53899,53900],{"class":214},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[204,53902,53903,53905,53908,53911,53913,53916,53918,53920,53922,53924,53926,53928,53931],{"class":206,"line":126},[204,53904,1123],{"class":214},[204,53906,53907],{"class":51386},"input",[204,53909,53910],{"class":2049}," type",[204,53912,260],{"class":214},[204,53914,53915],{"class":319},"\"checkbox\"",[204,53917,15007],{"class":2049},[204,53919,260],{"class":214},[204,53921,7739],{"class":319},[204,53923,15046],{"class":2049},[204,53925,260],{"class":214},[204,53927,7739],{"class":319},[204,53929,53930],{"class":2049}," checked",[204,53932,51393],{"class":214},[204,53934,53935],{"class":206,"line":131},[204,53936,53937],{"class":214},"不选的话：\n",[204,53939,53940],{"class":206,"line":1281},[204,53941,53942],{"class":214},"const input = document.querySelector('input')\n",[204,53944,53945],{"class":206,"line":1287},[204,53946,53947],{"class":214},"input.checked=false\n",[204,53949,53950],{"class":206,"line":1301},[204,53951,53952],{"class":214},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[204,53954,53955],{"class":206,"line":1307},[204,53956,2486],{"emptyLinePlaceholder":135},[204,53958,53959],{"class":206,"line":1398},[204,53960,53961],{"class":214},"禁用按钮：\n",[204,53963,53964],{"class":206,"line":1404},[204,53965,53966],{"class":214},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[204,53968,53969,53971,53974,53977,53980,53982],{"class":206,"line":1416},[204,53970,1123],{"class":214},[204,53972,53973],{"class":51386},"button",[204,53975,53976],{"class":2049}," disabled",[204,53978,53979],{"class":214},">点击\u003C\u002F",[204,53981,53973],{"class":51386},[204,53983,51393],{"class":214},[204,53985,53986,53988,53990,53992,53994],{"class":206,"line":1698},[204,53987,1123],{"class":214},[204,53989,53973],{"class":51386},[204,53991,53979],{"class":214},[204,53993,53973],{"class":51386},[204,53995,51393],{"class":214},[204,53997,53998],{"class":206,"line":1703},[204,53999,54000],{"class":214},"const bt = document.querySelector('button')\n",[204,54002,54003],{"class":206,"line":1709},[204,54004,54005],{"class":214},"bt.disabled = false\n",[161,54007,54008],{"start":126},[71,54009,54010],{},"自定义属性",[19,54012,54013],{},[23,54014],{"alt":125,"src":54015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[196,54017,54019],{"className":53153,"code":54018,"language":53155,"meta":125,"style":125},"\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",[81,54020,54021,54029,54057,54076,54095,54114,54133,54141,54146,54151,54156,54161,54169],{"__ignoreMap":125},[204,54022,54023,54025,54027],{"class":206,"line":207},[204,54024,1123],{"class":214},[204,54026,51886],{"class":51386},[204,54028,51393],{"class":214},[204,54030,54031,54033,54035,54038,54040,54042,54045,54047,54050,54053,54055],{"class":206,"line":126},[204,54032,52230],{"class":214},[204,54034,51697],{"class":51386},[204,54036,54037],{"class":2049}," data-id",[204,54039,260],{"class":214},[204,54041,3764],{"class":319},[204,54043,54044],{"class":2049}," data-spm",[204,54046,260],{"class":214},[204,54048,54049],{"class":319},"\"我不知道\"",[204,54051,54052],{"class":214},">1\u003C\u002F",[204,54054,51697],{"class":51386},[204,54056,51393],{"class":214},[204,54058,54059,54061,54063,54065,54067,54069,54072,54074],{"class":206,"line":131},[204,54060,52230],{"class":214},[204,54062,51697],{"class":51386},[204,54064,54037],{"class":2049},[204,54066,260],{"class":214},[204,54068,3787],{"class":319},[204,54070,54071],{"class":214},">2\u003C\u002F",[204,54073,51697],{"class":51386},[204,54075,51393],{"class":214},[204,54077,54078,54080,54082,54084,54086,54088,54091,54093],{"class":206,"line":1281},[204,54079,52230],{"class":214},[204,54081,51697],{"class":51386},[204,54083,54037],{"class":2049},[204,54085,260],{"class":214},[204,54087,3800],{"class":319},[204,54089,54090],{"class":214},">3\u003C\u002F",[204,54092,51697],{"class":51386},[204,54094,51393],{"class":214},[204,54096,54097,54099,54101,54103,54105,54107,54110,54112],{"class":206,"line":1287},[204,54098,52230],{"class":214},[204,54100,51697],{"class":51386},[204,54102,54037],{"class":2049},[204,54104,260],{"class":214},[204,54106,3813],{"class":319},[204,54108,54109],{"class":214},">4\u003C\u002F",[204,54111,51697],{"class":51386},[204,54113,51393],{"class":214},[204,54115,54116,54118,54120,54122,54124,54126,54129,54131],{"class":206,"line":1301},[204,54117,52230],{"class":214},[204,54119,51697],{"class":51386},[204,54121,54037],{"class":2049},[204,54123,260],{"class":214},[204,54125,3834],{"class":319},[204,54127,54128],{"class":214},">5\u003C\u002F",[204,54130,51697],{"class":51386},[204,54132,51393],{"class":214},[204,54134,54135,54137,54139],{"class":206,"line":1307},[204,54136,52230],{"class":214},[204,54138,51899],{"class":51386},[204,54140,51393],{"class":214},[204,54142,54143],{"class":206,"line":1398},[204,54144,54145],{"class":214},"    const one = document.querySelector('div')\n",[204,54147,54148],{"class":206,"line":1404},[204,54149,54150],{"class":214},"    console.log(one.dataset)\n",[204,54152,54153],{"class":206,"line":1416},[204,54154,54155],{"class":214},"    console.log(one.dataset.id)\n",[204,54157,54158],{"class":206,"line":1698},[204,54159,54160],{"class":214},"    console.log(one.dataset.spm)\n",[204,54162,54163,54165,54167],{"class":206,"line":1703},[204,54164,52503],{"class":214},[204,54166,51899],{"class":51386},[204,54168,51393],{"class":214},[204,54170,54171,54173,54175],{"class":206,"line":1709},[204,54172,51871],{"class":214},[204,54174,51886],{"class":51386},[204,54176,51393],{"class":214},[19,54178,54179],{},[23,54180],{"alt":125,"src":54181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54183,54184],{},"document.querySelector选择的是第一个对象（元素）",[49,54186,54188],{"id":54187},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54190,54191],{},[23,54192],{"alt":125,"src":54193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54195,54196],{},[23,54197],{"alt":125,"src":54198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54200,54201],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51899,54203,54204],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54206,54207],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51899,54209,54210],{},"\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",[19,54212,54213],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54215,54216],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54218,54219],{},"单位为毫秒！！！",[19,54221,54222],{},"可以搭配匿名函数来用！！！",[19,54224,54225],{},"setInterval(function () {",[19,54227,54228],{},"alert('两秒执行一次')",[19,54230,54231],{},"}, 2000)",[19,54233,54234],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54236,54237],{},"function fn() {",[19,54239,54240],{},"document.write(1)",[19,54242,1159],{},[19,54244,54245],{},"setInterval(fn, 1000)",[19,54247,54248],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54250,54251],{},"setInterval('fn()', 1000)",[19,54253,54254],{},[23,54255],{"alt":125,"src":54256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22085,54258,54260],{"id":54259},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[196,54262,54264],{"className":50719,"code":54263,"language":50721,"meta":125,"style":125},"\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",[81,54265,54266,54276,54290,54294,54302,54316,54336,54348,54356,54360,54368,54405,54410,54415,54420,54428,54436,54458,54466,54471,54493,54498,54503,54514,54519,54539,54547,54562,54577,54588,54593,54603,54613,54617,54626,54630,54638,54646,54650],{"__ignoreMap":125},[204,54267,54268,54270,54272,54274],{"class":206,"line":207},[204,54269,51383],{"class":214},[204,54271,51387],{"class":51386},[204,54273,51390],{"class":2049},[204,54275,51393],{"class":214},[204,54277,54278,54280,54282,54284,54286,54288],{"class":206,"line":126},[204,54279,1123],{"class":214},[204,54281,50721],{"class":51386},[204,54283,51402],{"class":2049},[204,54285,260],{"class":214},[204,54287,51407],{"class":319},[204,54289,51393],{"class":214},[204,54291,54292],{"class":206,"line":131},[204,54293,2486],{"emptyLinePlaceholder":135},[204,54295,54296,54298,54300],{"class":206,"line":1281},[204,54297,1123],{"class":214},[204,54299,51420],{"class":51386},[204,54301,51393],{"class":214},[204,54303,54304,54306,54308,54310,54312,54314],{"class":206,"line":1287},[204,54305,52230],{"class":214},[204,54307,51430],{"class":51386},[204,54309,51433],{"class":2049},[204,54311,260],{"class":214},[204,54313,51438],{"class":319},[204,54315,51393],{"class":214},[204,54317,54318,54320,54322,54324,54326,54328,54330,54332,54334],{"class":206,"line":1301},[204,54319,52230],{"class":214},[204,54321,51430],{"class":51386},[204,54323,15007],{"class":2049},[204,54325,260],{"class":214},[204,54327,51477],{"class":319},[204,54329,51457],{"class":2049},[204,54331,260],{"class":214},[204,54333,51484],{"class":319},[204,54335,51393],{"class":214},[204,54337,54338,54340,54342,54344,54346],{"class":206,"line":1307},[204,54339,52230],{"class":214},[204,54341,51493],{"class":51386},[204,54343,51496],{"class":214},[204,54345,51493],{"class":51386},[204,54347,51393],{"class":214},[204,54349,54350,54352,54354],{"class":206,"line":1398},[204,54351,51871],{"class":214},[204,54353,51420],{"class":51386},[204,54355,51393],{"class":214},[204,54357,54358],{"class":206,"line":1404},[204,54359,2486],{"emptyLinePlaceholder":135},[204,54361,54362,54364,54366],{"class":206,"line":1416},[204,54363,1123],{"class":214},[204,54365,51886],{"class":51386},[204,54367,51393],{"class":214},[204,54369,54370,54372,54375,54377,54379,54381,54383,54385,54387,54390,54392,54395,54398,54400,54403],{"class":206,"line":1698},[204,54371,52230],{"class":214},[204,54373,54374],{"class":51386},"textarea",[204,54376,15007],{"class":2049},[204,54378,260],{"class":214},[204,54380,7739],{"class":319},[204,54382,15046],{"class":2049},[204,54384,260],{"class":214},[204,54386,7739],{"class":319},[204,54388,54389],{"class":2049}," cols",[204,54391,260],{"class":214},[204,54393,54394],{"class":319},"\"30\"",[204,54396,54397],{"class":2049}," rows",[204,54399,260],{"class":214},[204,54401,54402],{"class":319},"\"10\"",[204,54404,51393],{"class":214},[204,54406,54407],{"class":206,"line":1703},[204,54408,54409],{"class":214},"        用户注册协议\n",[204,54411,54412],{"class":206,"line":1709},[204,54413,54414],{"class":214},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[204,54416,54417],{"class":206,"line":1714},[204,54418,54419],{"class":214},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[204,54421,54422,54424,54426],{"class":206,"line":1728},[204,54423,51862],{"class":214},[204,54425,54374],{"class":51386},[204,54427,51393],{"class":214},[204,54429,54430,54432,54434],{"class":206,"line":1733},[204,54431,52230],{"class":214},[204,54433,53802],{"class":51386},[204,54435,51393],{"class":214},[204,54437,54438,54440,54442,54444,54446,54449,54451,54454,54456],{"class":206,"line":1739},[204,54439,52230],{"class":214},[204,54441,53973],{"class":51386},[204,54443,53572],{"class":2049},[204,54445,260],{"class":214},[204,54447,54448],{"class":319},"\"btn\"",[204,54450,53976],{"class":2049},[204,54452,54453],{"class":214},">我已经阅读用户协议(5)\u003C\u002F",[204,54455,53973],{"class":51386},[204,54457,51393],{"class":214},[204,54459,54460,54462,54464],{"class":206,"line":1760},[204,54461,52230],{"class":214},[204,54463,51899],{"class":51386},[204,54465,51393],{"class":214},[204,54467,54468],{"class":206,"line":1765},[204,54469,54470],{"class":273},"    \u002F\u002F 1. 获取元素\n",[204,54472,54473,54475,54478,54480,54483,54486,54488,54491],{"class":206,"line":1779},[204,54474,11308],{"class":210},[204,54476,54477],{"class":263}," btn",[204,54479,13651],{"class":210},[204,54481,54482],{"class":214}," document.",[204,54484,54485],{"class":2049},"querySelector",[204,54487,215],{"class":214},[204,54489,54490],{"class":319},"'.btn'",[204,54492,221],{"class":214},[204,54494,54495],{"class":206,"line":1784},[204,54496,54497],{"class":273},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[204,54499,54500],{"class":206,"line":1813},[204,54501,54502],{"class":273},"    \u002F\u002F 2. 倒计时\n",[204,54504,54505,54507,54509,54511],{"class":206,"line":1818},[204,54506,52305],{"class":210},[204,54508,9525],{"class":214},[204,54510,260],{"class":210},[204,54512,54513],{"class":263}," 5\n",[204,54515,54516],{"class":206,"line":1835},[204,54517,54518],{"class":273},"    \u002F\u002F 2.1 开启定时器\n",[204,54520,54521,54523,54526,54528,54531,54533,54536],{"class":206,"line":1840},[204,54522,52305],{"class":210},[204,54524,54525],{"class":214}," n ",[204,54527,260],{"class":210},[204,54529,54530],{"class":2049}," setInterval",[204,54532,215],{"class":214},[204,54534,54535],{"class":210},"function",[204,54537,54538],{"class":214}," () {\n",[204,54540,54541,54544],{"class":206,"line":1845},[204,54542,54543],{"class":214},"      i",[204,54545,54546],{"class":210},"--\n",[204,54548,54549,54552,54554,54557,54559],{"class":206,"line":1850},[204,54550,54551],{"class":214},"      btn.innerHTML ",[204,54553,260],{"class":210},[204,54555,54556],{"class":319}," `我已经阅读用户协议(${",[204,54558,654],{"class":214},[204,54560,54561],{"class":319},"})`\n",[204,54563,54564,54567,54570,54573,54575],{"class":206,"line":1864},[204,54565,54566],{"class":210},"      if",[204,54568,54569],{"class":214}," (i ",[204,54571,54572],{"class":210},"===",[204,54574,4179],{"class":263},[204,54576,12529],{"class":214},[204,54578,54579,54582,54585],{"class":206,"line":1869},[204,54580,54581],{"class":2049},"        clearInterval",[204,54583,54584],{"class":214},"(n)  ",[204,54586,54587],{"class":273},"\u002F\u002F 关闭定时器\n",[204,54589,54590],{"class":206,"line":2663},[204,54591,54592],{"class":273},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[204,54594,54595,54598,54600],{"class":206,"line":2677},[204,54596,54597],{"class":214},"        btn.disabled ",[204,54599,260],{"class":210},[204,54601,54602],{"class":263}," false\n",[204,54604,54605,54608,54610],{"class":206,"line":2685},[204,54606,54607],{"class":214},"        btn.innerHTML ",[204,54609,260],{"class":210},[204,54611,54612],{"class":319}," '同意'\n",[204,54614,54615],{"class":206,"line":2690},[204,54616,52484],{"class":214},[204,54618,54619,54622,54624],{"class":206,"line":2696},[204,54620,54621],{"class":214},"    }, ",[204,54623,6497],{"class":263},[204,54625,221],{"class":214},[204,54627,54628],{"class":206,"line":2702},[204,54629,2486],{"emptyLinePlaceholder":135},[204,54631,54632,54634,54636],{"class":206,"line":2707},[204,54633,52503],{"class":214},[204,54635,51899],{"class":51386},[204,54637,51393],{"class":214},[204,54639,54640,54642,54644],{"class":206,"line":8035},[204,54641,51871],{"class":214},[204,54643,51886],{"class":51386},[204,54645,51393],{"class":214},[204,54647,54648],{"class":206,"line":8059},[204,54649,2486],{"emptyLinePlaceholder":135},[204,54651,54652,54654,54656],{"class":206,"line":8064},[204,54653,51871],{"class":214},[204,54655,50721],{"class":51386},[204,54657,51393],{"class":214},[19,54659,54660],{},"不要一直想着用死循环,避免死循环",[19,54662,54663,54666],{},[81,54664,54665],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22085,54668,54670],{"id":54669},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[161,54672,54673],{},[71,54674,54675],{},"法1",[196,54677,54679],{"className":50719,"code":54678,"language":50721,"meta":125,"style":125},"\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",[81,54680,54681,54691,54705,54709,54717,54731,54751,54763,54771,54777,54788,54799,54803,54807,54814,54826,54830,54834,54841,54853,54867,54880,54894,54898,54902,54909,54920,54931,54942,54954,54966,54978,54982,54986,54994,55004,55017,55029,55042,55046,55050,55057,55067,55079,55091,55102,55113,55123,55135,55147,55151,55155,55164,55176,55188,55216,55229,55233,55237,55244,55255,55259,55267,55275,55279,55287,55301,55316,55340,55348,55363,55376,55384,55405,55417,55429,55441,55453,55465,55477,55489,55498,55506,55514,55522,55534,55557,55576,55595,55614,55633,55652,55671,55691,55695,55715,55734,55754,55775,55786,55803,55813,55823,55833,55838,55843,55848,55853,55878,55891,55895,55918,55922,55930,55938,55946,55950],{"__ignoreMap":125},[204,54682,54683,54685,54687,54689],{"class":206,"line":207},[204,54684,51383],{"class":214},[204,54686,51387],{"class":51386},[204,54688,51390],{"class":2049},[204,54690,51393],{"class":214},[204,54692,54693,54695,54697,54699,54701,54703],{"class":206,"line":126},[204,54694,1123],{"class":214},[204,54696,50721],{"class":51386},[204,54698,51402],{"class":2049},[204,54700,260],{"class":214},[204,54702,51407],{"class":319},[204,54704,51393],{"class":214},[204,54706,54707],{"class":206,"line":131},[204,54708,2486],{"emptyLinePlaceholder":135},[204,54710,54711,54713,54715],{"class":206,"line":1281},[204,54712,1123],{"class":214},[204,54714,51420],{"class":51386},[204,54716,51393],{"class":214},[204,54718,54719,54721,54723,54725,54727,54729],{"class":206,"line":1287},[204,54720,52230],{"class":214},[204,54722,51430],{"class":51386},[204,54724,51433],{"class":2049},[204,54726,260],{"class":214},[204,54728,51438],{"class":319},[204,54730,51393],{"class":214},[204,54732,54733,54735,54737,54739,54741,54743,54745,54747,54749],{"class":206,"line":1301},[204,54734,52230],{"class":214},[204,54736,51430],{"class":51386},[204,54738,15007],{"class":2049},[204,54740,260],{"class":214},[204,54742,51477],{"class":319},[204,54744,51457],{"class":2049},[204,54746,260],{"class":214},[204,54748,51484],{"class":319},[204,54750,51393],{"class":214},[204,54752,54753,54755,54757,54759,54761],{"class":206,"line":1307},[204,54754,52230],{"class":214},[204,54756,51493],{"class":51386},[204,54758,51496],{"class":214},[204,54760,51493],{"class":51386},[204,54762,51393],{"class":214},[204,54764,54765,54767,54769],{"class":206,"line":1398},[204,54766,52230],{"class":214},[204,54768,5213],{"class":51386},[204,54770,51393],{"class":214},[204,54772,54773,54775],{"class":206,"line":1404},[204,54774,6490],{"class":51386},[204,54776,15659],{"class":214},[204,54778,54779,54782,54784,54786],{"class":206,"line":1416},[204,54780,54781],{"class":263},"      padding",[204,54783,51523],{"class":214},[204,54785,405],{"class":263},[204,54787,1377],{"class":214},[204,54789,54790,54793,54795,54797],{"class":206,"line":1698},[204,54791,54792],{"class":263},"      margin",[204,54794,51523],{"class":214},[204,54796,405],{"class":263},[204,54798,1377],{"class":214},[204,54800,54801],{"class":206,"line":1703},[204,54802,2273],{"class":214},[204,54804,54805],{"class":206,"line":1709},[204,54806,2486],{"emptyLinePlaceholder":135},[204,54808,54809,54812],{"class":206,"line":1714},[204,54810,54811],{"class":51386},"    li",[204,54813,15659],{"class":214},[204,54815,54816,54819,54821,54824],{"class":206,"line":1728},[204,54817,54818],{"class":263},"      list-style",[204,54820,51523],{"class":214},[204,54822,54823],{"class":263},"none",[204,54825,1377],{"class":214},[204,54827,54828],{"class":206,"line":1733},[204,54829,2273],{"class":214},[204,54831,54832],{"class":206,"line":1739},[204,54833,2486],{"emptyLinePlaceholder":135},[204,54835,54836,54839],{"class":206,"line":1760},[204,54837,54838],{"class":2049},"    .box",[204,54840,15659],{"class":214},[204,54842,54843,54846,54848,54851],{"class":206,"line":1765},[204,54844,54845],{"class":263},"      position",[204,54847,51523],{"class":214},[204,54849,54850],{"class":263},"relative",[204,54852,1377],{"class":214},[204,54854,54855,54858,54860,54863,54865],{"class":206,"line":1779},[204,54856,54857],{"class":263},"      width",[204,54859,51523],{"class":214},[204,54861,54862],{"class":263},"976",[204,54864,51578],{"class":210},[204,54866,1377],{"class":214},[204,54868,54869,54872,54874,54876,54878],{"class":206,"line":1784},[204,54870,54871],{"class":263},"      height",[204,54873,51523],{"class":214},[204,54875,1625],{"class":263},[204,54877,51578],{"class":210},[204,54879,1377],{"class":214},[204,54881,54882,54884,54886,54888,54890,54892],{"class":206,"line":1813},[204,54883,54792],{"class":263},[204,54885,51523],{"class":214},[204,54887,524],{"class":263},[204,54889,51578],{"class":210},[204,54891,51642],{"class":263},[204,54893,1377],{"class":214},[204,54895,54896],{"class":206,"line":1818},[204,54897,2273],{"class":214},[204,54899,54900],{"class":206,"line":1835},[204,54901,2486],{"emptyLinePlaceholder":135},[204,54903,54904,54907],{"class":206,"line":1840},[204,54905,54906],{"class":2049},"    .slider-footer",[204,54908,15659],{"class":214},[204,54910,54911,54913,54915,54918],{"class":206,"line":1845},[204,54912,54845],{"class":263},[204,54914,51523],{"class":214},[204,54916,54917],{"class":263},"absolute",[204,54919,1377],{"class":214},[204,54921,54922,54925,54927,54929],{"class":206,"line":1850},[204,54923,54924],{"class":263},"      left",[204,54926,51523],{"class":214},[204,54928,405],{"class":263},[204,54930,1377],{"class":214},[204,54932,54933,54936,54938,54940],{"class":206,"line":1864},[204,54934,54935],{"class":263},"      bottom",[204,54937,51523],{"class":214},[204,54939,405],{"class":263},[204,54941,1377],{"class":214},[204,54943,54944,54946,54948,54950,54952],{"class":206,"line":1869},[204,54945,54857],{"class":263},[204,54947,51523],{"class":214},[204,54949,524],{"class":263},[204,54951,541],{"class":210},[204,54953,1377],{"class":214},[204,54955,54956,54958,54960,54962,54964],{"class":206,"line":2663},[204,54957,54871],{"class":263},[204,54959,51523],{"class":214},[204,54961,788],{"class":263},[204,54963,541],{"class":210},[204,54965,1377],{"class":214},[204,54967,54968,54971,54973,54976],{"class":206,"line":2677},[204,54969,54970],{"class":263},"      background-color",[204,54972,51523],{"class":214},[204,54974,54975],{"class":263},"skyblue",[204,54977,1377],{"class":214},[204,54979,54980],{"class":206,"line":2685},[204,54981,2273],{"class":214},[204,54983,54984],{"class":206,"line":2690},[204,54985,2486],{"emptyLinePlaceholder":135},[204,54987,54988,54990,54992],{"class":206,"line":2696},[204,54989,54906],{"class":2049},[204,54991,6912],{"class":51386},[204,54993,15659],{"class":214},[204,54995,54996,54998,55000,55002],{"class":206,"line":2702},[204,54997,54845],{"class":263},[204,54999,51523],{"class":214},[204,55001,54917],{"class":263},[204,55003,1377],{"class":214},[204,55005,55006,55009,55011,55013,55015],{"class":206,"line":2707},[204,55007,55008],{"class":263},"      font-size",[204,55010,51523],{"class":214},[204,55012,1114],{"class":263},[204,55014,51578],{"class":210},[204,55016,1377],{"class":214},[204,55018,55019,55021,55023,55025,55027],{"class":206,"line":8035},[204,55020,54924],{"class":263},[204,55022,51523],{"class":214},[204,55024,913],{"class":263},[204,55026,51578],{"class":210},[204,55028,1377],{"class":214},[204,55030,55031,55034,55036,55038,55040],{"class":206,"line":8059},[204,55032,55033],{"class":263},"      top",[204,55035,51523],{"class":214},[204,55037,532],{"class":263},[204,55039,51578],{"class":210},[204,55041,1377],{"class":214},[204,55043,55044],{"class":206,"line":8064},[204,55045,2273],{"class":214},[204,55047,55048],{"class":206,"line":8070},[204,55049,2486],{"emptyLinePlaceholder":135},[204,55051,55052,55055],{"class":206,"line":8097},[204,55053,55054],{"class":51386},"    ul",[204,55056,15659],{"class":214},[204,55058,55059,55061,55063,55065],{"class":206,"line":8102},[204,55060,54845],{"class":263},[204,55062,51523],{"class":214},[204,55064,54917],{"class":263},[204,55066,1377],{"class":214},[204,55068,55069,55071,55073,55075,55077],{"class":206,"line":8108},[204,55070,55033],{"class":263},[204,55072,51523],{"class":214},[204,55074,994],{"class":263},[204,55076,51578],{"class":210},[204,55078,1377],{"class":214},[204,55080,55081,55083,55085,55087,55089],{"class":206,"line":8120},[204,55082,54924],{"class":263},[204,55084,51523],{"class":214},[204,55086,913],{"class":263},[204,55088,51578],{"class":210},[204,55090,1377],{"class":214},[204,55092,55093,55096,55098,55100],{"class":206,"line":8132},[204,55094,55095],{"class":263},"      display",[204,55097,51523],{"class":214},[204,55099,51563],{"class":263},[204,55101,1377],{"class":214},[204,55103,55104,55107,55109,55111],{"class":206,"line":8144},[204,55105,55106],{"class":263},"      justify-content",[204,55108,51523],{"class":214},[204,55110,51754],{"class":263},[204,55112,1377],{"class":214},[204,55114,55115,55117,55119,55121],{"class":206,"line":9803},[204,55116,54845],{"class":263},[204,55118,51523],{"class":214},[204,55120,54917],{"class":263},[204,55122,1377],{"class":214},[204,55124,55125,55127,55129,55131,55133],{"class":206,"line":9828},[204,55126,54857],{"class":263},[204,55128,51523],{"class":214},[204,55130,4078],{"class":263},[204,55132,51578],{"class":210},[204,55134,1377],{"class":214},[204,55136,55137,55139,55141,55143,55145],{"class":206,"line":9851},[204,55138,54871],{"class":263},[204,55140,51523],{"class":214},[204,55142,913],{"class":263},[204,55144,51578],{"class":210},[204,55146,1377],{"class":214},[204,55148,55149],{"class":206,"line":9875},[204,55150,2273],{"class":214},[204,55152,55153],{"class":206,"line":9880},[204,55154,2486],{"emptyLinePlaceholder":135},[204,55156,55157,55159,55162],{"class":206,"line":9885},[204,55158,55054],{"class":51386},[204,55160,55161],{"class":51386}," li",[204,55163,15659],{"class":214},[204,55165,55166,55168,55170,55172,55174],{"class":206,"line":9890},[204,55167,54857],{"class":263},[204,55169,51523],{"class":214},[204,55171,913],{"class":263},[204,55173,51578],{"class":210},[204,55175,1377],{"class":214},[204,55177,55178,55180,55182,55184,55186],{"class":206,"line":9899},[204,55179,54871],{"class":263},[204,55181,51523],{"class":214},[204,55183,913],{"class":263},[204,55185,51578],{"class":210},[204,55187,1377],{"class":214},[204,55189,55190,55192,55194,55197,55199,55201,55203,55205,55207,55209,55211,55214],{"class":206,"line":9904},[204,55191,54970],{"class":263},[204,55193,51523],{"class":214},[204,55195,55196],{"class":263},"rgba",[204,55198,215],{"class":214},[204,55200,405],{"class":263},[204,55202,12522],{"class":214},[204,55204,405],{"class":263},[204,55206,12522],{"class":214},[204,55208,405],{"class":263},[204,55210,12522],{"class":214},[204,55212,55213],{"class":263},".4",[204,55215,2805],{"class":214},[204,55217,55218,55221,55223,55225,55227],{"class":206,"line":9910},[204,55219,55220],{"class":263},"      border-radius",[204,55222,51523],{"class":214},[204,55224,659],{"class":263},[204,55226,51578],{"class":210},[204,55228,1377],{"class":214},[204,55230,55231],{"class":206,"line":9931},[204,55232,2273],{"class":214},[204,55234,55235],{"class":206,"line":9937},[204,55236,2486],{"emptyLinePlaceholder":135},[204,55238,55239,55242],{"class":206,"line":9951},[204,55240,55241],{"class":2049},"    .activate",[204,55243,15659],{"class":214},[204,55245,55246,55248,55250,55253],{"class":206,"line":9957},[204,55247,54970],{"class":263},[204,55249,51523],{"class":214},[204,55251,55252],{"class":263},"#f7f7f7",[204,55254,1377],{"class":214},[204,55256,55257],{"class":206,"line":9984},[204,55258,2273],{"class":214},[204,55260,55261,55263,55265],{"class":206,"line":9993},[204,55262,52503],{"class":214},[204,55264,5213],{"class":51386},[204,55266,51393],{"class":214},[204,55268,55269,55271,55273],{"class":206,"line":9999},[204,55270,51871],{"class":214},[204,55272,51420],{"class":51386},[204,55274,51393],{"class":214},[204,55276,55277],{"class":206,"line":10007},[204,55278,2486],{"emptyLinePlaceholder":135},[204,55280,55281,55283,55285],{"class":206,"line":10012},[204,55282,1123],{"class":214},[204,55284,51886],{"class":51386},[204,55286,51393],{"class":214},[204,55288,55289,55291,55293,55295,55297,55299],{"class":206,"line":16691},[204,55290,52230],{"class":214},[204,55292,51697],{"class":51386},[204,55294,53572],{"class":2049},[204,55296,260],{"class":214},[204,55298,53577],{"class":319},[204,55300,51393],{"class":214},[204,55302,55303,55305,55307,55309,55311,55314],{"class":206,"line":16697},[204,55304,51427],{"class":214},[204,55306,51697],{"class":51386},[204,55308,53572],{"class":2049},[204,55310,260],{"class":214},[204,55312,55313],{"class":319},"\"slider-wrapper\"",[204,55315,51393],{"class":214},[204,55317,55318,55321,55323,55326,55328,55331,55334,55336,55338],{"class":206,"line":16720},[204,55319,55320],{"class":214},"      \u003C",[204,55322,23],{"class":51386},[204,55324,55325],{"class":2049}," src",[204,55327,260],{"class":214},[204,55329,55330],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[204,55332,55333],{"class":2049}," alt",[204,55335,260],{"class":214},[204,55337,7739],{"class":319},[204,55339,51393],{"class":214},[204,55341,55342,55344,55346],{"class":206,"line":16726},[204,55343,51862],{"class":214},[204,55345,51697],{"class":51386},[204,55347,51393],{"class":214},[204,55349,55350,55352,55354,55356,55358,55361],{"class":206,"line":16749},[204,55351,51427],{"class":214},[204,55353,51697],{"class":51386},[204,55355,53572],{"class":2049},[204,55357,260],{"class":214},[204,55359,55360],{"class":319},"\"slider-footer\"",[204,55362,51393],{"class":214},[204,55364,55365,55367,55369,55372,55374],{"class":206,"line":16763},[204,55366,55320],{"class":214},[204,55368,19],{"class":51386},[204,55370,55371],{"class":214},">对人类来说会不会太超前了?\u003C\u002F",[204,55373,19],{"class":51386},[204,55375,51393],{"class":214},[204,55377,55378,55380,55382],{"class":206,"line":16783},[204,55379,55320],{"class":214},[204,55381,68],{"class":51386},[204,55383,51393],{"class":214},[204,55385,55386,55389,55391,55393,55395,55398,55401,55403],{"class":206,"line":16789},[204,55387,55388],{"class":214},"        \u003C",[204,55390,71],{"class":51386},[204,55392,53572],{"class":2049},[204,55394,260],{"class":214},[204,55396,55397],{"class":319},"\"activate\"",[204,55399,55400],{"class":214},">\u003C\u002F",[204,55402,71],{"class":51386},[204,55404,51393],{"class":214},[204,55406,55407,55409,55411,55413,55415],{"class":206,"line":16800},[204,55408,55388],{"class":214},[204,55410,71],{"class":51386},[204,55412,55400],{"class":214},[204,55414,71],{"class":51386},[204,55416,51393],{"class":214},[204,55418,55419,55421,55423,55425,55427],{"class":206,"line":16823},[204,55420,55388],{"class":214},[204,55422,71],{"class":51386},[204,55424,55400],{"class":214},[204,55426,71],{"class":51386},[204,55428,51393],{"class":214},[204,55430,55431,55433,55435,55437,55439],{"class":206,"line":16845},[204,55432,55388],{"class":214},[204,55434,71],{"class":51386},[204,55436,55400],{"class":214},[204,55438,71],{"class":51386},[204,55440,51393],{"class":214},[204,55442,55443,55445,55447,55449,55451],{"class":206,"line":16850},[204,55444,55388],{"class":214},[204,55446,71],{"class":51386},[204,55448,55400],{"class":214},[204,55450,71],{"class":51386},[204,55452,51393],{"class":214},[204,55454,55455,55457,55459,55461,55463],{"class":206,"line":16856},[204,55456,55388],{"class":214},[204,55458,71],{"class":51386},[204,55460,55400],{"class":214},[204,55462,71],{"class":51386},[204,55464,51393],{"class":214},[204,55466,55467,55469,55471,55473,55475],{"class":206,"line":16870},[204,55468,55388],{"class":214},[204,55470,71],{"class":51386},[204,55472,55400],{"class":214},[204,55474,71],{"class":51386},[204,55476,51393],{"class":214},[204,55478,55479,55481,55483,55485,55487],{"class":206,"line":16883},[204,55480,55388],{"class":214},[204,55482,71],{"class":51386},[204,55484,55400],{"class":214},[204,55486,71],{"class":51386},[204,55488,51393],{"class":214},[204,55490,55491,55494,55496],{"class":206,"line":16888},[204,55492,55493],{"class":214},"      \u003C\u002F",[204,55495,68],{"class":51386},[204,55497,51393],{"class":214},[204,55499,55500,55502,55504],{"class":206,"line":16902},[204,55501,51862],{"class":214},[204,55503,51697],{"class":51386},[204,55505,51393],{"class":214},[204,55507,55508,55510,55512],{"class":206,"line":16907},[204,55509,52503],{"class":214},[204,55511,51697],{"class":51386},[204,55513,51393],{"class":214},[204,55515,55516,55518,55520],{"class":206,"line":16913},[204,55517,52230],{"class":214},[204,55519,51899],{"class":51386},[204,55521,51393],{"class":214},[204,55523,55524,55526,55529,55531],{"class":206,"line":16918},[204,55525,11308],{"class":210},[204,55527,55528],{"class":263}," arrImage",[204,55530,13651],{"class":210},[204,55532,55533],{"class":214}," [\n",[204,55535,55536,55539,55542,55545,55548,55551,55554],{"class":206,"line":16932},[204,55537,55538],{"class":214},"      { url: ",[204,55540,55541],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[204,55543,55544],{"class":214},", title: ",[204,55546,55547],{"class":319},"'对人类来说会不会太超前了?'",[204,55549,55550],{"class":214},", color: ",[204,55552,55553],{"class":319},"'rgba(100,67,68)'",[204,55555,55556],{"class":214}," },\n",[204,55558,55559,55561,55564,55566,55569,55571,55574],{"class":206,"line":16937},[204,55560,55538],{"class":214},[204,55562,55563],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[204,55565,55544],{"class":214},[204,55567,55568],{"class":319},"'开启剑与雪的黑暗传说!'",[204,55570,55550],{"class":214},[204,55572,55573],{"class":319},"'rgba(43,35,26)'",[204,55575,55556],{"class":214},[204,55577,55578,55580,55583,55585,55588,55590,55593],{"class":206,"line":16942},[204,55579,55538],{"class":214},[204,55581,55582],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[204,55584,55544],{"class":214},[204,55586,55587],{"class":319},"'真正的jo厨出现了!'",[204,55589,55550],{"class":214},[204,55591,55592],{"class":319},"'rgba(36,31,33)'",[204,55594,55556],{"class":214},[204,55596,55597,55599,55602,55604,55607,55609,55612],{"class":206,"line":16956},[204,55598,55538],{"class":214},[204,55600,55601],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[204,55603,55544],{"class":214},[204,55605,55606],{"class":319},"'李玉刚:让世界通过b站看到东方大国文化'",[204,55608,55550],{"class":214},[204,55610,55611],{"class":319},"'rgba(139,98,66)'",[204,55613,55556],{"class":214},[204,55615,55616,55618,55621,55623,55626,55628,55631],{"class":206,"line":16968},[204,55617,55538],{"class":214},[204,55619,55620],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[204,55622,55544],{"class":214},[204,55624,55625],{"class":319},"'快来分享你的寒假日常吧'",[204,55627,55550],{"class":214},[204,55629,55630],{"class":319},"'rgba(67,90,92)'",[204,55632,55556],{"class":214},[204,55634,55635,55637,55640,55642,55645,55647,55650],{"class":206,"line":16973},[204,55636,55538],{"class":214},[204,55638,55639],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[204,55641,55544],{"class":214},[204,55643,55644],{"class":319},"'哔哩哔哩小年YEAR'",[204,55646,55550],{"class":214},[204,55648,55649],{"class":319},"'rgba(166,131,143)'",[204,55651,55556],{"class":214},[204,55653,55654,55656,55659,55661,55664,55666,55669],{"class":206,"line":16986},[204,55655,55538],{"class":214},[204,55657,55658],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[204,55660,55544],{"class":214},[204,55662,55663],{"class":319},"'一站式解决你的电脑配置问题'",[204,55665,55550],{"class":214},[204,55667,55668],{"class":319},"'rgba(53,29,25)'",[204,55670,55556],{"class":214},[204,55672,55673,55675,55678,55680,55683,55685,55688],{"class":206,"line":16991},[204,55674,55538],{"class":214},[204,55676,55677],{"class":319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[204,55679,55544],{"class":214},[204,55681,55682],{"class":319},"'谁不想和小猫咪贴贴呢?'",[204,55684,55550],{"class":214},[204,55686,55687],{"class":319},"'rgba(99,72,114)'",[204,55689,55690],{"class":214}," }\n",[204,55692,55693],{"class":206,"line":16996},[204,55694,53195],{"class":214},[204,55696,55697,55699,55702,55704,55706,55708,55710,55713],{"class":206,"line":17001},[204,55698,11308],{"class":210},[204,55700,55701],{"class":263}," img",[204,55703,13651],{"class":210},[204,55705,54482],{"class":214},[204,55707,54485],{"class":2049},[204,55709,215],{"class":214},[204,55711,55712],{"class":319},"'.slider-wrapper img'",[204,55714,221],{"class":214},[204,55716,55717,55719,55721,55723,55725,55727,55729,55732],{"class":206,"line":17014},[204,55718,11308],{"class":210},[204,55720,6912],{"class":263},[204,55722,13651],{"class":210},[204,55724,54482],{"class":214},[204,55726,54485],{"class":2049},[204,55728,215],{"class":214},[204,55730,55731],{"class":319},"'.slider-footer p'",[204,55733,221],{"class":214},[204,55735,55736,55738,55741,55743,55745,55747,55749,55752],{"class":206,"line":17019},[204,55737,11308],{"class":210},[204,55739,55740],{"class":263}," color",[204,55742,13651],{"class":210},[204,55744,54482],{"class":214},[204,55746,54485],{"class":2049},[204,55748,215],{"class":214},[204,55750,55751],{"class":319},"'.slider-footer'",[204,55753,221],{"class":214},[204,55755,55756,55758,55761,55763,55765,55768,55770,55773],{"class":206,"line":32719},[204,55757,11308],{"class":210},[204,55759,55760],{"class":263}," lis",[204,55762,13651],{"class":210},[204,55764,54482],{"class":214},[204,55766,55767],{"class":2049},"querySelectorAll",[204,55769,215],{"class":214},[204,55771,55772],{"class":319},"'.slider-footer ul li'",[204,55774,221],{"class":214},[204,55776,55777,55779,55781,55783],{"class":206,"line":32725},[204,55778,52305],{"class":210},[204,55780,9525],{"class":214},[204,55782,260],{"class":210},[204,55784,55785],{"class":263}," 1\n",[204,55787,55788,55790,55793,55795,55797,55799,55801],{"class":206,"line":32731},[204,55789,52305],{"class":210},[204,55791,55792],{"class":214}," timer ",[204,55794,260],{"class":210},[204,55796,54530],{"class":2049},[204,55798,215],{"class":214},[204,55800,54535],{"class":210},[204,55802,54538],{"class":214},[204,55804,55805,55808,55810],{"class":206,"line":32737},[204,55806,55807],{"class":214},"      img.src ",[204,55809,260],{"class":210},[204,55811,55812],{"class":214}," arrImage[i].url\n",[204,55814,55815,55818,55820],{"class":206,"line":32743},[204,55816,55817],{"class":214},"      p.innerHTML ",[204,55819,260],{"class":210},[204,55821,55822],{"class":214}," arrImage[i].title\n",[204,55824,55825,55828,55830],{"class":206,"line":32754},[204,55826,55827],{"class":214},"      color.style.backgroundColor ",[204,55829,260],{"class":210},[204,55831,55832],{"class":214}," arrImage[i].color\n",[204,55834,55835],{"class":206,"line":32760},[204,55836,55837],{"class":273},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[204,55839,55840],{"class":206,"line":32780},[204,55841,55842],{"class":273},"      \u002F\u002F li.classList.add('activate')\n",[204,55844,55845],{"class":206,"line":32786},[204,55846,55847],{"class":273},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[204,55849,55850],{"class":206,"line":32797},[204,55851,55852],{"class":273},"      \u002F\u002F lis[i].classList.remove('activate')\n",[204,55854,55855,55858,55860,55862,55865,55868,55871,55873,55876],{"class":206,"line":32803},[204,55856,55857],{"class":214},"      document.",[204,55859,54485],{"class":2049},[204,55861,215],{"class":214},[204,55863,55864],{"class":319},"'.activate'",[204,55866,55867],{"class":214},")?.classList.",[204,55869,55870],{"class":2049},"toggle",[204,55872,215],{"class":214},[204,55874,55875],{"class":319},"'activate'",[204,55877,221],{"class":214},[204,55879,55880,55883,55885,55887,55889],{"class":206,"line":32809},[204,55881,55882],{"class":214},"      lis[i].classList.",[204,55884,5421],{"class":2049},[204,55886,215],{"class":214},[204,55888,55875],{"class":319},[204,55890,221],{"class":214},[204,55892,55893],{"class":206,"line":32815},[204,55894,2486],{"emptyLinePlaceholder":135},[204,55896,55897,55900,55902,55904,55906,55908,55910,55912,55915],{"class":206,"line":32821},[204,55898,55899],{"class":214},"      i ",[204,55901,260],{"class":210},[204,55903,54569],{"class":214},[204,55905,694],{"class":210},[204,55907,25205],{"class":263},[204,55909,13801],{"class":214},[204,55911,541],{"class":210},[204,55913,55914],{"class":214}," arrImage.",[204,55916,55917],{"class":263},"length\n",[204,55919,55920],{"class":206,"line":32827},[204,55921,2486],{"emptyLinePlaceholder":135},[204,55923,55924,55926,55928],{"class":206,"line":32833},[204,55925,54621],{"class":214},[204,55927,6497],{"class":263},[204,55929,221],{"class":214},[204,55931,55932,55934,55936],{"class":206,"line":32839},[204,55933,52503],{"class":214},[204,55935,51899],{"class":51386},[204,55937,51393],{"class":214},[204,55939,55940,55942,55944],{"class":206,"line":32859},[204,55941,51871],{"class":214},[204,55943,51886],{"class":51386},[204,55945,51393],{"class":214},[204,55947,55948],{"class":206,"line":32865},[204,55949,2486],{"emptyLinePlaceholder":135},[204,55951,55952,55954,55956],{"class":206,"line":32881},[204,55953,51871],{"class":214},[204,55955,50721],{"class":51386},[204,55957,51393],{"class":214},[19,55959,55960],{},[23,55961],{"alt":125,"src":55962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,55964,55965],{},"?.就是短路保护,确保输出正常进行",[19,55967,55968],{},"不要忘记取余%,有时候可以用",[19,55970,55971],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[161,55973,55974],{"start":126},[71,55975,55976],{},"法2",[196,55978,55980],{"className":50719,"code":55979,"language":50721,"meta":125,"style":125},"\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",[81,55981,55982,55992,56006,56010,56018,56032,56052,56064,56072,56078,56088,56098,56102,56106,56112,56122,56126,56130,56136,56146,56158,56170,56184,56188,56192,56198,56208,56218,56228,56240,56252,56262,56266,56270,56278,56288,56300,56312,56324,56328,56332,56338,56348,56360,56372,56382,56392,56402,56414,56426,56430,56434,56442,56454,56466,56492,56504,56508,56512,56518,56528,56532,56540,56548,56552,56560,56574,56588,56608,56616,56630,56642,56650,56668,56680,56692,56704,56716,56728,56740,56752,56760,56768,56776,56784,56795,56811,56827,56843,56859,56875,56891,56907,56923,56927,56932,56950,56968,56978,56983,56988,56999,57005,57020,57029,57033,57038,57047,57052,57061,57066,57071,57076,57099,57129,57133,57141,57145,57153,57161,57165],{"__ignoreMap":125},[204,55983,55984,55986,55988,55990],{"class":206,"line":207},[204,55985,51383],{"class":214},[204,55987,51387],{"class":51386},[204,55989,51390],{"class":2049},[204,55991,51393],{"class":214},[204,55993,55994,55996,55998,56000,56002,56004],{"class":206,"line":126},[204,55995,1123],{"class":214},[204,55997,50721],{"class":51386},[204,55999,51402],{"class":2049},[204,56001,260],{"class":214},[204,56003,51407],{"class":319},[204,56005,51393],{"class":214},[204,56007,56008],{"class":206,"line":131},[204,56009,2486],{"emptyLinePlaceholder":135},[204,56011,56012,56014,56016],{"class":206,"line":1281},[204,56013,1123],{"class":214},[204,56015,51420],{"class":51386},[204,56017,51393],{"class":214},[204,56019,56020,56022,56024,56026,56028,56030],{"class":206,"line":1287},[204,56021,52230],{"class":214},[204,56023,51430],{"class":51386},[204,56025,51433],{"class":2049},[204,56027,260],{"class":214},[204,56029,51438],{"class":319},[204,56031,51393],{"class":214},[204,56033,56034,56036,56038,56040,56042,56044,56046,56048,56050],{"class":206,"line":1301},[204,56035,52230],{"class":214},[204,56037,51430],{"class":51386},[204,56039,15007],{"class":2049},[204,56041,260],{"class":214},[204,56043,51477],{"class":319},[204,56045,51457],{"class":2049},[204,56047,260],{"class":214},[204,56049,51484],{"class":319},[204,56051,51393],{"class":214},[204,56053,56054,56056,56058,56060,56062],{"class":206,"line":1307},[204,56055,52230],{"class":214},[204,56057,51493],{"class":51386},[204,56059,51496],{"class":214},[204,56061,51493],{"class":51386},[204,56063,51393],{"class":214},[204,56065,56066,56068,56070],{"class":206,"line":1398},[204,56067,52230],{"class":214},[204,56069,5213],{"class":51386},[204,56071,51393],{"class":214},[204,56073,56074,56076],{"class":206,"line":1404},[204,56075,6490],{"class":51386},[204,56077,15659],{"class":214},[204,56079,56080,56082,56084,56086],{"class":206,"line":1416},[204,56081,54781],{"class":263},[204,56083,51523],{"class":214},[204,56085,405],{"class":263},[204,56087,1377],{"class":214},[204,56089,56090,56092,56094,56096],{"class":206,"line":1698},[204,56091,54792],{"class":263},[204,56093,51523],{"class":214},[204,56095,405],{"class":263},[204,56097,1377],{"class":214},[204,56099,56100],{"class":206,"line":1703},[204,56101,2273],{"class":214},[204,56103,56104],{"class":206,"line":1709},[204,56105,2486],{"emptyLinePlaceholder":135},[204,56107,56108,56110],{"class":206,"line":1714},[204,56109,54811],{"class":51386},[204,56111,15659],{"class":214},[204,56113,56114,56116,56118,56120],{"class":206,"line":1728},[204,56115,54818],{"class":263},[204,56117,51523],{"class":214},[204,56119,54823],{"class":263},[204,56121,1377],{"class":214},[204,56123,56124],{"class":206,"line":1733},[204,56125,2273],{"class":214},[204,56127,56128],{"class":206,"line":1739},[204,56129,2486],{"emptyLinePlaceholder":135},[204,56131,56132,56134],{"class":206,"line":1760},[204,56133,54838],{"class":2049},[204,56135,15659],{"class":214},[204,56137,56138,56140,56142,56144],{"class":206,"line":1765},[204,56139,54845],{"class":263},[204,56141,51523],{"class":214},[204,56143,54850],{"class":263},[204,56145,1377],{"class":214},[204,56147,56148,56150,56152,56154,56156],{"class":206,"line":1779},[204,56149,54857],{"class":263},[204,56151,51523],{"class":214},[204,56153,54862],{"class":263},[204,56155,51578],{"class":210},[204,56157,1377],{"class":214},[204,56159,56160,56162,56164,56166,56168],{"class":206,"line":1784},[204,56161,54871],{"class":263},[204,56163,51523],{"class":214},[204,56165,1625],{"class":263},[204,56167,51578],{"class":210},[204,56169,1377],{"class":214},[204,56171,56172,56174,56176,56178,56180,56182],{"class":206,"line":1813},[204,56173,54792],{"class":263},[204,56175,51523],{"class":214},[204,56177,524],{"class":263},[204,56179,51578],{"class":210},[204,56181,51642],{"class":263},[204,56183,1377],{"class":214},[204,56185,56186],{"class":206,"line":1818},[204,56187,2273],{"class":214},[204,56189,56190],{"class":206,"line":1835},[204,56191,2486],{"emptyLinePlaceholder":135},[204,56193,56194,56196],{"class":206,"line":1840},[204,56195,54906],{"class":2049},[204,56197,15659],{"class":214},[204,56199,56200,56202,56204,56206],{"class":206,"line":1845},[204,56201,54845],{"class":263},[204,56203,51523],{"class":214},[204,56205,54917],{"class":263},[204,56207,1377],{"class":214},[204,56209,56210,56212,56214,56216],{"class":206,"line":1850},[204,56211,54924],{"class":263},[204,56213,51523],{"class":214},[204,56215,405],{"class":263},[204,56217,1377],{"class":214},[204,56219,56220,56222,56224,56226],{"class":206,"line":1864},[204,56221,54935],{"class":263},[204,56223,51523],{"class":214},[204,56225,405],{"class":263},[204,56227,1377],{"class":214},[204,56229,56230,56232,56234,56236,56238],{"class":206,"line":1869},[204,56231,54857],{"class":263},[204,56233,51523],{"class":214},[204,56235,524],{"class":263},[204,56237,541],{"class":210},[204,56239,1377],{"class":214},[204,56241,56242,56244,56246,56248,56250],{"class":206,"line":2663},[204,56243,54871],{"class":263},[204,56245,51523],{"class":214},[204,56247,788],{"class":263},[204,56249,541],{"class":210},[204,56251,1377],{"class":214},[204,56253,56254,56256,56258,56260],{"class":206,"line":2677},[204,56255,54970],{"class":263},[204,56257,51523],{"class":214},[204,56259,54975],{"class":263},[204,56261,1377],{"class":214},[204,56263,56264],{"class":206,"line":2685},[204,56265,2273],{"class":214},[204,56267,56268],{"class":206,"line":2690},[204,56269,2486],{"emptyLinePlaceholder":135},[204,56271,56272,56274,56276],{"class":206,"line":2696},[204,56273,54906],{"class":2049},[204,56275,6912],{"class":51386},[204,56277,15659],{"class":214},[204,56279,56280,56282,56284,56286],{"class":206,"line":2702},[204,56281,54845],{"class":263},[204,56283,51523],{"class":214},[204,56285,54917],{"class":263},[204,56287,1377],{"class":214},[204,56289,56290,56292,56294,56296,56298],{"class":206,"line":2707},[204,56291,55008],{"class":263},[204,56293,51523],{"class":214},[204,56295,1114],{"class":263},[204,56297,51578],{"class":210},[204,56299,1377],{"class":214},[204,56301,56302,56304,56306,56308,56310],{"class":206,"line":8035},[204,56303,54924],{"class":263},[204,56305,51523],{"class":214},[204,56307,913],{"class":263},[204,56309,51578],{"class":210},[204,56311,1377],{"class":214},[204,56313,56314,56316,56318,56320,56322],{"class":206,"line":8059},[204,56315,55033],{"class":263},[204,56317,51523],{"class":214},[204,56319,532],{"class":263},[204,56321,51578],{"class":210},[204,56323,1377],{"class":214},[204,56325,56326],{"class":206,"line":8064},[204,56327,2273],{"class":214},[204,56329,56330],{"class":206,"line":8070},[204,56331,2486],{"emptyLinePlaceholder":135},[204,56333,56334,56336],{"class":206,"line":8097},[204,56335,55054],{"class":51386},[204,56337,15659],{"class":214},[204,56339,56340,56342,56344,56346],{"class":206,"line":8102},[204,56341,54845],{"class":263},[204,56343,51523],{"class":214},[204,56345,54917],{"class":263},[204,56347,1377],{"class":214},[204,56349,56350,56352,56354,56356,56358],{"class":206,"line":8108},[204,56351,55033],{"class":263},[204,56353,51523],{"class":214},[204,56355,994],{"class":263},[204,56357,51578],{"class":210},[204,56359,1377],{"class":214},[204,56361,56362,56364,56366,56368,56370],{"class":206,"line":8120},[204,56363,54924],{"class":263},[204,56365,51523],{"class":214},[204,56367,913],{"class":263},[204,56369,51578],{"class":210},[204,56371,1377],{"class":214},[204,56373,56374,56376,56378,56380],{"class":206,"line":8132},[204,56375,55095],{"class":263},[204,56377,51523],{"class":214},[204,56379,51563],{"class":263},[204,56381,1377],{"class":214},[204,56383,56384,56386,56388,56390],{"class":206,"line":8144},[204,56385,55106],{"class":263},[204,56387,51523],{"class":214},[204,56389,51754],{"class":263},[204,56391,1377],{"class":214},[204,56393,56394,56396,56398,56400],{"class":206,"line":9803},[204,56395,54845],{"class":263},[204,56397,51523],{"class":214},[204,56399,54917],{"class":263},[204,56401,1377],{"class":214},[204,56403,56404,56406,56408,56410,56412],{"class":206,"line":9828},[204,56405,54857],{"class":263},[204,56407,51523],{"class":214},[204,56409,4078],{"class":263},[204,56411,51578],{"class":210},[204,56413,1377],{"class":214},[204,56415,56416,56418,56420,56422,56424],{"class":206,"line":9851},[204,56417,54871],{"class":263},[204,56419,51523],{"class":214},[204,56421,913],{"class":263},[204,56423,51578],{"class":210},[204,56425,1377],{"class":214},[204,56427,56428],{"class":206,"line":9875},[204,56429,2273],{"class":214},[204,56431,56432],{"class":206,"line":9880},[204,56433,2486],{"emptyLinePlaceholder":135},[204,56435,56436,56438,56440],{"class":206,"line":9885},[204,56437,55054],{"class":51386},[204,56439,55161],{"class":51386},[204,56441,15659],{"class":214},[204,56443,56444,56446,56448,56450,56452],{"class":206,"line":9890},[204,56445,54857],{"class":263},[204,56447,51523],{"class":214},[204,56449,913],{"class":263},[204,56451,51578],{"class":210},[204,56453,1377],{"class":214},[204,56455,56456,56458,56460,56462,56464],{"class":206,"line":9899},[204,56457,54871],{"class":263},[204,56459,51523],{"class":214},[204,56461,913],{"class":263},[204,56463,51578],{"class":210},[204,56465,1377],{"class":214},[204,56467,56468,56470,56472,56474,56476,56478,56480,56482,56484,56486,56488,56490],{"class":206,"line":9904},[204,56469,54970],{"class":263},[204,56471,51523],{"class":214},[204,56473,55196],{"class":263},[204,56475,215],{"class":214},[204,56477,405],{"class":263},[204,56479,12522],{"class":214},[204,56481,405],{"class":263},[204,56483,12522],{"class":214},[204,56485,405],{"class":263},[204,56487,12522],{"class":214},[204,56489,55213],{"class":263},[204,56491,2805],{"class":214},[204,56493,56494,56496,56498,56500,56502],{"class":206,"line":9910},[204,56495,55220],{"class":263},[204,56497,51523],{"class":214},[204,56499,659],{"class":263},[204,56501,51578],{"class":210},[204,56503,1377],{"class":214},[204,56505,56506],{"class":206,"line":9931},[204,56507,2273],{"class":214},[204,56509,56510],{"class":206,"line":9937},[204,56511,2486],{"emptyLinePlaceholder":135},[204,56513,56514,56516],{"class":206,"line":9951},[204,56515,55241],{"class":2049},[204,56517,15659],{"class":214},[204,56519,56520,56522,56524,56526],{"class":206,"line":9957},[204,56521,54970],{"class":263},[204,56523,51523],{"class":214},[204,56525,55252],{"class":263},[204,56527,1377],{"class":214},[204,56529,56530],{"class":206,"line":9984},[204,56531,2273],{"class":214},[204,56533,56534,56536,56538],{"class":206,"line":9993},[204,56535,52503],{"class":214},[204,56537,5213],{"class":51386},[204,56539,51393],{"class":214},[204,56541,56542,56544,56546],{"class":206,"line":9999},[204,56543,51871],{"class":214},[204,56545,51420],{"class":51386},[204,56547,51393],{"class":214},[204,56549,56550],{"class":206,"line":10007},[204,56551,2486],{"emptyLinePlaceholder":135},[204,56553,56554,56556,56558],{"class":206,"line":10012},[204,56555,1123],{"class":214},[204,56557,51886],{"class":51386},[204,56559,51393],{"class":214},[204,56561,56562,56564,56566,56568,56570,56572],{"class":206,"line":16691},[204,56563,52230],{"class":214},[204,56565,51697],{"class":51386},[204,56567,53572],{"class":2049},[204,56569,260],{"class":214},[204,56571,53577],{"class":319},[204,56573,51393],{"class":214},[204,56575,56576,56578,56580,56582,56584,56586],{"class":206,"line":16697},[204,56577,51427],{"class":214},[204,56579,51697],{"class":51386},[204,56581,53572],{"class":2049},[204,56583,260],{"class":214},[204,56585,55313],{"class":319},[204,56587,51393],{"class":214},[204,56589,56590,56592,56594,56596,56598,56600,56602,56604,56606],{"class":206,"line":16720},[204,56591,55320],{"class":214},[204,56593,23],{"class":51386},[204,56595,55325],{"class":2049},[204,56597,260],{"class":214},[204,56599,55330],{"class":319},[204,56601,55333],{"class":2049},[204,56603,260],{"class":214},[204,56605,7739],{"class":319},[204,56607,51393],{"class":214},[204,56609,56610,56612,56614],{"class":206,"line":16726},[204,56611,51862],{"class":214},[204,56613,51697],{"class":51386},[204,56615,51393],{"class":214},[204,56617,56618,56620,56622,56624,56626,56628],{"class":206,"line":16749},[204,56619,51427],{"class":214},[204,56621,51697],{"class":51386},[204,56623,53572],{"class":2049},[204,56625,260],{"class":214},[204,56627,55360],{"class":319},[204,56629,51393],{"class":214},[204,56631,56632,56634,56636,56638,56640],{"class":206,"line":16763},[204,56633,55320],{"class":214},[204,56635,19],{"class":51386},[204,56637,55371],{"class":214},[204,56639,19],{"class":51386},[204,56641,51393],{"class":214},[204,56643,56644,56646,56648],{"class":206,"line":16783},[204,56645,55320],{"class":214},[204,56647,68],{"class":51386},[204,56649,51393],{"class":214},[204,56651,56652,56654,56656,56658,56660,56662,56664,56666],{"class":206,"line":16789},[204,56653,55388],{"class":214},[204,56655,71],{"class":51386},[204,56657,53572],{"class":2049},[204,56659,260],{"class":214},[204,56661,55397],{"class":319},[204,56663,55400],{"class":214},[204,56665,71],{"class":51386},[204,56667,51393],{"class":214},[204,56669,56670,56672,56674,56676,56678],{"class":206,"line":16800},[204,56671,55388],{"class":214},[204,56673,71],{"class":51386},[204,56675,55400],{"class":214},[204,56677,71],{"class":51386},[204,56679,51393],{"class":214},[204,56681,56682,56684,56686,56688,56690],{"class":206,"line":16823},[204,56683,55388],{"class":214},[204,56685,71],{"class":51386},[204,56687,55400],{"class":214},[204,56689,71],{"class":51386},[204,56691,51393],{"class":214},[204,56693,56694,56696,56698,56700,56702],{"class":206,"line":16845},[204,56695,55388],{"class":214},[204,56697,71],{"class":51386},[204,56699,55400],{"class":214},[204,56701,71],{"class":51386},[204,56703,51393],{"class":214},[204,56705,56706,56708,56710,56712,56714],{"class":206,"line":16850},[204,56707,55388],{"class":214},[204,56709,71],{"class":51386},[204,56711,55400],{"class":214},[204,56713,71],{"class":51386},[204,56715,51393],{"class":214},[204,56717,56718,56720,56722,56724,56726],{"class":206,"line":16856},[204,56719,55388],{"class":214},[204,56721,71],{"class":51386},[204,56723,55400],{"class":214},[204,56725,71],{"class":51386},[204,56727,51393],{"class":214},[204,56729,56730,56732,56734,56736,56738],{"class":206,"line":16870},[204,56731,55388],{"class":214},[204,56733,71],{"class":51386},[204,56735,55400],{"class":214},[204,56737,71],{"class":51386},[204,56739,51393],{"class":214},[204,56741,56742,56744,56746,56748,56750],{"class":206,"line":16883},[204,56743,55388],{"class":214},[204,56745,71],{"class":51386},[204,56747,55400],{"class":214},[204,56749,71],{"class":51386},[204,56751,51393],{"class":214},[204,56753,56754,56756,56758],{"class":206,"line":16888},[204,56755,55493],{"class":214},[204,56757,68],{"class":51386},[204,56759,51393],{"class":214},[204,56761,56762,56764,56766],{"class":206,"line":16902},[204,56763,51862],{"class":214},[204,56765,51697],{"class":51386},[204,56767,51393],{"class":214},[204,56769,56770,56772,56774],{"class":206,"line":16907},[204,56771,52503],{"class":214},[204,56773,51697],{"class":51386},[204,56775,51393],{"class":214},[204,56777,56778,56780,56782],{"class":206,"line":16913},[204,56779,52230],{"class":214},[204,56781,51899],{"class":51386},[204,56783,51393],{"class":214},[204,56785,56786,56788,56791,56793],{"class":206,"line":16918},[204,56787,11308],{"class":210},[204,56789,56790],{"class":263}," sliderData",[204,56792,13651],{"class":210},[204,56794,55533],{"class":214},[204,56796,56797,56799,56801,56803,56805,56807,56809],{"class":206,"line":16932},[204,56798,55538],{"class":214},[204,56800,55541],{"class":319},[204,56802,55544],{"class":214},[204,56804,55547],{"class":319},[204,56806,55550],{"class":214},[204,56808,55553],{"class":319},[204,56810,55556],{"class":214},[204,56812,56813,56815,56817,56819,56821,56823,56825],{"class":206,"line":16937},[204,56814,55538],{"class":214},[204,56816,55563],{"class":319},[204,56818,55544],{"class":214},[204,56820,55568],{"class":319},[204,56822,55550],{"class":214},[204,56824,55573],{"class":319},[204,56826,55556],{"class":214},[204,56828,56829,56831,56833,56835,56837,56839,56841],{"class":206,"line":16942},[204,56830,55538],{"class":214},[204,56832,55582],{"class":319},[204,56834,55544],{"class":214},[204,56836,55587],{"class":319},[204,56838,55550],{"class":214},[204,56840,55592],{"class":319},[204,56842,55556],{"class":214},[204,56844,56845,56847,56849,56851,56853,56855,56857],{"class":206,"line":16956},[204,56846,55538],{"class":214},[204,56848,55601],{"class":319},[204,56850,55544],{"class":214},[204,56852,55606],{"class":319},[204,56854,55550],{"class":214},[204,56856,55611],{"class":319},[204,56858,55556],{"class":214},[204,56860,56861,56863,56865,56867,56869,56871,56873],{"class":206,"line":16968},[204,56862,55538],{"class":214},[204,56864,55620],{"class":319},[204,56866,55544],{"class":214},[204,56868,55625],{"class":319},[204,56870,55550],{"class":214},[204,56872,55630],{"class":319},[204,56874,55556],{"class":214},[204,56876,56877,56879,56881,56883,56885,56887,56889],{"class":206,"line":16973},[204,56878,55538],{"class":214},[204,56880,55639],{"class":319},[204,56882,55544],{"class":214},[204,56884,55644],{"class":319},[204,56886,55550],{"class":214},[204,56888,55649],{"class":319},[204,56890,55556],{"class":214},[204,56892,56893,56895,56897,56899,56901,56903,56905],{"class":206,"line":16986},[204,56894,55538],{"class":214},[204,56896,55658],{"class":319},[204,56898,55544],{"class":214},[204,56900,55663],{"class":319},[204,56902,55550],{"class":214},[204,56904,55668],{"class":319},[204,56906,55556],{"class":214},[204,56908,56909,56911,56913,56915,56917,56919,56921],{"class":206,"line":16991},[204,56910,55538],{"class":214},[204,56912,55677],{"class":319},[204,56914,55544],{"class":214},[204,56916,55682],{"class":319},[204,56918,55550],{"class":214},[204,56920,55687],{"class":319},[204,56922,55690],{"class":214},[204,56924,56925],{"class":206,"line":16996},[204,56926,53195],{"class":214},[204,56928,56929],{"class":206,"line":17001},[204,56930,56931],{"class":273},"    \u002F\u002F 1.获取元素\n",[204,56933,56934,56936,56938,56940,56942,56944,56946,56948],{"class":206,"line":17014},[204,56935,11308],{"class":210},[204,56937,55701],{"class":263},[204,56939,13651],{"class":210},[204,56941,54482],{"class":214},[204,56943,54485],{"class":2049},[204,56945,215],{"class":214},[204,56947,55712],{"class":319},[204,56949,221],{"class":214},[204,56951,56952,56954,56956,56958,56960,56962,56964,56966],{"class":206,"line":17019},[204,56953,11308],{"class":210},[204,56955,6912],{"class":263},[204,56957,13651],{"class":210},[204,56959,54482],{"class":214},[204,56961,54485],{"class":2049},[204,56963,215],{"class":214},[204,56965,55731],{"class":319},[204,56967,221],{"class":214},[204,56969,56970,56972,56974,56976],{"class":206,"line":32719},[204,56971,52305],{"class":210},[204,56973,9525],{"class":214},[204,56975,260],{"class":210},[204,56977,47419],{"class":263},[204,56979,56980],{"class":206,"line":32725},[204,56981,56982],{"class":273},"    \u002F\u002F 2.开启定时器\n",[204,56984,56985],{"class":206,"line":32731},[204,56986,56987],{"class":273},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[204,56989,56990,56993,56995,56997],{"class":206,"line":32737},[204,56991,56992],{"class":2049},"    setInterval",[204,56994,215],{"class":214},[204,56996,54535],{"class":210},[204,56998,54538],{"class":214},[204,57000,57001,57003],{"class":206,"line":32743},[204,57002,54543],{"class":214},[204,57004,2788],{"class":210},[204,57006,57007,57009,57011,57013,57016,57018],{"class":206,"line":32754},[204,57008,54566],{"class":210},[204,57010,54569],{"class":214},[204,57012,1796],{"class":210},[204,57014,57015],{"class":214}," sliderData.",[204,57017,52054],{"class":263},[204,57019,12529],{"class":214},[204,57021,57022,57025,57027],{"class":206,"line":32760},[204,57023,57024],{"class":214},"        i ",[204,57026,260],{"class":210},[204,57028,47419],{"class":263},[204,57030,57031],{"class":206,"line":32780},[204,57032,52484],{"class":214},[204,57034,57035],{"class":206,"line":32786},[204,57036,57037],{"class":273},"      \u002F\u002F 更换图片路径\n",[204,57039,57040,57042,57044],{"class":206,"line":32797},[204,57041,55807],{"class":214},[204,57043,260],{"class":210},[204,57045,57046],{"class":214}," sliderData[i].url\n",[204,57048,57049],{"class":206,"line":32803},[204,57050,57051],{"class":273},"      \u002F\u002F 把文字写到p里面\n",[204,57053,57054,57056,57058],{"class":206,"line":32809},[204,57055,55817],{"class":214},[204,57057,260],{"class":210},[204,57059,57060],{"class":214}," sliderData[i].title\n",[204,57062,57063],{"class":206,"line":32815},[204,57064,57065],{"class":273},"      \u002F\u002F 小圆点\n",[204,57067,57068],{"class":206,"line":32821},[204,57069,57070],{"class":273},"      \u002F\u002F 先删除以前的active\n",[204,57072,57073],{"class":206,"line":32827},[204,57074,57075],{"class":273},"      \u002F\u002F 只让当前li添加active\n",[204,57077,57078,57080,57082,57084,57087,57090,57093,57095,57097],{"class":206,"line":32833},[204,57079,55857],{"class":214},[204,57081,54485],{"class":2049},[204,57083,215],{"class":214},[204,57085,57086],{"class":319},"'.slider-footer .activate'",[204,57088,57089],{"class":214},").classList.",[204,57091,57092],{"class":2049},"remove",[204,57094,215],{"class":214},[204,57096,55875],{"class":319},[204,57098,221],{"class":214},[204,57100,57101,57103,57105,57107,57110,57112,57114,57116,57119,57121,57123,57125,57127],{"class":206,"line":32839},[204,57102,55857],{"class":214},[204,57104,54485],{"class":2049},[204,57106,215],{"class":214},[204,57108,57109],{"class":319},"`.slider-footer ul li:nth-child(${",[204,57111,654],{"class":214},[204,57113,45652],{"class":210},[204,57115,25205],{"class":263},[204,57117,57118],{"class":319},"})`",[204,57120,57089],{"class":214},[204,57122,5421],{"class":2049},[204,57124,215],{"class":214},[204,57126,55875],{"class":319},[204,57128,221],{"class":214},[204,57130,57131],{"class":206,"line":32859},[204,57132,2486],{"emptyLinePlaceholder":135},[204,57134,57135,57137,57139],{"class":206,"line":32865},[204,57136,54621],{"class":214},[204,57138,6497],{"class":263},[204,57140,221],{"class":214},[204,57142,57143],{"class":206,"line":32881},[204,57144,2486],{"emptyLinePlaceholder":135},[204,57146,57147,57149,57151],{"class":206,"line":32887},[204,57148,52503],{"class":214},[204,57150,51899],{"class":51386},[204,57152,51393],{"class":214},[204,57154,57155,57157,57159],{"class":206,"line":32901},[204,57156,51871],{"class":214},[204,57158,51886],{"class":51386},[204,57160,51393],{"class":214},[204,57162,57163],{"class":206,"line":32907},[204,57164,2486],{"emptyLinePlaceholder":135},[204,57166,57167,57169,57171],{"class":206,"line":32922},[204,57168,51871],{"class":214},[204,57170,50721],{"class":51386},[204,57172,51393],{"class":214},[49,57174,57176],{"id":57175},"_317-重要知识点","3.1.7 重要知识点",[19,57178,57179,57180],{},"浏览器在渲染文本时， ",[30,57181,57182],{},"没有空格或换行符就没有“断行点”",[19,57184,57185],{},[23,57186],{"alt":125,"src":57187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57189,57190],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57192,57193],{},[23,57194],{"alt":125,"src":57195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57197,57198],{},[23,57199],{"alt":125,"src":57200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57202,57204],{"id":57203},"_32-dom事件基础","3.2 DOM事件基础",[49,57206,57208],{"id":57207},"_321-事件监听","3.2.1 事件监听",[19,57210,57211],{},[23,57212],{"alt":125,"src":57213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57215,57216],{},"事件监听有响应的发生",[19,57218,57219],{},[23,57220],{"alt":125,"src":57221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57223,57224],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57226,57227],{},"对于有名函数,要执行的函数名后边不要加()",[49,57229,57231],{"id":57230},"_322-随机点名案例","3.2.2 随机点名案例",[196,57233,57235],{"className":50719,"code":57234,"language":50721,"meta":125,"style":125},"\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",[81,57236,57237,57247,57261,57265,57273,57287,57307,57319,57327,57333,57343,57353,57357,57361,57368,57379,57383,57387,57393,57405,57419,57429,57441,57454,57458,57462,57469,57473,57486,57498,57510,57514,57518,57522,57529,57539,57543,57547,57556,57568,57580,57595,57599,57607,57615,57619,57627,57640,57654,57667,57687,57695,57710,57730,57750,57758,57762,57770,57775,57811,57831,57836,57855,57860,57871,57876,57887,57892,57911,57926,57931,57957,57967,57976,57981,57997,58002,58007,58012,58027,58031,58035,58040,58059,58076,58084,58089,58104,58108,58112,58120,58128,58132],{"__ignoreMap":125},[204,57238,57239,57241,57243,57245],{"class":206,"line":207},[204,57240,51383],{"class":214},[204,57242,51387],{"class":51386},[204,57244,51390],{"class":2049},[204,57246,51393],{"class":214},[204,57248,57249,57251,57253,57255,57257,57259],{"class":206,"line":126},[204,57250,1123],{"class":214},[204,57252,50721],{"class":51386},[204,57254,51402],{"class":2049},[204,57256,260],{"class":214},[204,57258,51407],{"class":319},[204,57260,51393],{"class":214},[204,57262,57263],{"class":206,"line":131},[204,57264,2486],{"emptyLinePlaceholder":135},[204,57266,57267,57269,57271],{"class":206,"line":1281},[204,57268,1123],{"class":214},[204,57270,51420],{"class":51386},[204,57272,51393],{"class":214},[204,57274,57275,57277,57279,57281,57283,57285],{"class":206,"line":1287},[204,57276,52230],{"class":214},[204,57278,51430],{"class":51386},[204,57280,51433],{"class":2049},[204,57282,260],{"class":214},[204,57284,51438],{"class":319},[204,57286,51393],{"class":214},[204,57288,57289,57291,57293,57295,57297,57299,57301,57303,57305],{"class":206,"line":1301},[204,57290,52230],{"class":214},[204,57292,51430],{"class":51386},[204,57294,15007],{"class":2049},[204,57296,260],{"class":214},[204,57298,51477],{"class":319},[204,57300,51457],{"class":2049},[204,57302,260],{"class":214},[204,57304,51484],{"class":319},[204,57306,51393],{"class":214},[204,57308,57309,57311,57313,57315,57317],{"class":206,"line":1307},[204,57310,52230],{"class":214},[204,57312,51493],{"class":51386},[204,57314,51496],{"class":214},[204,57316,51493],{"class":51386},[204,57318,51393],{"class":214},[204,57320,57321,57323,57325],{"class":206,"line":1398},[204,57322,52230],{"class":214},[204,57324,5213],{"class":51386},[204,57326,51393],{"class":214},[204,57328,57329,57331],{"class":206,"line":1404},[204,57330,6490],{"class":51386},[204,57332,15659],{"class":214},[204,57334,57335,57337,57339,57341],{"class":206,"line":1416},[204,57336,54792],{"class":263},[204,57338,51523],{"class":214},[204,57340,405],{"class":263},[204,57342,1377],{"class":214},[204,57344,57345,57347,57349,57351],{"class":206,"line":1698},[204,57346,54781],{"class":263},[204,57348,51523],{"class":214},[204,57350,405],{"class":263},[204,57352,1377],{"class":214},[204,57354,57355],{"class":206,"line":1703},[204,57356,2273],{"class":214},[204,57358,57359],{"class":206,"line":1709},[204,57360,2486],{"emptyLinePlaceholder":135},[204,57362,57363,57366],{"class":206,"line":1714},[204,57364,57365],{"class":51386},"    h2",[204,57367,15659],{"class":214},[204,57369,57370,57373,57375,57377],{"class":206,"line":1728},[204,57371,57372],{"class":263},"      text-align",[204,57374,51523],{"class":214},[204,57376,51678],{"class":263},[204,57378,1377],{"class":214},[204,57380,57381],{"class":206,"line":1733},[204,57382,2273],{"class":214},[204,57384,57385],{"class":206,"line":1739},[204,57386,2486],{"emptyLinePlaceholder":135},[204,57388,57389,57391],{"class":206,"line":1760},[204,57390,54838],{"class":2049},[204,57392,15659],{"class":214},[204,57394,57395,57397,57399,57401,57403],{"class":206,"line":1765},[204,57396,54857],{"class":263},[204,57398,51523],{"class":214},[204,57400,1625],{"class":263},[204,57402,51578],{"class":210},[204,57404,1377],{"class":214},[204,57406,57407,57409,57411,57413,57415,57417],{"class":206,"line":1779},[204,57408,54792],{"class":263},[204,57410,51523],{"class":214},[204,57412,869],{"class":263},[204,57414,51578],{"class":210},[204,57416,51642],{"class":263},[204,57418,1377],{"class":214},[204,57420,57421,57423,57425,57427],{"class":206,"line":1784},[204,57422,55095],{"class":263},[204,57424,51523],{"class":214},[204,57426,51563],{"class":263},[204,57428,1377],{"class":214},[204,57430,57431,57433,57435,57437,57439],{"class":206,"line":1813},[204,57432,55008],{"class":263},[204,57434,51523],{"class":214},[204,57436,1038],{"class":263},[204,57438,51578],{"class":210},[204,57440,1377],{"class":214},[204,57442,57443,57446,57448,57450,57452],{"class":206,"line":1818},[204,57444,57445],{"class":263},"      line-height",[204,57447,51523],{"class":214},[204,57449,614],{"class":263},[204,57451,51578],{"class":210},[204,57453,1377],{"class":214},[204,57455,57456],{"class":206,"line":1835},[204,57457,2273],{"class":214},[204,57459,57460],{"class":206,"line":1840},[204,57461,2486],{"emptyLinePlaceholder":135},[204,57463,57464,57467],{"class":206,"line":1845},[204,57465,57466],{"class":2049},"    .qs",[204,57468,15659],{"class":214},[204,57470,57471],{"class":206,"line":1850},[204,57472,2486],{"emptyLinePlaceholder":135},[204,57474,57475,57477,57479,57482,57484],{"class":206,"line":1864},[204,57476,54857],{"class":263},[204,57478,51523],{"class":214},[204,57480,57481],{"class":263},"450",[204,57483,51578],{"class":210},[204,57485,1377],{"class":214},[204,57487,57488,57490,57492,57494,57496],{"class":206,"line":1869},[204,57489,54871],{"class":263},[204,57491,51523],{"class":214},[204,57493,614],{"class":263},[204,57495,51578],{"class":210},[204,57497,1377],{"class":214},[204,57499,57500,57503,57505,57508],{"class":206,"line":2663},[204,57501,57502],{"class":263},"      color",[204,57504,51523],{"class":214},[204,57506,57507],{"class":263},"red",[204,57509,1377],{"class":214},[204,57511,57512],{"class":206,"line":2677},[204,57513,2486],{"emptyLinePlaceholder":135},[204,57515,57516],{"class":206,"line":2685},[204,57517,2273],{"class":214},[204,57519,57520],{"class":206,"line":2690},[204,57521,2486],{"emptyLinePlaceholder":135},[204,57523,57524,57527],{"class":206,"line":2696},[204,57525,57526],{"class":2049},"    .btns",[204,57528,15659],{"class":214},[204,57530,57531,57533,57535,57537],{"class":206,"line":2702},[204,57532,57372],{"class":263},[204,57534,51523],{"class":214},[204,57536,51678],{"class":263},[204,57538,1377],{"class":214},[204,57540,57541],{"class":206,"line":2707},[204,57542,2273],{"class":214},[204,57544,57545],{"class":206,"line":8035},[204,57546,2486],{"emptyLinePlaceholder":135},[204,57548,57549,57551,57554],{"class":206,"line":8059},[204,57550,57526],{"class":2049},[204,57552,57553],{"class":51386}," button",[204,57555,15659],{"class":214},[204,57557,57558,57560,57562,57564,57566],{"class":206,"line":8064},[204,57559,54857],{"class":263},[204,57561,51523],{"class":214},[204,57563,1030],{"class":263},[204,57565,51578],{"class":210},[204,57567,1377],{"class":214},[204,57569,57570,57572,57574,57576,57578],{"class":206,"line":8070},[204,57571,54871],{"class":263},[204,57573,51523],{"class":214},[204,57575,486],{"class":263},[204,57577,51578],{"class":210},[204,57579,1377],{"class":214},[204,57581,57582,57584,57586,57588,57591,57593],{"class":206,"line":8097},[204,57583,54792],{"class":263},[204,57585,51523],{"class":214},[204,57587,405],{"class":263},[204,57589,57590],{"class":263}," 50",[204,57592,51578],{"class":210},[204,57594,1377],{"class":214},[204,57596,57597],{"class":206,"line":8102},[204,57598,2273],{"class":214},[204,57600,57601,57603,57605],{"class":206,"line":8108},[204,57602,52503],{"class":214},[204,57604,5213],{"class":51386},[204,57606,51393],{"class":214},[204,57608,57609,57611,57613],{"class":206,"line":8120},[204,57610,51871],{"class":214},[204,57612,51420],{"class":51386},[204,57614,51393],{"class":214},[204,57616,57617],{"class":206,"line":8132},[204,57618,2486],{"emptyLinePlaceholder":135},[204,57620,57621,57623,57625],{"class":206,"line":8144},[204,57622,1123],{"class":214},[204,57624,51886],{"class":51386},[204,57626,51393],{"class":214},[204,57628,57629,57631,57633,57636,57638],{"class":206,"line":9803},[204,57630,52230],{"class":214},[204,57632,14],{"class":51386},[204,57634,57635],{"class":214},">随机点名\u003C\u002F",[204,57637,14],{"class":51386},[204,57639,51393],{"class":214},[204,57641,57642,57644,57646,57648,57650,57652],{"class":206,"line":9828},[204,57643,52230],{"class":214},[204,57645,51697],{"class":51386},[204,57647,53572],{"class":2049},[204,57649,260],{"class":214},[204,57651,53577],{"class":319},[204,57653,51393],{"class":214},[204,57655,57656,57658,57660,57663,57665],{"class":206,"line":9851},[204,57657,51427],{"class":214},[204,57659,204],{"class":51386},[204,57661,57662],{"class":214},">名字是：\u003C\u002F",[204,57664,204],{"class":51386},[204,57666,51393],{"class":214},[204,57668,57669,57671,57673,57675,57677,57680,57683,57685],{"class":206,"line":9875},[204,57670,51427],{"class":214},[204,57672,51697],{"class":51386},[204,57674,53572],{"class":2049},[204,57676,260],{"class":214},[204,57678,57679],{"class":319},"\"qs\"",[204,57681,57682],{"class":214},">这里显示姓名\u003C\u002F",[204,57684,51697],{"class":51386},[204,57686,51393],{"class":214},[204,57688,57689,57691,57693],{"class":206,"line":9880},[204,57690,52503],{"class":214},[204,57692,51697],{"class":51386},[204,57694,51393],{"class":214},[204,57696,57697,57699,57701,57703,57705,57708],{"class":206,"line":9885},[204,57698,52230],{"class":214},[204,57700,51697],{"class":51386},[204,57702,53572],{"class":2049},[204,57704,260],{"class":214},[204,57706,57707],{"class":319},"\"btns\"",[204,57709,51393],{"class":214},[204,57711,57712,57714,57716,57718,57720,57723,57726,57728],{"class":206,"line":9890},[204,57713,51427],{"class":214},[204,57715,53973],{"class":51386},[204,57717,53572],{"class":2049},[204,57719,260],{"class":214},[204,57721,57722],{"class":319},"\"start\"",[204,57724,57725],{"class":214},">开始\u003C\u002F",[204,57727,53973],{"class":51386},[204,57729,51393],{"class":214},[204,57731,57732,57734,57736,57738,57740,57743,57746,57748],{"class":206,"line":9899},[204,57733,51427],{"class":214},[204,57735,53973],{"class":51386},[204,57737,53572],{"class":2049},[204,57739,260],{"class":214},[204,57741,57742],{"class":319},"\"end\"",[204,57744,57745],{"class":214},">结束\u003C\u002F",[204,57747,53973],{"class":51386},[204,57749,51393],{"class":214},[204,57751,57752,57754,57756],{"class":206,"line":9904},[204,57753,52503],{"class":214},[204,57755,51697],{"class":51386},[204,57757,51393],{"class":214},[204,57759,57760],{"class":206,"line":9910},[204,57761,2486],{"emptyLinePlaceholder":135},[204,57763,57764,57766,57768],{"class":206,"line":9931},[204,57765,52230],{"class":214},[204,57767,51899],{"class":51386},[204,57769,51393],{"class":214},[204,57771,57772],{"class":206,"line":9937},[204,57773,57774],{"class":273},"    \u002F\u002F 数据数组\n",[204,57776,57777,57779,57782,57784,57786,57789,57791,57794,57796,57799,57801,57804,57806,57809],{"class":206,"line":9951},[204,57778,11308],{"class":210},[204,57780,57781],{"class":263}," arr",[204,57783,13651],{"class":210},[204,57785,52312],{"class":214},[204,57787,57788],{"class":319},"'马超'",[204,57790,12522],{"class":214},[204,57792,57793],{"class":319},"'黄忠'",[204,57795,12522],{"class":214},[204,57797,57798],{"class":319},"'赵云'",[204,57800,12522],{"class":214},[204,57802,57803],{"class":319},"'关羽'",[204,57805,12522],{"class":214},[204,57807,57808],{"class":319},"'张飞'",[204,57810,33332],{"class":214},[204,57812,57813,57815,57818,57820,57822,57824,57826,57829],{"class":206,"line":9957},[204,57814,11308],{"class":210},[204,57816,57817],{"class":263}," qs",[204,57819,13651],{"class":210},[204,57821,54482],{"class":214},[204,57823,54485],{"class":2049},[204,57825,215],{"class":214},[204,57827,57828],{"class":319},"'.qs'",[204,57830,221],{"class":214},[204,57832,57833],{"class":206,"line":9984},[204,57834,57835],{"class":273},"    \u002F\u002F 1.业务1.开始按钮模块\n",[204,57837,57838,57840,57842,57844,57846,57848,57850,57853],{"class":206,"line":9993},[204,57839,11308],{"class":210},[204,57841,4270],{"class":263},[204,57843,13651],{"class":210},[204,57845,54482],{"class":214},[204,57847,54485],{"class":2049},[204,57849,215],{"class":214},[204,57851,57852],{"class":319},"'.start'",[204,57854,221],{"class":214},[204,57856,57857],{"class":206,"line":9999},[204,57858,57859],{"class":273},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[204,57861,57862,57864,57867,57869],{"class":206,"line":10007},[204,57863,52305],{"class":210},[204,57865,57866],{"class":214}," timerId ",[204,57868,260],{"class":210},[204,57870,47419],{"class":263},[204,57872,57873],{"class":206,"line":10012},[204,57874,57875],{"class":273},"    \u002F\u002F 随机号要全局变量\n",[204,57877,57878,57880,57883,57885],{"class":206,"line":16691},[204,57879,52305],{"class":210},[204,57881,57882],{"class":214}," random ",[204,57884,260],{"class":210},[204,57886,47419],{"class":263},[204,57888,57889],{"class":206,"line":16697},[204,57890,57891],{"class":273},"    \u002F\u002F 1.1 添加点击事件\n",[204,57893,57894,57897,57900,57902,57905,57907,57909],{"class":206,"line":16720},[204,57895,57896],{"class":214},"    start.",[204,57898,57899],{"class":2049},"addEventListener",[204,57901,215],{"class":214},[204,57903,57904],{"class":319},"'click'",[204,57906,12522],{"class":214},[204,57908,54535],{"class":210},[204,57910,54538],{"class":214},[204,57912,57913,57916,57918,57920,57922,57924],{"class":206,"line":16726},[204,57914,57915],{"class":214},"      timerId ",[204,57917,260],{"class":210},[204,57919,54530],{"class":2049},[204,57921,215],{"class":214},[204,57923,54535],{"class":210},[204,57925,54538],{"class":214},[204,57927,57928],{"class":206,"line":16749},[204,57929,57930],{"class":273},"        \u002F\u002F 随机数\n",[204,57932,57933,57936,57938,57941,57944,57947,57949,57951,57953,57955],{"class":206,"line":16763},[204,57934,57935],{"class":214},"        random ",[204,57937,260],{"class":210},[204,57939,57940],{"class":2049}," parseInt",[204,57942,57943],{"class":214},"(Math.",[204,57945,57946],{"class":2049},"random",[204,57948,13137],{"class":214},[204,57950,668],{"class":210},[204,57952,52051],{"class":214},[204,57954,52054],{"class":263},[204,57956,221],{"class":214},[204,57958,57959,57962,57964],{"class":206,"line":16783},[204,57960,57961],{"class":214},"        qs.innerHTML ",[204,57963,260],{"class":210},[204,57965,57966],{"class":214}," arr[random]\n",[204,57968,57969,57972,57974],{"class":206,"line":16789},[204,57970,57971],{"class":214},"      }, ",[204,57973,486],{"class":263},[204,57975,221],{"class":214},[204,57977,57978],{"class":206,"line":16800},[204,57979,57980],{"class":273},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[204,57982,57983,57985,57988,57990,57993,57995],{"class":206,"line":16823},[204,57984,54566],{"class":210},[204,57986,57987],{"class":214}," (arr.",[204,57989,52054],{"class":263},[204,57991,57992],{"class":210}," ===",[204,57994,25205],{"class":263},[204,57996,12529],{"class":214},[204,57998,57999],{"class":206,"line":16845},[204,58000,58001],{"class":273},"        \u002F\u002F start.disabled = true\n",[204,58003,58004],{"class":206,"line":16850},[204,58005,58006],{"class":273},"        \u002F\u002F end.disabled = true\n",[204,58008,58009],{"class":206,"line":16856},[204,58010,58011],{"class":273},"        \u002F\u002F 可以合起来写\n",[204,58013,58014,58017,58019,58022,58024],{"class":206,"line":16870},[204,58015,58016],{"class":214},"        start.disabled ",[204,58018,260],{"class":210},[204,58020,58021],{"class":214}," end.disabled ",[204,58023,260],{"class":210},[204,58025,58026],{"class":263}," true\n",[204,58028,58029],{"class":206,"line":16883},[204,58030,52484],{"class":214},[204,58032,58033],{"class":206,"line":16888},[204,58034,33547],{"class":214},[204,58036,58037],{"class":206,"line":16902},[204,58038,58039],{"class":273},"    \u002F\u002F 1.2 关闭按钮模块\n",[204,58041,58042,58044,58046,58048,58050,58052,58054,58057],{"class":206,"line":16907},[204,58043,11308],{"class":210},[204,58045,4286],{"class":263},[204,58047,13651],{"class":210},[204,58049,54482],{"class":214},[204,58051,54485],{"class":2049},[204,58053,215],{"class":214},[204,58055,58056],{"class":319},"'.end'",[204,58058,221],{"class":214},[204,58060,58061,58064,58066,58068,58070,58072,58074],{"class":206,"line":16913},[204,58062,58063],{"class":214},"    end.",[204,58065,57899],{"class":2049},[204,58067,215],{"class":214},[204,58069,57904],{"class":319},[204,58071,12522],{"class":214},[204,58073,54535],{"class":210},[204,58075,54538],{"class":214},[204,58077,58078,58081],{"class":206,"line":16918},[204,58079,58080],{"class":2049},"      clearInterval",[204,58082,58083],{"class":214},"(timerId)\n",[204,58085,58086],{"class":206,"line":16932},[204,58087,58088],{"class":273},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[204,58090,58091,58094,58097,58100,58102],{"class":206,"line":16937},[204,58092,58093],{"class":214},"      arr.",[204,58095,58096],{"class":2049},"splice",[204,58098,58099],{"class":214},"(random, ",[204,58101,431],{"class":263},[204,58103,221],{"class":214},[204,58105,58106],{"class":206,"line":16942},[204,58107,33547],{"class":214},[204,58109,58110],{"class":206,"line":16956},[204,58111,2486],{"emptyLinePlaceholder":135},[204,58113,58114,58116,58118],{"class":206,"line":16968},[204,58115,52503],{"class":214},[204,58117,51899],{"class":51386},[204,58119,51393],{"class":214},[204,58121,58122,58124,58126],{"class":206,"line":16973},[204,58123,51871],{"class":214},[204,58125,51886],{"class":51386},[204,58127,51393],{"class":214},[204,58129,58130],{"class":206,"line":16986},[204,58131,2486],{"emptyLinePlaceholder":135},[204,58133,58134,58136,58138],{"class":206,"line":16991},[204,58135,51871],{"class":214},[204,58137,50721],{"class":51386},[204,58139,51393],{"class":214},[19,58141,58142],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[49,58144,58146],{"id":58145},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[196,58148,58150],{"className":50719,"code":58149,"language":50721,"meta":125,"style":125},"\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",[81,58151,58152,58162,58176,58180,58188,58202,58222,58234,58242,58246,58254,58266,58274,58293,58310,58326,58336,58340,58348,58356,58360],{"__ignoreMap":125},[204,58153,58154,58156,58158,58160],{"class":206,"line":207},[204,58155,51383],{"class":214},[204,58157,51387],{"class":51386},[204,58159,51390],{"class":2049},[204,58161,51393],{"class":214},[204,58163,58164,58166,58168,58170,58172,58174],{"class":206,"line":126},[204,58165,1123],{"class":214},[204,58167,50721],{"class":51386},[204,58169,51402],{"class":2049},[204,58171,260],{"class":214},[204,58173,51407],{"class":319},[204,58175,51393],{"class":214},[204,58177,58178],{"class":206,"line":131},[204,58179,2486],{"emptyLinePlaceholder":135},[204,58181,58182,58184,58186],{"class":206,"line":1281},[204,58183,1123],{"class":214},[204,58185,51420],{"class":51386},[204,58187,51393],{"class":214},[204,58189,58190,58192,58194,58196,58198,58200],{"class":206,"line":1287},[204,58191,52230],{"class":214},[204,58193,51430],{"class":51386},[204,58195,51433],{"class":2049},[204,58197,260],{"class":214},[204,58199,51438],{"class":319},[204,58201,51393],{"class":214},[204,58203,58204,58206,58208,58210,58212,58214,58216,58218,58220],{"class":206,"line":1301},[204,58205,52230],{"class":214},[204,58207,51430],{"class":51386},[204,58209,15007],{"class":2049},[204,58211,260],{"class":214},[204,58213,51477],{"class":319},[204,58215,51457],{"class":2049},[204,58217,260],{"class":214},[204,58219,51484],{"class":319},[204,58221,51393],{"class":214},[204,58223,58224,58226,58228,58230,58232],{"class":206,"line":1307},[204,58225,52230],{"class":214},[204,58227,51493],{"class":51386},[204,58229,51496],{"class":214},[204,58231,51493],{"class":51386},[204,58233,51393],{"class":214},[204,58235,58236,58238,58240],{"class":206,"line":1398},[204,58237,51871],{"class":214},[204,58239,51420],{"class":51386},[204,58241,51393],{"class":214},[204,58243,58244],{"class":206,"line":1404},[204,58245,2486],{"emptyLinePlaceholder":135},[204,58247,58248,58250,58252],{"class":206,"line":1416},[204,58249,1123],{"class":214},[204,58251,51886],{"class":51386},[204,58253,51393],{"class":214},[204,58255,58256,58258,58260,58262,58264],{"class":206,"line":1698},[204,58257,52230],{"class":214},[204,58259,53973],{"class":51386},[204,58261,53979],{"class":214},[204,58263,53973],{"class":51386},[204,58265,51393],{"class":214},[204,58267,58268,58270,58272],{"class":206,"line":1703},[204,58269,52230],{"class":214},[204,58271,51899],{"class":51386},[204,58273,51393],{"class":214},[204,58275,58276,58278,58280,58282,58284,58286,58288,58291],{"class":206,"line":1709},[204,58277,11308],{"class":210},[204,58279,54477],{"class":263},[204,58281,13651],{"class":210},[204,58283,54482],{"class":214},[204,58285,54485],{"class":2049},[204,58287,215],{"class":214},[204,58289,58290],{"class":319},"'button'",[204,58292,221],{"class":214},[204,58294,58295,58298,58300,58302,58304,58306,58308],{"class":206,"line":1714},[204,58296,58297],{"class":214},"    btn.",[204,58299,57899],{"class":2049},[204,58301,215],{"class":214},[204,58303,57904],{"class":319},[204,58305,12522],{"class":214},[204,58307,54535],{"class":210},[204,58309,54538],{"class":214},[204,58311,58312,58315,58317,58319,58322,58324],{"class":206,"line":1728},[204,58313,58314],{"class":210},"      const",[204,58316,2326],{"class":263},[204,58318,13651],{"class":210},[204,58320,58321],{"class":214}," Math.",[204,58323,57946],{"class":2049},[204,58325,2062],{"class":214},[204,58327,58328,58331,58334],{"class":206,"line":1733},[204,58329,58330],{"class":214},"      console.",[204,58332,58333],{"class":2049},"log",[204,58335,228],{"class":214},[204,58337,58338],{"class":206,"line":1739},[204,58339,33547],{"class":214},[204,58341,58342,58344,58346],{"class":206,"line":1760},[204,58343,52503],{"class":214},[204,58345,51899],{"class":51386},[204,58347,51393],{"class":214},[204,58349,58350,58352,58354],{"class":206,"line":1765},[204,58351,51871],{"class":214},[204,58353,51886],{"class":51386},[204,58355,51393],{"class":214},[204,58357,58358],{"class":206,"line":1779},[204,58359,2486],{"emptyLinePlaceholder":135},[204,58361,58362,58364,58366],{"class":206,"line":1784},[204,58363,51871],{"class":214},[204,58365,50721],{"class":51386},[204,58367,51393],{"class":214},[19,58369,58370],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58372,58373],{},"常量不可以重新赋值",[19,58375,58376],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[196,58378,58380],{"className":50719,"code":58379,"language":50721,"meta":125,"style":125},"\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",[81,58381,58382,58392,58406,58410,58418,58432,58452,58464,58472,58476,58484,58496,58504,58515,58533,58549,58563,58571,58575,58583,58591,58595],{"__ignoreMap":125},[204,58383,58384,58386,58388,58390],{"class":206,"line":207},[204,58385,51383],{"class":214},[204,58387,51387],{"class":51386},[204,58389,51390],{"class":2049},[204,58391,51393],{"class":214},[204,58393,58394,58396,58398,58400,58402,58404],{"class":206,"line":126},[204,58395,1123],{"class":214},[204,58397,50721],{"class":51386},[204,58399,51402],{"class":2049},[204,58401,260],{"class":214},[204,58403,51407],{"class":319},[204,58405,51393],{"class":214},[204,58407,58408],{"class":206,"line":131},[204,58409,2486],{"emptyLinePlaceholder":135},[204,58411,58412,58414,58416],{"class":206,"line":1281},[204,58413,1123],{"class":214},[204,58415,51420],{"class":51386},[204,58417,51393],{"class":214},[204,58419,58420,58422,58424,58426,58428,58430],{"class":206,"line":1287},[204,58421,52230],{"class":214},[204,58423,51430],{"class":51386},[204,58425,51433],{"class":2049},[204,58427,260],{"class":214},[204,58429,51438],{"class":319},[204,58431,51393],{"class":214},[204,58433,58434,58436,58438,58440,58442,58444,58446,58448,58450],{"class":206,"line":1301},[204,58435,52230],{"class":214},[204,58437,51430],{"class":51386},[204,58439,15007],{"class":2049},[204,58441,260],{"class":214},[204,58443,51477],{"class":319},[204,58445,51457],{"class":2049},[204,58447,260],{"class":214},[204,58449,51484],{"class":319},[204,58451,51393],{"class":214},[204,58453,58454,58456,58458,58460,58462],{"class":206,"line":1307},[204,58455,52230],{"class":214},[204,58457,51493],{"class":51386},[204,58459,51496],{"class":214},[204,58461,51493],{"class":51386},[204,58463,51393],{"class":214},[204,58465,58466,58468,58470],{"class":206,"line":1398},[204,58467,51871],{"class":214},[204,58469,51420],{"class":51386},[204,58471,51393],{"class":214},[204,58473,58474],{"class":206,"line":1404},[204,58475,2486],{"emptyLinePlaceholder":135},[204,58477,58478,58480,58482],{"class":206,"line":1416},[204,58479,1123],{"class":214},[204,58481,51886],{"class":51386},[204,58483,51393],{"class":214},[204,58485,58486,58488,58490,58492,58494],{"class":206,"line":1698},[204,58487,52230],{"class":214},[204,58489,53973],{"class":51386},[204,58491,53979],{"class":214},[204,58493,53973],{"class":51386},[204,58495,51393],{"class":214},[204,58497,58498,58500,58502],{"class":206,"line":1703},[204,58499,52230],{"class":214},[204,58501,51899],{"class":51386},[204,58503,51393],{"class":214},[204,58505,58506,58508,58510,58512],{"class":206,"line":1709},[204,58507,11308],{"class":210},[204,58509,2326],{"class":263},[204,58511,13651],{"class":210},[204,58513,58514],{"class":263}," 10\n",[204,58516,58517,58519,58521,58523,58525,58527,58529,58531],{"class":206,"line":1714},[204,58518,11308],{"class":210},[204,58520,54477],{"class":263},[204,58522,13651],{"class":210},[204,58524,54482],{"class":214},[204,58526,54485],{"class":2049},[204,58528,215],{"class":214},[204,58530,58290],{"class":319},[204,58532,221],{"class":214},[204,58534,58535,58537,58539,58541,58543,58545,58547],{"class":206,"line":1728},[204,58536,58297],{"class":214},[204,58538,57899],{"class":2049},[204,58540,215],{"class":214},[204,58542,57904],{"class":319},[204,58544,12522],{"class":214},[204,58546,54535],{"class":210},[204,58548,54538],{"class":214},[204,58550,58551,58553,58555,58557,58559,58561],{"class":206,"line":1733},[204,58552,58314],{"class":210},[204,58554,2326],{"class":263},[204,58556,13651],{"class":210},[204,58558,58321],{"class":214},[204,58560,57946],{"class":2049},[204,58562,2062],{"class":214},[204,58564,58565,58567,58569],{"class":206,"line":1739},[204,58566,58330],{"class":214},[204,58568,58333],{"class":2049},[204,58570,228],{"class":214},[204,58572,58573],{"class":206,"line":1760},[204,58574,33547],{"class":214},[204,58576,58577,58579,58581],{"class":206,"line":1765},[204,58578,52503],{"class":214},[204,58580,51899],{"class":51386},[204,58582,51393],{"class":214},[204,58584,58585,58587,58589],{"class":206,"line":1779},[204,58586,51871],{"class":214},[204,58588,51886],{"class":51386},[204,58590,51393],{"class":214},[204,58592,58593],{"class":206,"line":1784},[204,58594,2486],{"emptyLinePlaceholder":135},[204,58596,58597,58599,58601],{"class":206,"line":1813},[204,58598,51871],{"class":214},[204,58600,50721],{"class":51386},[204,58602,51393],{"class":214},[19,58604,58605],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[196,58607,58609],{"className":50719,"code":58608,"language":50721,"meta":125,"style":125},"\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",[81,58610,58611,58621,58635,58639,58647,58661,58681,58693,58701,58705,58713,58725,58733,58743,58761,58777,58790,58798,58802,58810,58818,58822],{"__ignoreMap":125},[204,58612,58613,58615,58617,58619],{"class":206,"line":207},[204,58614,51383],{"class":214},[204,58616,51387],{"class":51386},[204,58618,51390],{"class":2049},[204,58620,51393],{"class":214},[204,58622,58623,58625,58627,58629,58631,58633],{"class":206,"line":126},[204,58624,1123],{"class":214},[204,58626,50721],{"class":51386},[204,58628,51402],{"class":2049},[204,58630,260],{"class":214},[204,58632,51407],{"class":319},[204,58634,51393],{"class":214},[204,58636,58637],{"class":206,"line":131},[204,58638,2486],{"emptyLinePlaceholder":135},[204,58640,58641,58643,58645],{"class":206,"line":1281},[204,58642,1123],{"class":214},[204,58644,51420],{"class":51386},[204,58646,51393],{"class":214},[204,58648,58649,58651,58653,58655,58657,58659],{"class":206,"line":1287},[204,58650,52230],{"class":214},[204,58652,51430],{"class":51386},[204,58654,51433],{"class":2049},[204,58656,260],{"class":214},[204,58658,51438],{"class":319},[204,58660,51393],{"class":214},[204,58662,58663,58665,58667,58669,58671,58673,58675,58677,58679],{"class":206,"line":1301},[204,58664,52230],{"class":214},[204,58666,51430],{"class":51386},[204,58668,15007],{"class":2049},[204,58670,260],{"class":214},[204,58672,51477],{"class":319},[204,58674,51457],{"class":2049},[204,58676,260],{"class":214},[204,58678,51484],{"class":319},[204,58680,51393],{"class":214},[204,58682,58683,58685,58687,58689,58691],{"class":206,"line":1307},[204,58684,52230],{"class":214},[204,58686,51493],{"class":51386},[204,58688,51496],{"class":214},[204,58690,51493],{"class":51386},[204,58692,51393],{"class":214},[204,58694,58695,58697,58699],{"class":206,"line":1398},[204,58696,51871],{"class":214},[204,58698,51420],{"class":51386},[204,58700,51393],{"class":214},[204,58702,58703],{"class":206,"line":1404},[204,58704,2486],{"emptyLinePlaceholder":135},[204,58706,58707,58709,58711],{"class":206,"line":1416},[204,58708,1123],{"class":214},[204,58710,51886],{"class":51386},[204,58712,51393],{"class":214},[204,58714,58715,58717,58719,58721,58723],{"class":206,"line":1698},[204,58716,52230],{"class":214},[204,58718,53973],{"class":51386},[204,58720,53979],{"class":214},[204,58722,53973],{"class":51386},[204,58724,51393],{"class":214},[204,58726,58727,58729,58731],{"class":206,"line":1703},[204,58728,52230],{"class":214},[204,58730,51899],{"class":51386},[204,58732,51393],{"class":214},[204,58734,58735,58737,58739,58741],{"class":206,"line":1709},[204,58736,11308],{"class":210},[204,58738,2326],{"class":263},[204,58740,13651],{"class":210},[204,58742,58514],{"class":263},[204,58744,58745,58747,58749,58751,58753,58755,58757,58759],{"class":206,"line":1714},[204,58746,11308],{"class":210},[204,58748,54477],{"class":263},[204,58750,13651],{"class":210},[204,58752,54482],{"class":214},[204,58754,54485],{"class":2049},[204,58756,215],{"class":214},[204,58758,58290],{"class":319},[204,58760,221],{"class":214},[204,58762,58763,58765,58767,58769,58771,58773,58775],{"class":206,"line":1728},[204,58764,58297],{"class":214},[204,58766,57899],{"class":2049},[204,58768,215],{"class":214},[204,58770,57904],{"class":319},[204,58772,12522],{"class":214},[204,58774,54535],{"class":210},[204,58776,54538],{"class":214},[204,58778,58779,58782,58784,58786,58788],{"class":206,"line":1733},[204,58780,58781],{"class":214},"      num ",[204,58783,260],{"class":210},[204,58785,58321],{"class":214},[204,58787,57946],{"class":2049},[204,58789,2062],{"class":214},[204,58791,58792,58794,58796],{"class":206,"line":1739},[204,58793,58330],{"class":214},[204,58795,58333],{"class":2049},[204,58797,228],{"class":214},[204,58799,58800],{"class":206,"line":1760},[204,58801,33547],{"class":214},[204,58803,58804,58806,58808],{"class":206,"line":1765},[204,58805,52503],{"class":214},[204,58807,51899],{"class":51386},[204,58809,51393],{"class":214},[204,58811,58812,58814,58816],{"class":206,"line":1779},[204,58813,51871],{"class":214},[204,58815,51886],{"class":51386},[204,58817,51393],{"class":214},[204,58819,58820],{"class":206,"line":1784},[204,58821,2486],{"emptyLinePlaceholder":135},[204,58823,58824,58826,58828],{"class":206,"line":1813},[204,58825,51871],{"class":214},[204,58827,50721],{"class":51386},[204,58829,51393],{"class":214},[19,58831,58832],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[49,58834,58836],{"id":58835},"_324-事件监听版本","3.2.4 事件监听版本",[19,58838,58839],{},[23,58840],{"alt":125,"src":58841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58843,58844],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58846,58847],{},"这种方式会覆盖前边的事件监听:",[196,58849,58851],{"className":50719,"code":58850,"language":50721,"meta":125,"style":125},"\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",[81,58852,58853,58863,58877,58881,58889,58903,58923,58935,58943,58947,58955,58967,58975,58993,59007,59018,59022,59034,59044,59048,59056,59064,59068],{"__ignoreMap":125},[204,58854,58855,58857,58859,58861],{"class":206,"line":207},[204,58856,51383],{"class":214},[204,58858,51387],{"class":51386},[204,58860,51390],{"class":2049},[204,58862,51393],{"class":214},[204,58864,58865,58867,58869,58871,58873,58875],{"class":206,"line":126},[204,58866,1123],{"class":214},[204,58868,50721],{"class":51386},[204,58870,51402],{"class":2049},[204,58872,260],{"class":214},[204,58874,51407],{"class":319},[204,58876,51393],{"class":214},[204,58878,58879],{"class":206,"line":131},[204,58880,2486],{"emptyLinePlaceholder":135},[204,58882,58883,58885,58887],{"class":206,"line":1281},[204,58884,1123],{"class":214},[204,58886,51420],{"class":51386},[204,58888,51393],{"class":214},[204,58890,58891,58893,58895,58897,58899,58901],{"class":206,"line":1287},[204,58892,52230],{"class":214},[204,58894,51430],{"class":51386},[204,58896,51433],{"class":2049},[204,58898,260],{"class":214},[204,58900,51438],{"class":319},[204,58902,51393],{"class":214},[204,58904,58905,58907,58909,58911,58913,58915,58917,58919,58921],{"class":206,"line":1301},[204,58906,52230],{"class":214},[204,58908,51430],{"class":51386},[204,58910,15007],{"class":2049},[204,58912,260],{"class":214},[204,58914,51477],{"class":319},[204,58916,51457],{"class":2049},[204,58918,260],{"class":214},[204,58920,51484],{"class":319},[204,58922,51393],{"class":214},[204,58924,58925,58927,58929,58931,58933],{"class":206,"line":1307},[204,58926,52230],{"class":214},[204,58928,51493],{"class":51386},[204,58930,51496],{"class":214},[204,58932,51493],{"class":51386},[204,58934,51393],{"class":214},[204,58936,58937,58939,58941],{"class":206,"line":1398},[204,58938,51871],{"class":214},[204,58940,51420],{"class":51386},[204,58942,51393],{"class":214},[204,58944,58945],{"class":206,"line":1404},[204,58946,2486],{"emptyLinePlaceholder":135},[204,58948,58949,58951,58953],{"class":206,"line":1416},[204,58950,1123],{"class":214},[204,58952,51886],{"class":51386},[204,58954,51393],{"class":214},[204,58956,58957,58959,58961,58963,58965],{"class":206,"line":1698},[204,58958,52230],{"class":214},[204,58960,53973],{"class":51386},[204,58962,53979],{"class":214},[204,58964,53973],{"class":51386},[204,58966,51393],{"class":214},[204,58968,58969,58971,58973],{"class":206,"line":1703},[204,58970,52230],{"class":214},[204,58972,51899],{"class":51386},[204,58974,51393],{"class":214},[204,58976,58977,58979,58981,58983,58985,58987,58989,58991],{"class":206,"line":1709},[204,58978,11308],{"class":210},[204,58980,54477],{"class":263},[204,58982,13651],{"class":210},[204,58984,54482],{"class":214},[204,58986,54485],{"class":2049},[204,58988,215],{"class":214},[204,58990,58290],{"class":319},[204,58992,221],{"class":214},[204,58994,58995,58997,59000,59002,59005],{"class":206,"line":1714},[204,58996,58297],{"class":214},[204,58998,58999],{"class":2049},"onclick",[204,59001,13651],{"class":210},[204,59003,59004],{"class":210}," function",[204,59006,54538],{"class":214},[204,59008,59009,59012,59014,59016],{"class":206,"line":1728},[204,59010,59011],{"class":2049},"      alert",[204,59013,215],{"class":214},[204,59015,685],{"class":263},[204,59017,221],{"class":214},[204,59019,59020],{"class":206,"line":1733},[204,59021,2273],{"class":214},[204,59023,59024,59026,59028,59030,59032],{"class":206,"line":1739},[204,59025,58297],{"class":214},[204,59027,58999],{"class":2049},[204,59029,13651],{"class":210},[204,59031,59004],{"class":210},[204,59033,54538],{"class":214},[204,59035,59036,59038,59040,59042],{"class":206,"line":1760},[204,59037,59011],{"class":2049},[204,59039,215],{"class":214},[204,59041,963],{"class":263},[204,59043,221],{"class":214},[204,59045,59046],{"class":206,"line":1765},[204,59047,2273],{"class":214},[204,59049,59050,59052,59054],{"class":206,"line":1779},[204,59051,52503],{"class":214},[204,59053,51899],{"class":51386},[204,59055,51393],{"class":214},[204,59057,59058,59060,59062],{"class":206,"line":1784},[204,59059,51871],{"class":214},[204,59061,51886],{"class":51386},[204,59063,51393],{"class":214},[204,59065,59066],{"class":206,"line":1813},[204,59067,2486],{"emptyLinePlaceholder":135},[204,59069,59070,59072,59074],{"class":206,"line":1818},[204,59071,51871],{"class":214},[204,59073,50721],{"class":51386},[204,59075,51393],{"class":214},[19,59077,59078],{},"只要点击就输出结果为22,前边11被覆盖了",[196,59080,59082],{"className":50719,"code":59081,"language":50721,"meta":125,"style":125},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[81,59083,59084,59089,59094,59098,59103,59108],{"__ignoreMap":125},[204,59085,59086],{"class":206,"line":207},[204,59087,59088],{"class":214},"  btn.addEventListener('click', function () {\n",[204,59090,59091],{"class":206,"line":126},[204,59092,59093],{"class":214},"      alert(11)\n",[204,59095,59096],{"class":206,"line":131},[204,59097,33547],{"class":214},[204,59099,59100],{"class":206,"line":1281},[204,59101,59102],{"class":214},"    btn.addEventListener('click', function () {\n",[204,59104,59105],{"class":206,"line":1287},[204,59106,59107],{"class":214},"      alert(22)\n",[204,59109,59110],{"class":206,"line":1301},[204,59111,33547],{"class":214},[19,59113,59114],{},"点击第一次输出11,第二次点击为22",[49,59116,59118],{"id":59117},"_325-事件类型","3.2.5 事件类型",[19,59120,59121],{},[23,59122],{"alt":125,"src":59123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22085,59125,59127],{"id":59126},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59129,59130],{},"补充知识:",[19,59132,59133],{},"轮播图自动播放模块,可以使用",[19,59135,59136],{},"let timerId = setInterval(function () {",[19,59138,59139],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59141,59142],{},"用js方法模拟进行点击事件,click必须加()",[19,59144,59145],{},"next.click()",[19,59147,59148],{},"}, 1000)",[19,59150,59151],{},[23,59152],{"alt":125,"src":59153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[196,59155,59157],{"className":53153,"code":59156,"language":53155,"meta":125,"style":125},"\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",[81,59158,59159,59163,59173,59187,59191,59199,59214,59234,59254,59267,59275,59280,59285,59289,59293,59298,59303,59308,59313,59317,59321,59326,59331,59336,59340,59344,59349,59353,59358,59363,59367,59371,59376,59381,59386,59391,59396,59400,59404,59409,59414,59419,59424,59429,59433,59437,59442,59447,59452,59457,59462,59467,59472,59477,59482,59487,59491,59495,59500,59505,59509,59513,59518,59523,59527,59532,59537,59541,59545,59550,59554,59559,59564,59568,59573,59577,59581,59586,59591,59596,59601,59606,59611,59616,59620,59624,59628,59633,59638,59643,59648,59652,59660,59668,59672,59680,59695,59709,59730,59738,59752,59765,59780,59799,59811,59823,59835,59847,59859,59871,59883,59891,59906,59930,59954,59962,59970,59978,59986,59991,59996,60001,60006,60011,60016,60021,60026,60031,60036,60040,60045,60050,60055,60060,60065,60070,60075,60080,60085,60089,60094,60099,60104,60109,60114,60119,60124,60129,60134,60139,60144,60149,60153,60157,60162,60167,60172,60176,60181,60186,60191,60196,60201,60205,60210,60214,60218,60222,60226,60230,60234,60239,60244,60249,60254,60259,60264,60269,60274,60279,60283,60287,60292,60297,60302,60307,60312,60316,60321,60326,60331,60336,60341,60346,60350,60354,60359,60363,60368,60372,60377,60382,60387,60392,60397,60402,60406,60414,60422,60426],{"__ignoreMap":125},[204,59160,59161],{"class":206,"line":207},[204,59162,2486],{"emptyLinePlaceholder":135},[204,59164,59165,59167,59169,59171],{"class":206,"line":126},[204,59166,51383],{"class":214},[204,59168,51387],{"class":210},[204,59170,51390],{"class":263},[204,59172,51393],{"class":214},[204,59174,59175,59177,59179,59181,59183,59185],{"class":206,"line":131},[204,59176,1123],{"class":214},[204,59178,50721],{"class":51386},[204,59180,51402],{"class":2049},[204,59182,260],{"class":214},[204,59184,51407],{"class":319},[204,59186,51393],{"class":214},[204,59188,59189],{"class":206,"line":1281},[204,59190,2486],{"emptyLinePlaceholder":135},[204,59192,59193,59195,59197],{"class":206,"line":1287},[204,59194,1123],{"class":214},[204,59196,51420],{"class":51386},[204,59198,51393],{"class":214},[204,59200,59201,59203,59205,59207,59209,59211],{"class":206,"line":1301},[204,59202,52230],{"class":214},[204,59204,51430],{"class":51386},[204,59206,51433],{"class":2049},[204,59208,260],{"class":214},[204,59210,51438],{"class":319},[204,59212,59213],{"class":214}," \u002F>\n",[204,59215,59216,59218,59220,59222,59224,59226,59228,59230,59232],{"class":206,"line":1307},[204,59217,52230],{"class":214},[204,59219,51430],{"class":51386},[204,59221,51449],{"class":2049},[204,59223,260],{"class":214},[204,59225,51454],{"class":319},[204,59227,51457],{"class":2049},[204,59229,260],{"class":214},[204,59231,51462],{"class":319},[204,59233,59213],{"class":214},[204,59235,59236,59238,59240,59242,59244,59246,59248,59250,59252],{"class":206,"line":1398},[204,59237,52230],{"class":214},[204,59239,51430],{"class":51386},[204,59241,15007],{"class":2049},[204,59243,260],{"class":214},[204,59245,51477],{"class":319},[204,59247,51457],{"class":2049},[204,59249,260],{"class":214},[204,59251,51484],{"class":319},[204,59253,59213],{"class":214},[204,59255,59256,59258,59260,59263,59265],{"class":206,"line":1404},[204,59257,52230],{"class":214},[204,59259,51493],{"class":51386},[204,59261,59262],{"class":214},">轮播图点击切换\u003C\u002F",[204,59264,51493],{"class":51386},[204,59266,51393],{"class":214},[204,59268,59269,59271,59273],{"class":206,"line":1416},[204,59270,52230],{"class":214},[204,59272,5213],{"class":51386},[204,59274,51393],{"class":214},[204,59276,59277],{"class":206,"line":1698},[204,59278,59279],{"class":214},"    * {\n",[204,59281,59282],{"class":206,"line":1703},[204,59283,59284],{"class":214},"      box-sizing: border-box;\n",[204,59286,59287],{"class":206,"line":1709},[204,59288,2273],{"class":214},[204,59290,59291],{"class":206,"line":1714},[204,59292,2486],{"emptyLinePlaceholder":135},[204,59294,59295],{"class":206,"line":1728},[204,59296,59297],{"class":214},"    .slider {\n",[204,59299,59300],{"class":206,"line":1733},[204,59301,59302],{"class":214},"      width: 560px;\n",[204,59304,59305],{"class":206,"line":1739},[204,59306,59307],{"class":214},"      height: 400px;\n",[204,59309,59310],{"class":206,"line":1760},[204,59311,59312],{"class":214},"      overflow: hidden;\n",[204,59314,59315],{"class":206,"line":1765},[204,59316,2273],{"class":214},[204,59318,59319],{"class":206,"line":1779},[204,59320,2486],{"emptyLinePlaceholder":135},[204,59322,59323],{"class":206,"line":1784},[204,59324,59325],{"class":214},"    .slider-wrapper {\n",[204,59327,59328],{"class":206,"line":1813},[204,59329,59330],{"class":214},"      width: 100%;\n",[204,59332,59333],{"class":206,"line":1818},[204,59334,59335],{"class":214},"      height: 320px;\n",[204,59337,59338],{"class":206,"line":1835},[204,59339,2273],{"class":214},[204,59341,59342],{"class":206,"line":1840},[204,59343,2486],{"emptyLinePlaceholder":135},[204,59345,59346],{"class":206,"line":1845},[204,59347,59348],{"class":214},"    .slider-wrapper img {\n",[204,59350,59351],{"class":206,"line":1850},[204,59352,59330],{"class":214},[204,59354,59355],{"class":206,"line":1864},[204,59356,59357],{"class":214},"      height: 100%;\n",[204,59359,59360],{"class":206,"line":1869},[204,59361,59362],{"class":214},"      display: block;\n",[204,59364,59365],{"class":206,"line":2663},[204,59366,2273],{"class":214},[204,59368,59369],{"class":206,"line":2677},[204,59370,2486],{"emptyLinePlaceholder":135},[204,59372,59373],{"class":206,"line":2685},[204,59374,59375],{"class":214},"    .slider-footer {\n",[204,59377,59378],{"class":206,"line":2690},[204,59379,59380],{"class":214},"      height: 80px;\n",[204,59382,59383],{"class":206,"line":2696},[204,59384,59385],{"class":214},"      background-color: rgb(100, 67, 68);\n",[204,59387,59388],{"class":206,"line":2702},[204,59389,59390],{"class":214},"      padding: 12px 12px 0 12px;\n",[204,59392,59393],{"class":206,"line":2707},[204,59394,59395],{"class":214},"      position: relative;\n",[204,59397,59398],{"class":206,"line":8035},[204,59399,2273],{"class":214},[204,59401,59402],{"class":206,"line":8059},[204,59403,2486],{"emptyLinePlaceholder":135},[204,59405,59406],{"class":206,"line":8064},[204,59407,59408],{"class":214},"    .slider-footer .toggle {\n",[204,59410,59411],{"class":206,"line":8070},[204,59412,59413],{"class":214},"      position: absolute;\n",[204,59415,59416],{"class":206,"line":8097},[204,59417,59418],{"class":214},"      right: 0;\n",[204,59420,59421],{"class":206,"line":8102},[204,59422,59423],{"class":214},"      top: 12px;\n",[204,59425,59426],{"class":206,"line":8108},[204,59427,59428],{"class":214},"      display: flex;\n",[204,59430,59431],{"class":206,"line":8120},[204,59432,2273],{"class":214},[204,59434,59435],{"class":206,"line":8132},[204,59436,2486],{"emptyLinePlaceholder":135},[204,59438,59439],{"class":206,"line":8144},[204,59440,59441],{"class":214},"    .slider-footer .toggle button {\n",[204,59443,59444],{"class":206,"line":9803},[204,59445,59446],{"class":214},"      margin-right: 12px;\n",[204,59448,59449],{"class":206,"line":9828},[204,59450,59451],{"class":214},"      width: 28px;\n",[204,59453,59454],{"class":206,"line":9851},[204,59455,59456],{"class":214},"      height: 28px;\n",[204,59458,59459],{"class":206,"line":9875},[204,59460,59461],{"class":214},"      appearance: none;\n",[204,59463,59464],{"class":206,"line":9880},[204,59465,59466],{"class":214},"      border: none;\n",[204,59468,59469],{"class":206,"line":9885},[204,59470,59471],{"class":214},"      background: rgba(255, 255, 255, 0.1);\n",[204,59473,59474],{"class":206,"line":9890},[204,59475,59476],{"class":214},"      color: #fff;\n",[204,59478,59479],{"class":206,"line":9899},[204,59480,59481],{"class":214},"      border-radius: 4px;\n",[204,59483,59484],{"class":206,"line":9904},[204,59485,59486],{"class":214},"      cursor: pointer;\n",[204,59488,59489],{"class":206,"line":9910},[204,59490,2273],{"class":214},[204,59492,59493],{"class":206,"line":9931},[204,59494,2486],{"emptyLinePlaceholder":135},[204,59496,59497],{"class":206,"line":9937},[204,59498,59499],{"class":214},"    .slider-footer .toggle button:hover {\n",[204,59501,59502],{"class":206,"line":9951},[204,59503,59504],{"class":214},"      background: rgba(255, 255, 255, 0.2);\n",[204,59506,59507],{"class":206,"line":9957},[204,59508,2273],{"class":214},[204,59510,59511],{"class":206,"line":9984},[204,59512,2486],{"emptyLinePlaceholder":135},[204,59514,59515],{"class":206,"line":9993},[204,59516,59517],{"class":214},"    .slider-footer p {\n",[204,59519,59520],{"class":206,"line":9999},[204,59521,59522],{"class":214},"      margin: 0;\n",[204,59524,59525],{"class":206,"line":10007},[204,59526,59476],{"class":214},[204,59528,59529],{"class":206,"line":10012},[204,59530,59531],{"class":214},"      font-size: 18px;\n",[204,59533,59534],{"class":206,"line":16691},[204,59535,59536],{"class":214},"      margin-bottom: 10px;\n",[204,59538,59539],{"class":206,"line":16697},[204,59540,2273],{"class":214},[204,59542,59543],{"class":206,"line":16720},[204,59544,2486],{"emptyLinePlaceholder":135},[204,59546,59547],{"class":206,"line":16726},[204,59548,59549],{"class":214},"    .slider-indicator {\n",[204,59551,59552],{"class":206,"line":16749},[204,59553,59522],{"class":214},[204,59555,59556],{"class":206,"line":16763},[204,59557,59558],{"class":214},"      padding: 0;\n",[204,59560,59561],{"class":206,"line":16783},[204,59562,59563],{"class":214},"      list-style: none;\n",[204,59565,59566],{"class":206,"line":16789},[204,59567,59428],{"class":214},[204,59569,59570],{"class":206,"line":16800},[204,59571,59572],{"class":214},"      align-items: center;\n",[204,59574,59575],{"class":206,"line":16823},[204,59576,2273],{"class":214},[204,59578,59579],{"class":206,"line":16845},[204,59580,2486],{"emptyLinePlaceholder":135},[204,59582,59583],{"class":206,"line":16850},[204,59584,59585],{"class":214},"    .slider-indicator li {\n",[204,59587,59588],{"class":206,"line":16856},[204,59589,59590],{"class":214},"      width: 8px;\n",[204,59592,59593],{"class":206,"line":16870},[204,59594,59595],{"class":214},"      height: 8px;\n",[204,59597,59598],{"class":206,"line":16883},[204,59599,59600],{"class":214},"      margin: 4px;\n",[204,59602,59603],{"class":206,"line":16888},[204,59604,59605],{"class":214},"      border-radius: 50%;\n",[204,59607,59608],{"class":206,"line":16902},[204,59609,59610],{"class":214},"      background: #fff;\n",[204,59612,59613],{"class":206,"line":16907},[204,59614,59615],{"class":214},"      opacity: 0.4;\n",[204,59617,59618],{"class":206,"line":16913},[204,59619,59486],{"class":214},[204,59621,59622],{"class":206,"line":16918},[204,59623,2273],{"class":214},[204,59625,59626],{"class":206,"line":16932},[204,59627,2486],{"emptyLinePlaceholder":135},[204,59629,59630],{"class":206,"line":16937},[204,59631,59632],{"class":214},"    .slider-indicator li.active {\n",[204,59634,59635],{"class":206,"line":16942},[204,59636,59637],{"class":214},"      width: 12px;\n",[204,59639,59640],{"class":206,"line":16956},[204,59641,59642],{"class":214},"      height: 12px;\n",[204,59644,59645],{"class":206,"line":16968},[204,59646,59647],{"class":214},"      opacity: 1;\n",[204,59649,59650],{"class":206,"line":16973},[204,59651,2273],{"class":214},[204,59653,59654,59656,59658],{"class":206,"line":16986},[204,59655,52503],{"class":214},[204,59657,5213],{"class":51386},[204,59659,51393],{"class":214},[204,59661,59662,59664,59666],{"class":206,"line":16991},[204,59663,51871],{"class":214},[204,59665,51420],{"class":51386},[204,59667,51393],{"class":214},[204,59669,59670],{"class":206,"line":16996},[204,59671,2486],{"emptyLinePlaceholder":135},[204,59673,59674,59676,59678],{"class":206,"line":17001},[204,59675,1123],{"class":214},[204,59677,51886],{"class":51386},[204,59679,51393],{"class":214},[204,59681,59682,59684,59686,59688,59690,59693],{"class":206,"line":17014},[204,59683,52230],{"class":214},[204,59685,51697],{"class":51386},[204,59687,53572],{"class":2049},[204,59689,260],{"class":214},[204,59691,59692],{"class":319},"\"slider\"",[204,59694,51393],{"class":214},[204,59696,59697,59699,59701,59703,59705,59707],{"class":206,"line":17019},[204,59698,51427],{"class":214},[204,59700,51697],{"class":51386},[204,59702,53572],{"class":2049},[204,59704,260],{"class":214},[204,59706,55313],{"class":319},[204,59708,51393],{"class":214},[204,59710,59711,59713,59715,59717,59719,59722,59724,59726,59728],{"class":206,"line":32719},[204,59712,55320],{"class":214},[204,59714,23],{"class":51386},[204,59716,55325],{"class":2049},[204,59718,260],{"class":214},[204,59720,59721],{"class":319},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[204,59723,55333],{"class":2049},[204,59725,260],{"class":214},[204,59727,7739],{"class":319},[204,59729,59213],{"class":214},[204,59731,59732,59734,59736],{"class":206,"line":32725},[204,59733,51862],{"class":214},[204,59735,51697],{"class":51386},[204,59737,51393],{"class":214},[204,59739,59740,59742,59744,59746,59748,59750],{"class":206,"line":32731},[204,59741,51427],{"class":214},[204,59743,51697],{"class":51386},[204,59745,53572],{"class":2049},[204,59747,260],{"class":214},[204,59749,55360],{"class":319},[204,59751,51393],{"class":214},[204,59753,59754,59756,59758,59761,59763],{"class":206,"line":32737},[204,59755,55320],{"class":214},[204,59757,19],{"class":51386},[204,59759,59760],{"class":214},">对人类来说会不会太超前了？\u003C\u002F",[204,59762,19],{"class":51386},[204,59764,51393],{"class":214},[204,59766,59767,59769,59771,59773,59775,59778],{"class":206,"line":32743},[204,59768,55320],{"class":214},[204,59770,68],{"class":51386},[204,59772,53572],{"class":2049},[204,59774,260],{"class":214},[204,59776,59777],{"class":319},"\"slider-indicator\"",[204,59779,51393],{"class":214},[204,59781,59782,59784,59786,59788,59790,59793,59795,59797],{"class":206,"line":32754},[204,59783,55388],{"class":214},[204,59785,71],{"class":51386},[204,59787,53572],{"class":2049},[204,59789,260],{"class":214},[204,59791,59792],{"class":319},"\"active\"",[204,59794,55400],{"class":214},[204,59796,71],{"class":51386},[204,59798,51393],{"class":214},[204,59800,59801,59803,59805,59807,59809],{"class":206,"line":32760},[204,59802,55388],{"class":214},[204,59804,71],{"class":51386},[204,59806,55400],{"class":214},[204,59808,71],{"class":51386},[204,59810,51393],{"class":214},[204,59812,59813,59815,59817,59819,59821],{"class":206,"line":32780},[204,59814,55388],{"class":214},[204,59816,71],{"class":51386},[204,59818,55400],{"class":214},[204,59820,71],{"class":51386},[204,59822,51393],{"class":214},[204,59824,59825,59827,59829,59831,59833],{"class":206,"line":32786},[204,59826,55388],{"class":214},[204,59828,71],{"class":51386},[204,59830,55400],{"class":214},[204,59832,71],{"class":51386},[204,59834,51393],{"class":214},[204,59836,59837,59839,59841,59843,59845],{"class":206,"line":32797},[204,59838,55388],{"class":214},[204,59840,71],{"class":51386},[204,59842,55400],{"class":214},[204,59844,71],{"class":51386},[204,59846,51393],{"class":214},[204,59848,59849,59851,59853,59855,59857],{"class":206,"line":32803},[204,59850,55388],{"class":214},[204,59852,71],{"class":51386},[204,59854,55400],{"class":214},[204,59856,71],{"class":51386},[204,59858,51393],{"class":214},[204,59860,59861,59863,59865,59867,59869],{"class":206,"line":32809},[204,59862,55388],{"class":214},[204,59864,71],{"class":51386},[204,59866,55400],{"class":214},[204,59868,71],{"class":51386},[204,59870,51393],{"class":214},[204,59872,59873,59875,59877,59879,59881],{"class":206,"line":32815},[204,59874,55388],{"class":214},[204,59876,71],{"class":51386},[204,59878,55400],{"class":214},[204,59880,71],{"class":51386},[204,59882,51393],{"class":214},[204,59884,59885,59887,59889],{"class":206,"line":32821},[204,59886,55493],{"class":214},[204,59888,68],{"class":51386},[204,59890,51393],{"class":214},[204,59892,59893,59895,59897,59899,59901,59904],{"class":206,"line":32827},[204,59894,55320],{"class":214},[204,59896,51697],{"class":51386},[204,59898,53572],{"class":2049},[204,59900,260],{"class":214},[204,59902,59903],{"class":319},"\"toggle\"",[204,59905,51393],{"class":214},[204,59907,59908,59910,59912,59914,59916,59919,59921,59924,59926,59928],{"class":206,"line":32833},[204,59909,55388],{"class":214},[204,59911,53973],{"class":51386},[204,59913,53572],{"class":2049},[204,59915,260],{"class":214},[204,59917,59918],{"class":319},"\"prev\"",[204,59920,1173],{"class":214},[204,59922,59923],{"class":263},"&lt;",[204,59925,51871],{"class":214},[204,59927,53973],{"class":51386},[204,59929,51393],{"class":214},[204,59931,59932,59934,59936,59938,59940,59943,59945,59948,59950,59952],{"class":206,"line":32839},[204,59933,55388],{"class":214},[204,59935,53973],{"class":51386},[204,59937,53572],{"class":2049},[204,59939,260],{"class":214},[204,59941,59942],{"class":319},"\"next\"",[204,59944,1173],{"class":214},[204,59946,59947],{"class":263},"&gt;",[204,59949,51871],{"class":214},[204,59951,53973],{"class":51386},[204,59953,51393],{"class":214},[204,59955,59956,59958,59960],{"class":206,"line":32859},[204,59957,55493],{"class":214},[204,59959,51697],{"class":51386},[204,59961,51393],{"class":214},[204,59963,59964,59966,59968],{"class":206,"line":32865},[204,59965,51862],{"class":214},[204,59967,51697],{"class":51386},[204,59969,51393],{"class":214},[204,59971,59972,59974,59976],{"class":206,"line":32881},[204,59973,52503],{"class":214},[204,59975,51697],{"class":51386},[204,59977,51393],{"class":214},[204,59979,59980,59982,59984],{"class":206,"line":32887},[204,59981,52230],{"class":214},[204,59983,51899],{"class":51386},[204,59985,51393],{"class":214},[204,59987,59988],{"class":206,"line":32901},[204,59989,59990],{"class":214},"    \u002F\u002F 1. 初始数据\n",[204,59992,59993],{"class":206,"line":32907},[204,59994,59995],{"class":214},"    const data = [\n",[204,59997,59998],{"class":206,"line":32922},[204,59999,60000],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[204,60002,60003],{"class":206,"line":32928},[204,60004,60005],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[204,60007,60008],{"class":206,"line":32937},[204,60009,60010],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[204,60012,60013],{"class":206,"line":32943},[204,60014,60015],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[204,60017,60018],{"class":206,"line":32952},[204,60019,60020],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[204,60022,60023],{"class":206,"line":32958},[204,60024,60025],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[204,60027,60028],{"class":206,"line":32964},[204,60029,60030],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[204,60032,60033],{"class":206,"line":32973},[204,60034,60035],{"class":214},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[204,60037,60038],{"class":206,"line":32979},[204,60039,53195],{"class":214},[204,60041,60042],{"class":206,"line":32990},[204,60043,60044],{"class":214},"    \u002F\u002F 获取元素\n",[204,60046,60047],{"class":206,"line":32996},[204,60048,60049],{"class":214},"    const img = document.querySelector('.slider-wrapper img')\n",[204,60051,60052],{"class":206,"line":33015},[204,60053,60054],{"class":214},"    const p = document.querySelector('.slider-footer p')\n",[204,60056,60057],{"class":206,"line":33021},[204,60058,60059],{"class":214},"    const footer = document.querySelector('.slider-footer')\n",[204,60061,60062],{"class":206,"line":33032},[204,60063,60064],{"class":214},"    \u002F\u002F 1. 右按钮业务\n",[204,60066,60067],{"class":206,"line":33038},[204,60068,60069],{"class":214},"    \u002F\u002F 1.1 获取右侧按钮 \n",[204,60071,60072],{"class":206,"line":33058},[204,60073,60074],{"class":214},"    const next = document.querySelector('.next')\n",[204,60076,60077],{"class":206,"line":33074},[204,60078,60079],{"class":214},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[204,60081,60082],{"class":206,"line":33080},[204,60083,60084],{"class":214},"    \u002F\u002F 1.2 注册点击事件\n",[204,60086,60087],{"class":206,"line":33094},[204,60088,2486],{"emptyLinePlaceholder":135},[204,60090,60091],{"class":206,"line":33100},[204,60092,60093],{"class":214},"    next.addEventListener('click', function () {\n",[204,60095,60096],{"class":206,"line":33106},[204,60097,60098],{"class":214},"      \u002F\u002F console.log(11)\n",[204,60100,60101],{"class":206,"line":33117},[204,60102,60103],{"class":214},"      i++\n",[204,60105,60106],{"class":206,"line":33123},[204,60107,60108],{"class":214},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[204,60110,60111],{"class":206,"line":33129},[204,60112,60113],{"class":214},"      \u002F\u002F if (i >= 8) {\n",[204,60115,60116],{"class":206,"line":33139},[204,60117,60118],{"class":214},"      \u002F\u002F   i = 0\n",[204,60120,60121],{"class":206,"line":33145},[204,60122,60123],{"class":214},"      \u002F\u002F }\n",[204,60125,60126],{"class":206,"line":33156},[204,60127,60128],{"class":214},"      i = i >= data.length ? 0 : i\n",[204,60130,60131],{"class":206,"line":33162},[204,60132,60133],{"class":214},"      \u002F\u002F 1.3 得到对应的对象\n",[204,60135,60136],{"class":206,"line":33172},[204,60137,60138],{"class":214},"      \u002F\u002F console.log(data[i])\n",[204,60140,60141],{"class":206,"line":33177},[204,60142,60143],{"class":214},"      \u002F\u002F 调用函数\n",[204,60145,60146],{"class":206,"line":33183},[204,60147,60148],{"class":214},"      toggle()\n",[204,60150,60151],{"class":206,"line":33232},[204,60152,33547],{"class":214},[204,60154,60155],{"class":206,"line":33279},[204,60156,2486],{"emptyLinePlaceholder":135},[204,60158,60159],{"class":206,"line":33284},[204,60160,60161],{"class":214},"    \u002F\u002F 2. 左侧按钮业务\n",[204,60163,60164],{"class":206,"line":33290},[204,60165,60166],{"class":214},"    \u002F\u002F 2.1 获取左侧按钮 \n",[204,60168,60169],{"class":206,"line":33309},[204,60170,60171],{"class":214},"    const prev = document.querySelector('.prev')\n",[204,60173,60174],{"class":206,"line":33315},[204,60175,60084],{"class":214},[204,60177,60178],{"class":206,"line":33335},[204,60179,60180],{"class":214},"    prev.addEventListener('click', function () {\n",[204,60182,60183],{"class":206,"line":33341},[204,60184,60185],{"class":214},"      i--\n",[204,60187,60188],{"class":206,"line":33347},[204,60189,60190],{"class":214},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[204,60192,60193],{"class":206,"line":33357},[204,60194,60195],{"class":214},"      \u002F\u002F if (i \u003C 0) {\n",[204,60197,60198],{"class":206,"line":33362},[204,60199,60200],{"class":214},"      \u002F\u002F   i = 7\n",[204,60202,60203],{"class":206,"line":33368},[204,60204,60123],{"class":214},[204,60206,60207],{"class":206,"line":33384},[204,60208,60209],{"class":214},"      i = i \u003C 0 ? data.length - 1 : i\n",[204,60211,60212],{"class":206,"line":33429},[204,60213,60133],{"class":214},[204,60215,60216],{"class":206,"line":33435},[204,60217,60138],{"class":214},[204,60219,60220],{"class":206,"line":33441},[204,60221,60143],{"class":214},[204,60223,60224],{"class":206,"line":33447},[204,60225,60148],{"class":214},[204,60227,60228],{"class":206,"line":33458},[204,60229,33547],{"class":214},[204,60231,60232],{"class":206,"line":33464},[204,60233,2486],{"emptyLinePlaceholder":135},[204,60235,60236],{"class":206,"line":33470},[204,60237,60238],{"class":214},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[204,60240,60241],{"class":206,"line":33476},[204,60242,60243],{"class":214},"    function toggle() {\n",[204,60245,60246],{"class":206,"line":33494},[204,60247,60248],{"class":214},"      \u002F\u002F 1.4 渲染对应的数据\n",[204,60250,60251],{"class":206,"line":33508},[204,60252,60253],{"class":214},"      img.src = data[i].url\n",[204,60255,60256],{"class":206,"line":33517},[204,60257,60258],{"class":214},"      p.innerHTML = data[i].title\n",[204,60260,60261],{"class":206,"line":33526},[204,60262,60263],{"class":214},"      footer.style.backgroundColor = data[i].color\n",[204,60265,60266],{"class":206,"line":33535},[204,60267,60268],{"class":214},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[204,60270,60271],{"class":206,"line":33544},[204,60272,60273],{"class":214},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[204,60275,60276],{"class":206,"line":33550},[204,60277,60278],{"class":214},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[204,60280,60281],{"class":206,"line":33556},[204,60282,2273],{"class":214},[204,60284,60285],{"class":206,"line":33564},[204,60286,2486],{"emptyLinePlaceholder":135},[204,60288,60289],{"class":206,"line":33569},[204,60290,60291],{"class":214},"    \u002F\u002F 3. 自动播放模块\n",[204,60293,60294],{"class":206,"line":33575},[204,60295,60296],{"class":214},"    let timerId = setInterval(function () {\n",[204,60298,60299],{"class":206,"line":33586},[204,60300,60301],{"class":214},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[204,60303,60304],{"class":206,"line":33592},[204,60305,60306],{"class":214},"      next.click()\n",[204,60308,60309],{"class":206,"line":33612},[204,60310,60311],{"class":214},"    }, 1000)\n",[204,60313,60314],{"class":206,"line":33618},[204,60315,2486],{"emptyLinePlaceholder":135},[204,60317,60318],{"class":206,"line":33624},[204,60319,60320],{"class":214},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[204,60322,60323],{"class":206,"line":33630},[204,60324,60325],{"class":214},"    const slider = document.querySelector('.slider')\n",[204,60327,60328],{"class":206,"line":33647},[204,60329,60330],{"class":214},"    \u002F\u002F 注册事件\n",[204,60332,60333],{"class":206,"line":33653},[204,60334,60335],{"class":214},"    slider.addEventListener('mouseenter', function () {\n",[204,60337,60338],{"class":206,"line":33659},[204,60339,60340],{"class":214},"      \u002F\u002F 停止定时器\n",[204,60342,60343],{"class":206,"line":33665},[204,60344,60345],{"class":214},"      clearInterval(timerId)\n",[204,60347,60348],{"class":206,"line":33671},[204,60349,33547],{"class":214},[204,60351,60352],{"class":206,"line":33677},[204,60353,2486],{"emptyLinePlaceholder":135},[204,60355,60356],{"class":206,"line":33704},[204,60357,60358],{"class":214},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[204,60360,60361],{"class":206,"line":33728},[204,60362,60330],{"class":214},[204,60364,60365],{"class":206,"line":33734},[204,60366,60367],{"class":214},"    slider.addEventListener('mouseleave', function () {\n",[204,60369,60370],{"class":206,"line":33740},[204,60371,60340],{"class":214},[204,60373,60374],{"class":206,"line":33746},[204,60375,60376],{"class":214},"      if (timerId) clearInterval(timerId)\n",[204,60378,60379],{"class":206,"line":33757},[204,60380,60381],{"class":214},"      \u002F\u002F 开启定时器\n",[204,60383,60384],{"class":206,"line":33768},[204,60385,60386],{"class":214},"      timerId = setInterval(function () {\n",[204,60388,60389],{"class":206,"line":33774},[204,60390,60391],{"class":214},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[204,60393,60394],{"class":206,"line":33791},[204,60395,60396],{"class":214},"        next.click()\n",[204,60398,60399],{"class":206,"line":33814},[204,60400,60401],{"class":214},"      }, 1000)\n",[204,60403,60404],{"class":206,"line":33837},[204,60405,33547],{"class":214},[204,60407,60408,60410,60412],{"class":206,"line":33843},[204,60409,52503],{"class":214},[204,60411,51899],{"class":51386},[204,60413,51393],{"class":214},[204,60415,60416,60418,60420],{"class":206,"line":33848},[204,60417,51871],{"class":214},[204,60419,51886],{"class":51386},[204,60421,51393],{"class":214},[204,60423,60424],{"class":206,"line":33857},[204,60425,2486],{"emptyLinePlaceholder":135},[204,60427,60428,60430,60432],{"class":206,"line":33867},[204,60429,51871],{"class":214},[204,60431,50721],{"class":51386},[204,60433,51393],{"class":214},[22085,60435,60437],{"id":60436},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60439,60440],{},"小米搜索框案例：",[196,60442,60444],{"className":50719,"code":60443,"language":50721,"meta":125,"style":125},"\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",[81,60445,60446,60456,60470,60474,60482,60496,60516,60536,60548,60556,60562,60572,60582,60594,60598,60602,60609,60613,60624,60628,60632,60639,60650,60663,60677,60681,60685,60694,60706,60718,60732,60745,60758,60776,60787,60791,60795,60804,60821,60825,60829,60836,60846,60856,60867,60880,60892,60908,60919,60931,60935,60939,60947,60958,60975,60987,60999,61010,61014,61018,61029,61040,61044,61052,61056,61064,61068,61076,61091,61114,61129,61160,61187,61214,61241,61268,61295,61322,61331,61339,61347,61352,61372,61392,61397,61402,61420,61425,61435,61440,61454,61459,61464,61481,61490,61502,61506,61514,61522,61526],{"__ignoreMap":125},[204,60447,60448,60450,60452,60454],{"class":206,"line":207},[204,60449,51383],{"class":214},[204,60451,51387],{"class":51386},[204,60453,51390],{"class":2049},[204,60455,51393],{"class":214},[204,60457,60458,60460,60462,60464,60466,60468],{"class":206,"line":126},[204,60459,1123],{"class":214},[204,60461,50721],{"class":51386},[204,60463,51402],{"class":2049},[204,60465,260],{"class":214},[204,60467,51407],{"class":319},[204,60469,51393],{"class":214},[204,60471,60472],{"class":206,"line":131},[204,60473,2486],{"emptyLinePlaceholder":135},[204,60475,60476,60478,60480],{"class":206,"line":1281},[204,60477,1123],{"class":214},[204,60479,51420],{"class":51386},[204,60481,51393],{"class":214},[204,60483,60484,60486,60488,60490,60492,60494],{"class":206,"line":1287},[204,60485,51427],{"class":214},[204,60487,51430],{"class":51386},[204,60489,51433],{"class":2049},[204,60491,260],{"class":214},[204,60493,51438],{"class":319},[204,60495,51393],{"class":214},[204,60497,60498,60500,60502,60504,60506,60508,60510,60512,60514],{"class":206,"line":1301},[204,60499,51427],{"class":214},[204,60501,51430],{"class":51386},[204,60503,51449],{"class":2049},[204,60505,260],{"class":214},[204,60507,51454],{"class":319},[204,60509,51457],{"class":2049},[204,60511,260],{"class":214},[204,60513,51462],{"class":319},[204,60515,51393],{"class":214},[204,60517,60518,60520,60522,60524,60526,60528,60530,60532,60534],{"class":206,"line":1307},[204,60519,51427],{"class":214},[204,60521,51430],{"class":51386},[204,60523,15007],{"class":2049},[204,60525,260],{"class":214},[204,60527,51477],{"class":319},[204,60529,51457],{"class":2049},[204,60531,260],{"class":214},[204,60533,51484],{"class":319},[204,60535,51393],{"class":214},[204,60537,60538,60540,60542,60544,60546],{"class":206,"line":1398},[204,60539,51427],{"class":214},[204,60541,51493],{"class":51386},[204,60543,51496],{"class":214},[204,60545,51493],{"class":51386},[204,60547,51393],{"class":214},[204,60549,60550,60552,60554],{"class":206,"line":1404},[204,60551,51427],{"class":214},[204,60553,5213],{"class":51386},[204,60555,51393],{"class":214},[204,60557,60558,60560],{"class":206,"line":1416},[204,60559,51513],{"class":51386},[204,60561,15659],{"class":214},[204,60563,60564,60566,60568,60570],{"class":206,"line":1698},[204,60565,51520],{"class":263},[204,60567,51523],{"class":214},[204,60569,405],{"class":263},[204,60571,1377],{"class":214},[204,60573,60574,60576,60578,60580],{"class":206,"line":1703},[204,60575,51532],{"class":263},[204,60577,51523],{"class":214},[204,60579,405],{"class":263},[204,60581,1377],{"class":214},[204,60583,60584,60587,60589,60592],{"class":206,"line":1709},[204,60585,60586],{"class":263},"            box-sizing",[204,60588,51523],{"class":214},[204,60590,60591],{"class":263},"border-box",[204,60593,1377],{"class":214},[204,60595,60596],{"class":206,"line":1714},[204,60597,2615],{"class":214},[204,60599,60600],{"class":206,"line":1728},[204,60601,2486],{"emptyLinePlaceholder":135},[204,60603,60604,60607],{"class":206,"line":1733},[204,60605,60606],{"class":51386},"        ul",[204,60608,15659],{"class":214},[204,60610,60611],{"class":206,"line":1739},[204,60612,2486],{"emptyLinePlaceholder":135},[204,60614,60615,60618,60620,60622],{"class":206,"line":1760},[204,60616,60617],{"class":263},"            list-style",[204,60619,51523],{"class":214},[204,60621,54823],{"class":263},[204,60623,1377],{"class":214},[204,60625,60626],{"class":206,"line":1765},[204,60627,2615],{"class":214},[204,60629,60630],{"class":206,"line":1779},[204,60631,2486],{"emptyLinePlaceholder":135},[204,60633,60634,60637],{"class":206,"line":1784},[204,60635,60636],{"class":2049},"        .mi",[204,60638,15659],{"class":214},[204,60640,60641,60644,60646,60648],{"class":206,"line":1813},[204,60642,60643],{"class":263},"            position",[204,60645,51523],{"class":214},[204,60647,54850],{"class":263},[204,60649,1377],{"class":214},[204,60651,60652,60654,60656,60659,60661],{"class":206,"line":1818},[204,60653,51570],{"class":263},[204,60655,51523],{"class":214},[204,60657,60658],{"class":263},"223",[204,60660,51578],{"class":210},[204,60662,1377],{"class":214},[204,60664,60665,60667,60669,60671,60673,60675],{"class":206,"line":1835},[204,60666,51520],{"class":263},[204,60668,51523],{"class":214},[204,60670,524],{"class":263},[204,60672,51578],{"class":210},[204,60674,51642],{"class":263},[204,60676,1377],{"class":214},[204,60678,60679],{"class":206,"line":1840},[204,60680,2615],{"class":214},[204,60682,60683],{"class":206,"line":1845},[204,60684,2486],{"emptyLinePlaceholder":135},[204,60686,60687,60689,60692],{"class":206,"line":1850},[204,60688,60636],{"class":2049},[204,60690,60691],{"class":51386}," input",[204,60693,15659],{"class":214},[204,60695,60696,60698,60700,60702,60704],{"class":206,"line":1864},[204,60697,51570],{"class":263},[204,60699,51523],{"class":214},[204,60701,60658],{"class":263},[204,60703,51578],{"class":210},[204,60705,1377],{"class":214},[204,60707,60708,60710,60712,60714,60716],{"class":206,"line":1869},[204,60709,51585],{"class":263},[204,60711,51523],{"class":214},[204,60713,820],{"class":263},[204,60715,51578],{"class":210},[204,60717,1377],{"class":214},[204,60719,60720,60722,60724,60726,60728,60730],{"class":206,"line":2663},[204,60721,51532],{"class":263},[204,60723,51523],{"class":214},[204,60725,405],{"class":263},[204,60727,2124],{"class":263},[204,60729,51578],{"class":210},[204,60731,1377],{"class":214},[204,60733,60734,60737,60739,60741,60743],{"class":206,"line":2677},[204,60735,60736],{"class":263},"            font-size",[204,60738,51523],{"class":214},[204,60740,762],{"class":263},[204,60742,51578],{"class":210},[204,60744,1377],{"class":214},[204,60746,60747,60750,60752,60754,60756],{"class":206,"line":2685},[204,60748,60749],{"class":263},"            line-height",[204,60751,51523],{"class":214},[204,60753,820],{"class":263},[204,60755,51578],{"class":210},[204,60757,1377],{"class":214},[204,60759,60760,60763,60765,60767,60769,60771,60774],{"class":206,"line":2690},[204,60761,60762],{"class":263},"            border",[204,60764,51523],{"class":214},[204,60766,431],{"class":263},[204,60768,51578],{"class":210},[204,60770,51607],{"class":263},[204,60772,60773],{"class":263}," #e0e0e0",[204,60775,1377],{"class":214},[204,60777,60778,60781,60783,60785],{"class":206,"line":2696},[204,60779,60780],{"class":263},"            outline",[204,60782,51523],{"class":214},[204,60784,54823],{"class":263},[204,60786,1377],{"class":214},[204,60788,60789],{"class":206,"line":2702},[204,60790,2615],{"class":214},[204,60792,60793],{"class":206,"line":2707},[204,60794,2486],{"emptyLinePlaceholder":135},[204,60796,60797,60799,60802],{"class":206,"line":8035},[204,60798,60636],{"class":2049},[204,60800,60801],{"class":2049}," .search",[204,60803,15659],{"class":214},[204,60805,60806,60808,60810,60812,60814,60816,60819],{"class":206,"line":8059},[204,60807,60762],{"class":263},[204,60809,51523],{"class":214},[204,60811,431],{"class":263},[204,60813,51578],{"class":210},[204,60815,51607],{"class":263},[204,60817,60818],{"class":263}," #ff6700",[204,60820,1377],{"class":214},[204,60822,60823],{"class":206,"line":8064},[204,60824,2615],{"class":214},[204,60826,60827],{"class":206,"line":8070},[204,60828,2486],{"emptyLinePlaceholder":135},[204,60830,60831,60834],{"class":206,"line":8097},[204,60832,60833],{"class":2049},"        .result-list",[204,60835,15659],{"class":214},[204,60837,60838,60840,60842,60844],{"class":206,"line":8102},[204,60839,51558],{"class":263},[204,60841,51523],{"class":214},[204,60843,54823],{"class":263},[204,60845,1377],{"class":214},[204,60847,60848,60850,60852,60854],{"class":206,"line":8108},[204,60849,60643],{"class":263},[204,60851,51523],{"class":214},[204,60853,54917],{"class":263},[204,60855,1377],{"class":214},[204,60857,60858,60861,60863,60865],{"class":206,"line":8120},[204,60859,60860],{"class":263},"            left",[204,60862,51523],{"class":214},[204,60864,405],{"class":263},[204,60866,1377],{"class":214},[204,60868,60869,60872,60874,60876,60878],{"class":206,"line":8132},[204,60870,60871],{"class":263},"            top",[204,60873,51523],{"class":214},[204,60875,820],{"class":263},[204,60877,51578],{"class":210},[204,60879,1377],{"class":214},[204,60881,60882,60884,60886,60888,60890],{"class":206,"line":8144},[204,60883,51570],{"class":263},[204,60885,51523],{"class":214},[204,60887,60658],{"class":263},[204,60889,51578],{"class":210},[204,60891,1377],{"class":214},[204,60893,60894,60896,60898,60900,60902,60904,60906],{"class":206,"line":9803},[204,60895,60762],{"class":263},[204,60897,51523],{"class":214},[204,60899,431],{"class":263},[204,60901,51578],{"class":210},[204,60903,51607],{"class":263},[204,60905,60818],{"class":263},[204,60907,1377],{"class":214},[204,60909,60910,60913,60915,60917],{"class":206,"line":9828},[204,60911,60912],{"class":263},"            border-top",[204,60914,51523],{"class":214},[204,60916,405],{"class":263},[204,60918,1377],{"class":214},[204,60920,60921,60924,60926,60929],{"class":206,"line":9851},[204,60922,60923],{"class":263},"            background",[204,60925,51523],{"class":214},[204,60927,60928],{"class":263},"#fff",[204,60930,1377],{"class":214},[204,60932,60933],{"class":206,"line":9875},[204,60934,2615],{"class":214},[204,60936,60937],{"class":206,"line":9880},[204,60938,2486],{"emptyLinePlaceholder":135},[204,60940,60941,60943,60945],{"class":206,"line":9885},[204,60942,60833],{"class":2049},[204,60944,1485],{"class":51386},[204,60946,15659],{"class":214},[204,60948,60949,60951,60953,60956],{"class":206,"line":9890},[204,60950,51558],{"class":263},[204,60952,51523],{"class":214},[204,60954,60955],{"class":263},"block",[204,60957,1377],{"class":214},[204,60959,60960,60962,60964,60966,60968,60971,60973],{"class":206,"line":9899},[204,60961,51532],{"class":263},[204,60963,51523],{"class":214},[204,60965,557],{"class":263},[204,60967,51578],{"class":210},[204,60969,60970],{"class":263}," 15",[204,60972,51578],{"class":210},[204,60974,1377],{"class":214},[204,60976,60977,60979,60981,60983,60985],{"class":206,"line":9904},[204,60978,60736],{"class":263},[204,60980,51523],{"class":214},[204,60982,711],{"class":263},[204,60984,51578],{"class":210},[204,60986,1377],{"class":214},[204,60988,60989,60992,60994,60997],{"class":206,"line":9910},[204,60990,60991],{"class":263},"            color",[204,60993,51523],{"class":214},[204,60995,60996],{"class":263},"#424242",[204,60998,1377],{"class":214},[204,61000,61001,61004,61006,61008],{"class":206,"line":9931},[204,61002,61003],{"class":263},"            text-decoration",[204,61005,51523],{"class":214},[204,61007,54823],{"class":263},[204,61009,1377],{"class":214},[204,61011,61012],{"class":206,"line":9937},[204,61013,2615],{"class":214},[204,61015,61016],{"class":206,"line":9951},[204,61017,2486],{"emptyLinePlaceholder":135},[204,61019,61020,61022,61024,61027],{"class":206,"line":9957},[204,61021,60833],{"class":2049},[204,61023,1485],{"class":51386},[204,61025,61026],{"class":2049},":hover",[204,61028,15659],{"class":214},[204,61030,61031,61033,61035,61038],{"class":206,"line":9984},[204,61032,51726],{"class":263},[204,61034,51523],{"class":214},[204,61036,61037],{"class":263},"#eee",[204,61039,1377],{"class":214},[204,61041,61042],{"class":206,"line":9993},[204,61043,2615],{"class":214},[204,61045,61046,61048,61050],{"class":206,"line":9999},[204,61047,51862],{"class":214},[204,61049,5213],{"class":51386},[204,61051,51393],{"class":214},[204,61053,61054],{"class":206,"line":10007},[204,61055,2486],{"emptyLinePlaceholder":135},[204,61057,61058,61060,61062],{"class":206,"line":10012},[204,61059,51871],{"class":214},[204,61061,51420],{"class":51386},[204,61063,51393],{"class":214},[204,61065,61066],{"class":206,"line":16691},[204,61067,2486],{"emptyLinePlaceholder":135},[204,61069,61070,61072,61074],{"class":206,"line":16697},[204,61071,1123],{"class":214},[204,61073,51886],{"class":51386},[204,61075,51393],{"class":214},[204,61077,61078,61080,61082,61084,61086,61089],{"class":206,"line":16720},[204,61079,51427],{"class":214},[204,61081,51697],{"class":51386},[204,61083,53572],{"class":2049},[204,61085,260],{"class":214},[204,61087,61088],{"class":319},"\"mi\"",[204,61090,51393],{"class":214},[204,61092,61093,61095,61097,61099,61101,61104,61107,61109,61112],{"class":206,"line":16726},[204,61094,55388],{"class":214},[204,61096,53907],{"class":51386},[204,61098,53910],{"class":2049},[204,61100,260],{"class":214},[204,61102,61103],{"class":319},"\"search\"",[204,61105,61106],{"class":2049}," placeholder",[204,61108,260],{"class":214},[204,61110,61111],{"class":319},"\"小米笔记本\"",[204,61113,51393],{"class":214},[204,61115,61116,61118,61120,61122,61124,61127],{"class":206,"line":16749},[204,61117,55388],{"class":214},[204,61119,68],{"class":51386},[204,61121,53572],{"class":2049},[204,61123,260],{"class":214},[204,61125,61126],{"class":319},"\"result-list\"",[204,61128,51393],{"class":214},[204,61130,61131,61134,61136,61139,61141,61144,61146,61149,61152,61154,61156,61158],{"class":206,"line":16763},[204,61132,61133],{"class":214},"            \u003C",[204,61135,71],{"class":51386},[204,61137,61138],{"class":214},">\u003C",[204,61140,62],{"class":51386},[204,61142,61143],{"class":2049}," href",[204,61145,260],{"class":214},[204,61147,61148],{"class":319},"\"#\"",[204,61150,61151],{"class":214},">全部商品\u003C\u002F",[204,61153,62],{"class":51386},[204,61155,55400],{"class":214},[204,61157,71],{"class":51386},[204,61159,51393],{"class":214},[204,61161,61162,61164,61166,61168,61170,61172,61174,61176,61179,61181,61183,61185],{"class":206,"line":16783},[204,61163,61133],{"class":214},[204,61165,71],{"class":51386},[204,61167,61138],{"class":214},[204,61169,62],{"class":51386},[204,61171,61143],{"class":2049},[204,61173,260],{"class":214},[204,61175,61148],{"class":319},[204,61177,61178],{"class":214},">小米11\u003C\u002F",[204,61180,62],{"class":51386},[204,61182,55400],{"class":214},[204,61184,71],{"class":51386},[204,61186,51393],{"class":214},[204,61188,61189,61191,61193,61195,61197,61199,61201,61203,61206,61208,61210,61212],{"class":206,"line":16789},[204,61190,61133],{"class":214},[204,61192,71],{"class":51386},[204,61194,61138],{"class":214},[204,61196,62],{"class":51386},[204,61198,61143],{"class":2049},[204,61200,260],{"class":214},[204,61202,61148],{"class":319},[204,61204,61205],{"class":214},">小米10S\u003C\u002F",[204,61207,62],{"class":51386},[204,61209,55400],{"class":214},[204,61211,71],{"class":51386},[204,61213,51393],{"class":214},[204,61215,61216,61218,61220,61222,61224,61226,61228,61230,61233,61235,61237,61239],{"class":206,"line":16800},[204,61217,61133],{"class":214},[204,61219,71],{"class":51386},[204,61221,61138],{"class":214},[204,61223,62],{"class":51386},[204,61225,61143],{"class":2049},[204,61227,260],{"class":214},[204,61229,61148],{"class":319},[204,61231,61232],{"class":214},">小米笔记本\u003C\u002F",[204,61234,62],{"class":51386},[204,61236,55400],{"class":214},[204,61238,71],{"class":51386},[204,61240,51393],{"class":214},[204,61242,61243,61245,61247,61249,61251,61253,61255,61257,61260,61262,61264,61266],{"class":206,"line":16823},[204,61244,61133],{"class":214},[204,61246,71],{"class":51386},[204,61248,61138],{"class":214},[204,61250,62],{"class":51386},[204,61252,61143],{"class":2049},[204,61254,260],{"class":214},[204,61256,61148],{"class":319},[204,61258,61259],{"class":214},">小米手机\u003C\u002F",[204,61261,62],{"class":51386},[204,61263,55400],{"class":214},[204,61265,71],{"class":51386},[204,61267,51393],{"class":214},[204,61269,61270,61272,61274,61276,61278,61280,61282,61284,61287,61289,61291,61293],{"class":206,"line":16845},[204,61271,61133],{"class":214},[204,61273,71],{"class":51386},[204,61275,61138],{"class":214},[204,61277,62],{"class":51386},[204,61279,61143],{"class":2049},[204,61281,260],{"class":214},[204,61283,61148],{"class":319},[204,61285,61286],{"class":214},">黑鲨4\u003C\u002F",[204,61288,62],{"class":51386},[204,61290,55400],{"class":214},[204,61292,71],{"class":51386},[204,61294,51393],{"class":214},[204,61296,61297,61299,61301,61303,61305,61307,61309,61311,61314,61316,61318,61320],{"class":206,"line":16850},[204,61298,61133],{"class":214},[204,61300,71],{"class":51386},[204,61302,61138],{"class":214},[204,61304,62],{"class":51386},[204,61306,61143],{"class":2049},[204,61308,260],{"class":214},[204,61310,61148],{"class":319},[204,61312,61313],{"class":214},">空调\u003C\u002F",[204,61315,62],{"class":51386},[204,61317,55400],{"class":214},[204,61319,71],{"class":51386},[204,61321,51393],{"class":214},[204,61323,61324,61327,61329],{"class":206,"line":16856},[204,61325,61326],{"class":214},"        \u003C\u002F",[204,61328,68],{"class":51386},[204,61330,51393],{"class":214},[204,61332,61333,61335,61337],{"class":206,"line":16870},[204,61334,51862],{"class":214},[204,61336,51697],{"class":51386},[204,61338,51393],{"class":214},[204,61340,61341,61343,61345],{"class":206,"line":16883},[204,61342,51427],{"class":214},[204,61344,51899],{"class":51386},[204,61346,51393],{"class":214},[204,61348,61349],{"class":206,"line":16888},[204,61350,61351],{"class":273},"        \u002F\u002F 1. 获取元素\n",[204,61353,61354,61357,61359,61361,61363,61365,61367,61370],{"class":206,"line":16902},[204,61355,61356],{"class":210},"        const",[204,61358,60691],{"class":263},[204,61360,13651],{"class":210},[204,61362,54482],{"class":214},[204,61364,54485],{"class":2049},[204,61366,215],{"class":214},[204,61368,61369],{"class":319},"'[type=search]'",[204,61371,221],{"class":214},[204,61373,61374,61376,61379,61381,61383,61385,61387,61390],{"class":206,"line":16907},[204,61375,61356],{"class":210},[204,61377,61378],{"class":263}," ul",[204,61380,13651],{"class":210},[204,61382,54482],{"class":214},[204,61384,54485],{"class":2049},[204,61386,215],{"class":214},[204,61388,61389],{"class":319},"'.result-list'",[204,61391,221],{"class":214},[204,61393,61394],{"class":206,"line":16913},[204,61395,61396],{"class":273},"        \u002F\u002F console.log(input)\n",[204,61398,61399],{"class":206,"line":16918},[204,61400,61401],{"class":273},"        \u002F\u002F 2. 监听事件 获得焦点\n",[204,61403,61404,61407,61409,61411,61414,61416,61418],{"class":206,"line":16932},[204,61405,61406],{"class":214},"        input.",[204,61408,57899],{"class":2049},[204,61410,215],{"class":214},[204,61412,61413],{"class":319},"'focus'",[204,61415,12522],{"class":214},[204,61417,54535],{"class":210},[204,61419,54538],{"class":214},[204,61421,61422],{"class":206,"line":16937},[204,61423,61424],{"class":273},"            \u002F\u002F ul显示\n",[204,61426,61427,61430,61432],{"class":206,"line":16942},[204,61428,61429],{"class":214},"            ul.style.display ",[204,61431,260],{"class":210},[204,61433,61434],{"class":319}," 'block'\n",[204,61436,61437],{"class":206,"line":16956},[204,61438,61439],{"class":273},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[204,61441,61442,61445,61447,61449,61452],{"class":206,"line":16968},[204,61443,61444],{"class":214},"            input.classList.",[204,61446,5421],{"class":2049},[204,61448,215],{"class":214},[204,61450,61451],{"class":319},"'search'",[204,61453,221],{"class":214},[204,61455,61456],{"class":206,"line":16973},[204,61457,61458],{"class":214},"        })\n",[204,61460,61461],{"class":206,"line":16986},[204,61462,61463],{"class":273},"        \u002F\u002F 3. 监听事件 失去焦点\n",[204,61465,61466,61468,61470,61472,61475,61477,61479],{"class":206,"line":16991},[204,61467,61406],{"class":214},[204,61469,57899],{"class":2049},[204,61471,215],{"class":214},[204,61473,61474],{"class":319},"'blur'",[204,61476,12522],{"class":214},[204,61478,54535],{"class":210},[204,61480,54538],{"class":214},[204,61482,61483,61485,61487],{"class":206,"line":16996},[204,61484,61429],{"class":214},[204,61486,260],{"class":210},[204,61488,61489],{"class":319}," 'none'\n",[204,61491,61492,61494,61496,61498,61500],{"class":206,"line":17001},[204,61493,61444],{"class":214},[204,61495,57092],{"class":2049},[204,61497,215],{"class":214},[204,61499,61451],{"class":319},[204,61501,221],{"class":214},[204,61503,61504],{"class":206,"line":17014},[204,61505,61458],{"class":214},[204,61507,61508,61510,61512],{"class":206,"line":17019},[204,61509,51862],{"class":214},[204,61511,51899],{"class":51386},[204,61513,51393],{"class":214},[204,61515,61516,61518,61520],{"class":206,"line":32719},[204,61517,51871],{"class":214},[204,61519,51886],{"class":51386},[204,61521,51393],{"class":214},[204,61523,61524],{"class":206,"line":32725},[204,61525,2486],{"emptyLinePlaceholder":135},[204,61527,61528,61530,61532],{"class":206,"line":32731},[204,61529,51871],{"class":214},[204,61531,50721],{"class":51386},[204,61533,51393],{"class":214},[22085,61535,61537],{"id":61536},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61539,61540],{},"评论字数统计案例",[19,61542,61543],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61545,61546],{},"牢记focus伪类选择器",[51430,61548],{"charSet":61549},"UTF-8",[51430,61551],{"name":61552,"content":61553},"viewport","width=device-width, initial-scale=1.0",[51493,61555,61556],{},"Document",[5213,61558,61559],{},"\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",[53907,61561],{"type":5274},[68,61563,61564,61567],{},[71,61565,61566],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[71,61568,61569],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[196,61571,61573],{"className":50719,"code":61572,"language":50721,"meta":125,"style":125},"\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",[81,61574,61575,61585,61599,61603,61611,61625,61645,61665,61678,61686,61693,61706,61720,61730,61740,61744,61748,61755,61767,61779,61791,61803,61832,61845,61849,61853,61862,61873,61885,61896,61907,61919,61930,61942,61958,61970,61974,61978,61989,62000,62010,62022,62026,62030,62038,62049,62059,62070,62082,62095,62107,62119,62123,62127,62136,62148,62159,62172,62183,62197,62201,62205,62212,62224,62236,62246,62250,62254,62263,62275,62285,62289,62293,62304,62314,62333,62346,62350,62354,62364,62374,62378,62382,62393,62404,62416,62428,62432,62436,62447,62458,62472,62476,62480,62491,62501,62513,62517,62525,62533,62537,62545,62560,62579,62619,62632,62640,62654,62674,62682,62697,62720,62738,62753,62773,62793,62813,62821,62829,62837,62845,62865,62885,62890,62907,62916,62920,62925,62941,62949,62953,62958,62975,62980,63005,63009,63013,63018,63023,63031,63039,63043],{"__ignoreMap":125},[204,61576,61577,61579,61581,61583],{"class":206,"line":207},[204,61578,51383],{"class":214},[204,61580,51387],{"class":51386},[204,61582,51390],{"class":2049},[204,61584,51393],{"class":214},[204,61586,61587,61589,61591,61593,61595,61597],{"class":206,"line":126},[204,61588,1123],{"class":214},[204,61590,50721],{"class":51386},[204,61592,51402],{"class":2049},[204,61594,260],{"class":214},[204,61596,51407],{"class":319},[204,61598,51393],{"class":214},[204,61600,61601],{"class":206,"line":131},[204,61602,2486],{"emptyLinePlaceholder":135},[204,61604,61605,61607,61609],{"class":206,"line":1281},[204,61606,1123],{"class":214},[204,61608,51420],{"class":51386},[204,61610,51393],{"class":214},[204,61612,61613,61615,61617,61619,61621,61623],{"class":206,"line":1287},[204,61614,52230],{"class":214},[204,61616,51430],{"class":51386},[204,61618,51433],{"class":2049},[204,61620,260],{"class":214},[204,61622,51438],{"class":319},[204,61624,51393],{"class":214},[204,61626,61627,61629,61631,61633,61635,61637,61639,61641,61643],{"class":206,"line":1301},[204,61628,52230],{"class":214},[204,61630,51430],{"class":51386},[204,61632,51449],{"class":2049},[204,61634,260],{"class":214},[204,61636,51454],{"class":319},[204,61638,51457],{"class":2049},[204,61640,260],{"class":214},[204,61642,51462],{"class":319},[204,61644,51393],{"class":214},[204,61646,61647,61649,61651,61653,61655,61657,61659,61661,61663],{"class":206,"line":1307},[204,61648,52230],{"class":214},[204,61650,51430],{"class":51386},[204,61652,15007],{"class":2049},[204,61654,260],{"class":214},[204,61656,51477],{"class":319},[204,61658,51457],{"class":2049},[204,61660,260],{"class":214},[204,61662,51484],{"class":319},[204,61664,51393],{"class":214},[204,61666,61667,61669,61671,61674,61676],{"class":206,"line":1398},[204,61668,52230],{"class":214},[204,61670,51493],{"class":51386},[204,61672,61673],{"class":214},">评论回车发布\u003C\u002F",[204,61675,51493],{"class":51386},[204,61677,51393],{"class":214},[204,61679,61680,61682,61684],{"class":206,"line":1404},[204,61681,52230],{"class":214},[204,61683,5213],{"class":51386},[204,61685,51393],{"class":214},[204,61687,61688,61691],{"class":206,"line":1416},[204,61689,61690],{"class":2049},"    .wrapper",[204,61692,15659],{"class":214},[204,61694,61695,61698,61700,61702,61704],{"class":206,"line":1698},[204,61696,61697],{"class":263},"      min-width",[204,61699,51523],{"class":214},[204,61701,4073],{"class":263},[204,61703,51578],{"class":210},[204,61705,1377],{"class":214},[204,61707,61708,61711,61713,61716,61718],{"class":206,"line":1703},[204,61709,61710],{"class":263},"      max-width",[204,61712,51523],{"class":214},[204,61714,61715],{"class":263},"800",[204,61717,51578],{"class":210},[204,61719,1377],{"class":214},[204,61721,61722,61724,61726,61728],{"class":206,"line":1709},[204,61723,55095],{"class":263},[204,61725,51523],{"class":214},[204,61727,51563],{"class":263},[204,61729,1377],{"class":214},[204,61731,61732,61734,61736,61738],{"class":206,"line":1714},[204,61733,55106],{"class":263},[204,61735,51523],{"class":214},[204,61737,51666],{"class":263},[204,61739,1377],{"class":214},[204,61741,61742],{"class":206,"line":1728},[204,61743,2273],{"class":214},[204,61745,61746],{"class":206,"line":1733},[204,61747,2486],{"emptyLinePlaceholder":135},[204,61749,61750,61753],{"class":206,"line":1739},[204,61751,61752],{"class":2049},"    .avatar",[204,61754,15659],{"class":214},[204,61756,61757,61759,61761,61763,61765],{"class":206,"line":1760},[204,61758,54857],{"class":263},[204,61760,51523],{"class":214},[204,61762,820],{"class":263},[204,61764,51578],{"class":210},[204,61766,1377],{"class":214},[204,61768,61769,61771,61773,61775,61777],{"class":206,"line":1765},[204,61770,54871],{"class":263},[204,61772,51523],{"class":214},[204,61774,820],{"class":263},[204,61776,51578],{"class":210},[204,61778,1377],{"class":214},[204,61780,61781,61783,61785,61787,61789],{"class":206,"line":1779},[204,61782,55220],{"class":263},[204,61784,51523],{"class":214},[204,61786,869],{"class":263},[204,61788,541],{"class":210},[204,61790,1377],{"class":214},[204,61792,61793,61796,61798,61801],{"class":206,"line":1784},[204,61794,61795],{"class":263},"      overflow",[204,61797,51523],{"class":214},[204,61799,61800],{"class":263},"hidden",[204,61802,1377],{"class":214},[204,61804,61805,61808,61810,61813,61815,61818,61820,61823,61825,61827,61830],{"class":206,"line":1813},[204,61806,61807],{"class":263},"      background",[204,61809,51523],{"class":214},[204,61811,61812],{"class":263},"url",[204,61814,215],{"class":214},[204,61816,61817],{"class":5303},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[204,61819,13801],{"class":214},[204,61821,61822],{"class":263},"no-repeat",[204,61824,17231],{"class":263},[204,61826,25065],{"class":214},[204,61828,61829],{"class":263},"cover",[204,61831,1377],{"class":214},[204,61833,61834,61837,61839,61841,61843],{"class":206,"line":1818},[204,61835,61836],{"class":263},"      margin-right",[204,61838,51523],{"class":214},[204,61840,913],{"class":263},[204,61842,51578],{"class":210},[204,61844,1377],{"class":214},[204,61846,61847],{"class":206,"line":1835},[204,61848,2273],{"class":214},[204,61850,61851],{"class":206,"line":1840},[204,61852,2486],{"emptyLinePlaceholder":135},[204,61854,61855,61857,61860],{"class":206,"line":1845},[204,61856,61690],{"class":2049},[204,61858,61859],{"class":51386}," textarea",[204,61861,15659],{"class":214},[204,61863,61864,61867,61869,61871],{"class":206,"line":1850},[204,61865,61866],{"class":263},"      outline",[204,61868,51523],{"class":214},[204,61870,54823],{"class":263},[204,61872,1377],{"class":214},[204,61874,61875,61878,61880,61883],{"class":206,"line":1864},[204,61876,61877],{"class":263},"      border-color",[204,61879,51523],{"class":214},[204,61881,61882],{"class":263},"transparent",[204,61884,1377],{"class":214},[204,61886,61887,61890,61892,61894],{"class":206,"line":1869},[204,61888,61889],{"class":263},"      resize",[204,61891,51523],{"class":214},[204,61893,54823],{"class":263},[204,61895,1377],{"class":214},[204,61897,61898,61900,61902,61905],{"class":206,"line":2663},[204,61899,61807],{"class":263},[204,61901,51523],{"class":214},[204,61903,61904],{"class":263},"#f5f5f5",[204,61906,1377],{"class":214},[204,61908,61909,61911,61913,61915,61917],{"class":206,"line":2677},[204,61910,55220],{"class":263},[204,61912,51523],{"class":214},[204,61914,506],{"class":263},[204,61916,51578],{"class":210},[204,61918,1377],{"class":214},[204,61920,61921,61924,61926,61928],{"class":206,"line":2685},[204,61922,61923],{"class":263},"      flex",[204,61925,51523],{"class":214},[204,61927,431],{"class":263},[204,61929,1377],{"class":214},[204,61931,61932,61934,61936,61938,61940],{"class":206,"line":2690},[204,61933,54781],{"class":263},[204,61935,51523],{"class":214},[204,61937,659],{"class":263},[204,61939,51578],{"class":210},[204,61941,1377],{"class":214},[204,61943,61944,61947,61949,61951,61954,61956],{"class":206,"line":2696},[204,61945,61946],{"class":263},"      transition",[204,61948,51523],{"class":214},[204,61950,28207],{"class":263},[204,61952,61953],{"class":263}," 0.5",[204,61955,908],{"class":210},[204,61957,1377],{"class":214},[204,61959,61960,61962,61964,61966,61968],{"class":206,"line":2702},[204,61961,54871],{"class":263},[204,61963,51523],{"class":214},[204,61965,1164],{"class":263},[204,61967,51578],{"class":210},[204,61969,1377],{"class":214},[204,61971,61972],{"class":206,"line":2707},[204,61973,2273],{"class":214},[204,61975,61976],{"class":206,"line":8035},[204,61977,2486],{"emptyLinePlaceholder":135},[204,61979,61980,61982,61984,61987],{"class":206,"line":8059},[204,61981,61690],{"class":2049},[204,61983,61859],{"class":51386},[204,61985,61986],{"class":2049},":focus",[204,61988,15659],{"class":214},[204,61990,61991,61993,61995,61998],{"class":206,"line":8064},[204,61992,61877],{"class":263},[204,61994,51523],{"class":214},[204,61996,61997],{"class":263},"#e4e4e4",[204,61999,1377],{"class":214},[204,62001,62002,62004,62006,62008],{"class":206,"line":8070},[204,62003,61807],{"class":263},[204,62005,51523],{"class":214},[204,62007,60928],{"class":263},[204,62009,1377],{"class":214},[204,62011,62012,62014,62016,62018,62020],{"class":206,"line":8097},[204,62013,54871],{"class":263},[204,62015,51523],{"class":214},[204,62017,869],{"class":263},[204,62019,51578],{"class":210},[204,62021,1377],{"class":214},[204,62023,62024],{"class":206,"line":8102},[204,62025,2273],{"class":214},[204,62027,62028],{"class":206,"line":8108},[204,62029,2486],{"emptyLinePlaceholder":135},[204,62031,62032,62034,62036],{"class":206,"line":8120},[204,62033,61690],{"class":2049},[204,62035,57553],{"class":51386},[204,62037,15659],{"class":214},[204,62039,62040,62042,62044,62047],{"class":206,"line":8132},[204,62041,61807],{"class":263},[204,62043,51523],{"class":214},[204,62045,62046],{"class":263},"#00aeec",[204,62048,1377],{"class":214},[204,62050,62051,62053,62055,62057],{"class":206,"line":8144},[204,62052,57502],{"class":263},[204,62054,51523],{"class":214},[204,62056,60928],{"class":263},[204,62058,1377],{"class":214},[204,62060,62061,62064,62066,62068],{"class":206,"line":9803},[204,62062,62063],{"class":263},"      border",[204,62065,51523],{"class":214},[204,62067,54823],{"class":263},[204,62069,1377],{"class":214},[204,62071,62072,62074,62076,62078,62080],{"class":206,"line":9828},[204,62073,55220],{"class":263},[204,62075,51523],{"class":214},[204,62077,506],{"class":263},[204,62079,51578],{"class":210},[204,62081,1377],{"class":214},[204,62083,62084,62087,62089,62091,62093],{"class":206,"line":9851},[204,62085,62086],{"class":263},"      margin-left",[204,62088,51523],{"class":214},[204,62090,659],{"class":263},[204,62092,51578],{"class":210},[204,62094,1377],{"class":214},[204,62096,62097,62099,62101,62103,62105],{"class":206,"line":9875},[204,62098,54857],{"class":263},[204,62100,51523],{"class":214},[204,62102,569],{"class":263},[204,62104,51578],{"class":210},[204,62106,1377],{"class":214},[204,62108,62109,62112,62114,62117],{"class":206,"line":9880},[204,62110,62111],{"class":263},"      cursor",[204,62113,51523],{"class":214},[204,62115,62116],{"class":263},"pointer",[204,62118,1377],{"class":214},[204,62120,62121],{"class":206,"line":9885},[204,62122,2273],{"class":214},[204,62124,62125],{"class":206,"line":9890},[204,62126,2486],{"emptyLinePlaceholder":135},[204,62128,62129,62131,62134],{"class":206,"line":9899},[204,62130,61690],{"class":2049},[204,62132,62133],{"class":2049}," .total",[204,62135,15659],{"class":214},[204,62137,62138,62140,62142,62144,62146],{"class":206,"line":9904},[204,62139,61836],{"class":263},[204,62141,51523],{"class":214},[204,62143,825],{"class":263},[204,62145,51578],{"class":210},[204,62147,1377],{"class":214},[204,62149,62150,62152,62154,62157],{"class":206,"line":9910},[204,62151,57502],{"class":263},[204,62153,51523],{"class":214},[204,62155,62156],{"class":263},"#999",[204,62158,1377],{"class":214},[204,62160,62161,62164,62166,62168,62170],{"class":206,"line":9931},[204,62162,62163],{"class":263},"      margin-top",[204,62165,51523],{"class":214},[204,62167,532],{"class":263},[204,62169,51578],{"class":210},[204,62171,1377],{"class":214},[204,62173,62174,62177,62179,62181],{"class":206,"line":9937},[204,62175,62176],{"class":263},"      opacity",[204,62178,51523],{"class":214},[204,62180,405],{"class":263},[204,62182,1377],{"class":214},[204,62184,62185,62187,62189,62191,62193,62195],{"class":206,"line":9951},[204,62186,61946],{"class":263},[204,62188,51523],{"class":214},[204,62190,28207],{"class":263},[204,62192,61953],{"class":263},[204,62194,908],{"class":210},[204,62196,1377],{"class":214},[204,62198,62199],{"class":206,"line":9957},[204,62200,2273],{"class":214},[204,62202,62203],{"class":206,"line":9984},[204,62204,2486],{"emptyLinePlaceholder":135},[204,62206,62207,62210],{"class":206,"line":9993},[204,62208,62209],{"class":2049},"    .list",[204,62211,15659],{"class":214},[204,62213,62214,62216,62218,62220,62222],{"class":206,"line":9999},[204,62215,61697],{"class":263},[204,62217,51523],{"class":214},[204,62219,4073],{"class":263},[204,62221,51578],{"class":210},[204,62223,1377],{"class":214},[204,62225,62226,62228,62230,62232,62234],{"class":206,"line":10007},[204,62227,61710],{"class":263},[204,62229,51523],{"class":214},[204,62231,61715],{"class":263},[204,62233,51578],{"class":210},[204,62235,1377],{"class":214},[204,62237,62238,62240,62242,62244],{"class":206,"line":10012},[204,62239,55095],{"class":263},[204,62241,51523],{"class":214},[204,62243,51563],{"class":263},[204,62245,1377],{"class":214},[204,62247,62248],{"class":206,"line":16691},[204,62249,2273],{"class":214},[204,62251,62252],{"class":206,"line":16697},[204,62253,2486],{"emptyLinePlaceholder":135},[204,62255,62256,62258,62261],{"class":206,"line":16720},[204,62257,62209],{"class":2049},[204,62259,62260],{"class":2049}," .item",[204,62262,15659],{"class":214},[204,62264,62265,62267,62269,62271,62273],{"class":206,"line":16726},[204,62266,54857],{"class":263},[204,62268,51523],{"class":214},[204,62270,524],{"class":263},[204,62272,541],{"class":210},[204,62274,1377],{"class":214},[204,62276,62277,62279,62281,62283],{"class":206,"line":16749},[204,62278,55095],{"class":263},[204,62280,51523],{"class":214},[204,62282,51563],{"class":263},[204,62284,1377],{"class":214},[204,62286,62287],{"class":206,"line":16763},[204,62288,2273],{"class":214},[204,62290,62291],{"class":206,"line":16783},[204,62292,2486],{"emptyLinePlaceholder":135},[204,62294,62295,62297,62299,62302],{"class":206,"line":16789},[204,62296,62209],{"class":2049},[204,62298,62260],{"class":2049},[204,62300,62301],{"class":2049}," .info",[204,62303,15659],{"class":214},[204,62305,62306,62308,62310,62312],{"class":206,"line":16800},[204,62307,61923],{"class":263},[204,62309,51523],{"class":214},[204,62311,431],{"class":263},[204,62313,1377],{"class":214},[204,62315,62316,62319,62321,62323,62325,62328,62331],{"class":206,"line":16823},[204,62317,62318],{"class":263},"      border-bottom",[204,62320,51523],{"class":214},[204,62322,431],{"class":263},[204,62324,51578],{"class":210},[204,62326,62327],{"class":263}," dashed",[204,62329,62330],{"class":263}," #e4e4e4",[204,62332,1377],{"class":214},[204,62334,62335,62338,62340,62342,62344],{"class":206,"line":16845},[204,62336,62337],{"class":263},"      padding-bottom",[204,62339,51523],{"class":214},[204,62341,659],{"class":263},[204,62343,51578],{"class":210},[204,62345,1377],{"class":214},[204,62347,62348],{"class":206,"line":16850},[204,62349,2273],{"class":214},[204,62351,62352],{"class":206,"line":16856},[204,62353,2486],{"emptyLinePlaceholder":135},[204,62355,62356,62358,62360,62362],{"class":206,"line":16870},[204,62357,62209],{"class":2049},[204,62359,62260],{"class":2049},[204,62361,6912],{"class":51386},[204,62363,15659],{"class":214},[204,62365,62366,62368,62370,62372],{"class":206,"line":16883},[204,62367,54792],{"class":263},[204,62369,51523],{"class":214},[204,62371,405],{"class":263},[204,62373,1377],{"class":214},[204,62375,62376],{"class":206,"line":16888},[204,62377,2273],{"class":214},[204,62379,62380],{"class":206,"line":16902},[204,62381,2486],{"emptyLinePlaceholder":135},[204,62383,62384,62386,62388,62391],{"class":206,"line":16907},[204,62385,62209],{"class":2049},[204,62387,62260],{"class":2049},[204,62389,62390],{"class":2049}," .name",[204,62392,15659],{"class":214},[204,62394,62395,62397,62399,62402],{"class":206,"line":16913},[204,62396,57502],{"class":263},[204,62398,51523],{"class":214},[204,62400,62401],{"class":263},"#FB7299",[204,62403,1377],{"class":214},[204,62405,62406,62408,62410,62412,62414],{"class":206,"line":16918},[204,62407,55008],{"class":263},[204,62409,51523],{"class":214},[204,62411,762],{"class":263},[204,62413,51578],{"class":210},[204,62415,1377],{"class":214},[204,62417,62418,62421,62423,62426],{"class":206,"line":16932},[204,62419,62420],{"class":263},"      font-weight",[204,62422,51523],{"class":214},[204,62424,62425],{"class":263},"bold",[204,62427,1377],{"class":214},[204,62429,62430],{"class":206,"line":16937},[204,62431,2273],{"class":214},[204,62433,62434],{"class":206,"line":16942},[204,62435,2486],{"emptyLinePlaceholder":135},[204,62437,62438,62440,62442,62445],{"class":206,"line":16956},[204,62439,62209],{"class":2049},[204,62441,62260],{"class":2049},[204,62443,62444],{"class":2049}," .text",[204,62446,15659],{"class":214},[204,62448,62449,62451,62453,62456],{"class":206,"line":16968},[204,62450,57502],{"class":263},[204,62452,51523],{"class":214},[204,62454,62455],{"class":263},"#333",[204,62457,1377],{"class":214},[204,62459,62460,62462,62464,62466,62468,62470],{"class":206,"line":16973},[204,62461,54781],{"class":263},[204,62463,51523],{"class":214},[204,62465,659],{"class":263},[204,62467,51578],{"class":210},[204,62469,4179],{"class":263},[204,62471,1377],{"class":214},[204,62473,62474],{"class":206,"line":16986},[204,62475,2273],{"class":214},[204,62477,62478],{"class":206,"line":16991},[204,62479,2486],{"emptyLinePlaceholder":135},[204,62481,62482,62484,62486,62489],{"class":206,"line":16996},[204,62483,62209],{"class":2049},[204,62485,62260],{"class":2049},[204,62487,62488],{"class":2049}," .time",[204,62490,15659],{"class":214},[204,62492,62493,62495,62497,62499],{"class":206,"line":17001},[204,62494,57502],{"class":263},[204,62496,51523],{"class":214},[204,62498,62156],{"class":263},[204,62500,1377],{"class":214},[204,62502,62503,62505,62507,62509,62511],{"class":206,"line":17014},[204,62504,55008],{"class":263},[204,62506,51523],{"class":214},[204,62508,711],{"class":263},[204,62510,51578],{"class":210},[204,62512,1377],{"class":214},[204,62514,62515],{"class":206,"line":17019},[204,62516,2273],{"class":214},[204,62518,62519,62521,62523],{"class":206,"line":32719},[204,62520,52503],{"class":214},[204,62522,5213],{"class":51386},[204,62524,51393],{"class":214},[204,62526,62527,62529,62531],{"class":206,"line":32725},[204,62528,51871],{"class":214},[204,62530,51420],{"class":51386},[204,62532,51393],{"class":214},[204,62534,62535],{"class":206,"line":32731},[204,62536,2486],{"emptyLinePlaceholder":135},[204,62538,62539,62541,62543],{"class":206,"line":32737},[204,62540,1123],{"class":214},[204,62542,51886],{"class":51386},[204,62544,51393],{"class":214},[204,62546,62547,62549,62551,62553,62555,62558],{"class":206,"line":32743},[204,62548,52230],{"class":214},[204,62550,51697],{"class":51386},[204,62552,53572],{"class":2049},[204,62554,260],{"class":214},[204,62556,62557],{"class":319},"\"wrapper\"",[204,62559,51393],{"class":214},[204,62561,62562,62564,62566,62568,62570,62573,62575,62577],{"class":206,"line":32754},[204,62563,51427],{"class":214},[204,62565,654],{"class":51386},[204,62567,53572],{"class":2049},[204,62569,260],{"class":214},[204,62571,62572],{"class":319},"\"avatar\"",[204,62574,55400],{"class":214},[204,62576,654],{"class":51386},[204,62578,51393],{"class":214},[204,62580,62581,62583,62585,62587,62589,62592,62594,62596,62599,62601,62603,62605,62608,62610,62613,62615,62617],{"class":206,"line":32760},[204,62582,51427],{"class":214},[204,62584,54374],{"class":51386},[204,62586,15046],{"class":2049},[204,62588,260],{"class":214},[204,62590,62591],{"class":319},"\"tx\"",[204,62593,61106],{"class":2049},[204,62595,260],{"class":214},[204,62597,62598],{"class":319},"\"发一条友善的评论\"",[204,62600,54397],{"class":2049},[204,62602,260],{"class":214},[204,62604,3787],{"class":319},[204,62606,62607],{"class":2049}," maxlength",[204,62609,260],{"class":214},[204,62611,62612],{"class":319},"\"200\"",[204,62614,55400],{"class":214},[204,62616,54374],{"class":51386},[204,62618,51393],{"class":214},[204,62620,62621,62623,62625,62628,62630],{"class":206,"line":32780},[204,62622,51427],{"class":214},[204,62624,53973],{"class":51386},[204,62626,62627],{"class":214},">发布\u003C\u002F",[204,62629,53973],{"class":51386},[204,62631,51393],{"class":214},[204,62633,62634,62636,62638],{"class":206,"line":32786},[204,62635,52503],{"class":214},[204,62637,51697],{"class":51386},[204,62639,51393],{"class":214},[204,62641,62642,62644,62646,62648,62650,62652],{"class":206,"line":32797},[204,62643,52230],{"class":214},[204,62645,51697],{"class":51386},[204,62647,53572],{"class":2049},[204,62649,260],{"class":214},[204,62651,62557],{"class":319},[204,62653,51393],{"class":214},[204,62655,62656,62658,62660,62662,62664,62667,62670,62672],{"class":206,"line":32803},[204,62657,51427],{"class":214},[204,62659,204],{"class":51386},[204,62661,53572],{"class":2049},[204,62663,260],{"class":214},[204,62665,62666],{"class":319},"\"total\"",[204,62668,62669],{"class":214},">0\u002F200字\u003C\u002F",[204,62671,204],{"class":51386},[204,62673,51393],{"class":214},[204,62675,62676,62678,62680],{"class":206,"line":32809},[204,62677,52503],{"class":214},[204,62679,51697],{"class":51386},[204,62681,51393],{"class":214},[204,62683,62684,62686,62688,62690,62692,62695],{"class":206,"line":32815},[204,62685,52230],{"class":214},[204,62687,51697],{"class":51386},[204,62689,53572],{"class":2049},[204,62691,260],{"class":214},[204,62693,62694],{"class":319},"\"list\"",[204,62696,51393],{"class":214},[204,62698,62699,62701,62703,62705,62707,62710,62713,62715,62718],{"class":206,"line":32821},[204,62700,51427],{"class":214},[204,62702,51697],{"class":51386},[204,62704,53572],{"class":2049},[204,62706,260],{"class":214},[204,62708,62709],{"class":319},"\"item\"",[204,62711,62712],{"class":2049}," style",[204,62714,260],{"class":214},[204,62716,62717],{"class":319},"\"display: none;\"",[204,62719,51393],{"class":214},[204,62721,62722,62724,62726,62728,62730,62732,62734,62736],{"class":206,"line":32827},[204,62723,55320],{"class":214},[204,62725,654],{"class":51386},[204,62727,53572],{"class":2049},[204,62729,260],{"class":214},[204,62731,62572],{"class":319},[204,62733,55400],{"class":214},[204,62735,654],{"class":51386},[204,62737,51393],{"class":214},[204,62739,62740,62742,62744,62746,62748,62751],{"class":206,"line":32833},[204,62741,55320],{"class":214},[204,62743,51697],{"class":51386},[204,62745,53572],{"class":2049},[204,62747,260],{"class":214},[204,62749,62750],{"class":319},"\"info\"",[204,62752,51393],{"class":214},[204,62754,62755,62757,62759,62761,62763,62766,62769,62771],{"class":206,"line":32839},[204,62756,55388],{"class":214},[204,62758,19],{"class":51386},[204,62760,53572],{"class":2049},[204,62762,260],{"class":214},[204,62764,62765],{"class":319},"\"name\"",[204,62767,62768],{"class":214},">清风徐来\u003C\u002F",[204,62770,19],{"class":51386},[204,62772,51393],{"class":214},[204,62774,62775,62777,62779,62781,62783,62786,62789,62791],{"class":206,"line":32859},[204,62776,55388],{"class":214},[204,62778,19],{"class":51386},[204,62780,53572],{"class":2049},[204,62782,260],{"class":214},[204,62784,62785],{"class":319},"\"text\"",[204,62787,62788],{"class":214},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[204,62790,19],{"class":51386},[204,62792,51393],{"class":214},[204,62794,62795,62797,62799,62801,62803,62806,62809,62811],{"class":206,"line":32865},[204,62796,55388],{"class":214},[204,62798,19],{"class":51386},[204,62800,53572],{"class":2049},[204,62802,260],{"class":214},[204,62804,62805],{"class":319},"\"time\"",[204,62807,62808],{"class":214},">2022-10-10 20:29:21\u003C\u002F",[204,62810,19],{"class":51386},[204,62812,51393],{"class":214},[204,62814,62815,62817,62819],{"class":206,"line":32881},[204,62816,55493],{"class":214},[204,62818,51697],{"class":51386},[204,62820,51393],{"class":214},[204,62822,62823,62825,62827],{"class":206,"line":32887},[204,62824,51862],{"class":214},[204,62826,51697],{"class":51386},[204,62828,51393],{"class":214},[204,62830,62831,62833,62835],{"class":206,"line":32901},[204,62832,52503],{"class":214},[204,62834,51697],{"class":51386},[204,62836,51393],{"class":214},[204,62838,62839,62841,62843],{"class":206,"line":32907},[204,62840,52230],{"class":214},[204,62842,51899],{"class":51386},[204,62844,51393],{"class":214},[204,62846,62847,62849,62852,62854,62856,62858,62860,62863],{"class":206,"line":32922},[204,62848,11308],{"class":210},[204,62850,62851],{"class":263}," tx",[204,62853,13651],{"class":210},[204,62855,54482],{"class":214},[204,62857,54485],{"class":2049},[204,62859,215],{"class":214},[204,62861,62862],{"class":319},"'#tx'",[204,62864,221],{"class":214},[204,62866,62867,62869,62872,62874,62876,62878,62880,62883],{"class":206,"line":32928},[204,62868,11308],{"class":210},[204,62870,62871],{"class":263}," total",[204,62873,13651],{"class":210},[204,62875,54482],{"class":214},[204,62877,54485],{"class":2049},[204,62879,215],{"class":214},[204,62881,62882],{"class":319},"'.total'",[204,62884,221],{"class":214},[204,62886,62887],{"class":206,"line":32937},[204,62888,62889],{"class":273},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[204,62891,62892,62895,62897,62899,62901,62903,62905],{"class":206,"line":32943},[204,62893,62894],{"class":214},"    tx.",[204,62896,57899],{"class":2049},[204,62898,215],{"class":214},[204,62900,61413],{"class":319},[204,62902,12522],{"class":214},[204,62904,54535],{"class":210},[204,62906,54538],{"class":214},[204,62908,62909,62912,62914],{"class":206,"line":32952},[204,62910,62911],{"class":214},"      total.style.opacity ",[204,62913,260],{"class":210},[204,62915,55785],{"class":263},[204,62917,62918],{"class":206,"line":32958},[204,62919,33547],{"class":214},[204,62921,62922],{"class":206,"line":32964},[204,62923,62924],{"class":273},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[204,62926,62927,62929,62931,62933,62935,62937,62939],{"class":206,"line":32973},[204,62928,62894],{"class":214},[204,62930,57899],{"class":2049},[204,62932,215],{"class":214},[204,62934,61474],{"class":319},[204,62936,12522],{"class":214},[204,62938,54535],{"class":210},[204,62940,54538],{"class":214},[204,62942,62943,62945,62947],{"class":206,"line":32979},[204,62944,62911],{"class":214},[204,62946,260],{"class":210},[204,62948,47419],{"class":263},[204,62950,62951],{"class":206,"line":32990},[204,62952,33547],{"class":214},[204,62954,62955],{"class":206,"line":32996},[204,62956,62957],{"class":273},"    \u002F\u002F 3. 检测用户输入\n",[204,62959,62960,62962,62964,62966,62969,62971,62973],{"class":206,"line":33015},[204,62961,62894],{"class":214},[204,62963,57899],{"class":2049},[204,62965,215],{"class":214},[204,62967,62968],{"class":319},"'input'",[204,62970,12522],{"class":214},[204,62972,54535],{"class":210},[204,62974,54538],{"class":214},[204,62976,62977],{"class":206,"line":33021},[204,62978,62979],{"class":273},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[204,62981,62982,62985,62987,62990,62993,62995,62998,63000,63002],{"class":206,"line":33032},[204,62983,62984],{"class":214},"      total.innerHTML ",[204,62986,260],{"class":210},[204,62988,62989],{"class":319}," `${",[204,62991,62992],{"class":214},"tx",[204,62994,771],{"class":319},[204,62996,62997],{"class":214},"value",[204,62999,771],{"class":319},[204,63001,52054],{"class":263},[204,63003,63004],{"class":319},"}\u002F200字`\n",[204,63006,63007],{"class":206,"line":33038},[204,63008,33547],{"class":214},[204,63010,63011],{"class":206,"line":33058},[204,63012,2486],{"emptyLinePlaceholder":135},[204,63014,63015],{"class":206,"line":33074},[204,63016,63017],{"class":273},"    \u002F\u002F const str = 'andy'\n",[204,63019,63020],{"class":206,"line":33080},[204,63021,63022],{"class":273},"    \u002F\u002F console.log(str.length)\n",[204,63024,63025,63027,63029],{"class":206,"line":33094},[204,63026,52503],{"class":214},[204,63028,51899],{"class":51386},[204,63030,51393],{"class":214},[204,63032,63033,63035,63037],{"class":206,"line":33100},[204,63034,51871],{"class":214},[204,63036,51886],{"class":51386},[204,63038,51393],{"class":214},[204,63040,63041],{"class":206,"line":33106},[204,63042,2486],{"emptyLinePlaceholder":135},[204,63044,63045,63047,63049],{"class":206,"line":33117},[204,63046,51871],{"class":214},[204,63048,50721],{"class":51386},[204,63050,51393],{"class":214},[22085,63052,63054],{"id":63053},"_3254-change事件","3.2.5.4 change事件",[19,63056,63057],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63059,63060],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63062,63063],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[196,63065,63067],{"className":50719,"code":63066,"language":50721,"meta":125,"style":125},"\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",[81,63068,63069,63079,63093,63097,63105,63119,63139,63151,63159,63163,63171,63185,63193,63211,63229,63241,63245,63253,63261,63265],{"__ignoreMap":125},[204,63070,63071,63073,63075,63077],{"class":206,"line":207},[204,63072,51383],{"class":214},[204,63074,51387],{"class":51386},[204,63076,51390],{"class":2049},[204,63078,51393],{"class":214},[204,63080,63081,63083,63085,63087,63089,63091],{"class":206,"line":126},[204,63082,1123],{"class":214},[204,63084,50721],{"class":51386},[204,63086,51402],{"class":2049},[204,63088,260],{"class":214},[204,63090,51407],{"class":319},[204,63092,51393],{"class":214},[204,63094,63095],{"class":206,"line":131},[204,63096,2486],{"emptyLinePlaceholder":135},[204,63098,63099,63101,63103],{"class":206,"line":1281},[204,63100,1123],{"class":214},[204,63102,51420],{"class":51386},[204,63104,51393],{"class":214},[204,63106,63107,63109,63111,63113,63115,63117],{"class":206,"line":1287},[204,63108,52230],{"class":214},[204,63110,51430],{"class":51386},[204,63112,51433],{"class":2049},[204,63114,260],{"class":214},[204,63116,51438],{"class":319},[204,63118,51393],{"class":214},[204,63120,63121,63123,63125,63127,63129,63131,63133,63135,63137],{"class":206,"line":1301},[204,63122,52230],{"class":214},[204,63124,51430],{"class":51386},[204,63126,15007],{"class":2049},[204,63128,260],{"class":214},[204,63130,51477],{"class":319},[204,63132,51457],{"class":2049},[204,63134,260],{"class":214},[204,63136,51484],{"class":319},[204,63138,51393],{"class":214},[204,63140,63141,63143,63145,63147,63149],{"class":206,"line":1307},[204,63142,52230],{"class":214},[204,63144,51493],{"class":51386},[204,63146,51496],{"class":214},[204,63148,51493],{"class":51386},[204,63150,51393],{"class":214},[204,63152,63153,63155,63157],{"class":206,"line":1398},[204,63154,51871],{"class":214},[204,63156,51420],{"class":51386},[204,63158,51393],{"class":214},[204,63160,63161],{"class":206,"line":1404},[204,63162,2486],{"emptyLinePlaceholder":135},[204,63164,63165,63167,63169],{"class":206,"line":1416},[204,63166,1123],{"class":214},[204,63168,51886],{"class":51386},[204,63170,51393],{"class":214},[204,63172,63173,63175,63177,63179,63181,63183],{"class":206,"line":1698},[204,63174,52230],{"class":214},[204,63176,53907],{"class":51386},[204,63178,53910],{"class":2049},[204,63180,260],{"class":214},[204,63182,62785],{"class":319},[204,63184,51393],{"class":214},[204,63186,63187,63189,63191],{"class":206,"line":1703},[204,63188,52230],{"class":214},[204,63190,51899],{"class":51386},[204,63192,51393],{"class":214},[204,63194,63195,63197,63199,63201,63203,63205,63207,63209],{"class":206,"line":1709},[204,63196,11308],{"class":210},[204,63198,60691],{"class":263},[204,63200,13651],{"class":210},[204,63202,54482],{"class":214},[204,63204,54485],{"class":2049},[204,63206,215],{"class":214},[204,63208,62968],{"class":319},[204,63210,221],{"class":214},[204,63212,63213,63216,63218,63220,63223,63225,63227],{"class":206,"line":1714},[204,63214,63215],{"class":214},"    input.",[204,63217,57899],{"class":2049},[204,63219,215],{"class":214},[204,63221,63222],{"class":319},"'change'",[204,63224,12522],{"class":214},[204,63226,54535],{"class":210},[204,63228,54538],{"class":214},[204,63230,63231,63233,63235,63237,63239],{"class":206,"line":1728},[204,63232,58330],{"class":214},[204,63234,58333],{"class":2049},[204,63236,215],{"class":214},[204,63238,806],{"class":263},[204,63240,221],{"class":214},[204,63242,63243],{"class":206,"line":1733},[204,63244,33547],{"class":214},[204,63246,63247,63249,63251],{"class":206,"line":1739},[204,63248,52503],{"class":214},[204,63250,51899],{"class":51386},[204,63252,51393],{"class":214},[204,63254,63255,63257,63259],{"class":206,"line":1760},[204,63256,51871],{"class":214},[204,63258,51886],{"class":51386},[204,63260,51393],{"class":214},[204,63262,63263],{"class":206,"line":1765},[204,63264,2486],{"emptyLinePlaceholder":135},[204,63266,63267,63269,63271],{"class":206,"line":1779},[204,63268,51871],{"class":214},[204,63270,50721],{"class":51386},[204,63272,51393],{"class":214},[19,63274,63275],{},"总结：内容发生改变才回去触发",[49,63277,63279],{"id":63278},"_326-事件对象","3.2.6 事件对象",[22085,63281,63283],{"id":63282},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63285,63286],{},[23,63287],{"alt":125,"src":63288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63290,63291],{},[23,63292],{"alt":125,"src":63293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63295,63296],{},"点击一次，就输出了事件对象，它是个对象",[19,63298,63299],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63301,63302],{},[23,63303],{"alt":125,"src":63304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22085,63306,63308],{"id":63307},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63310,63311],{},[23,63312],{"alt":125,"src":63313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63315,63316],{},"实现按特殊字符才是实现打印输出效果：",[196,63318,63320],{"className":53153,"code":63319,"language":53155,"meta":125,"style":125},"\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",[81,63321,63322,63330,63335,63349,63357,63362,63367,63372,63377,63382,63387,63392,63397,63402,63406,63410,63418],{"__ignoreMap":125},[204,63323,63324,63326,63328],{"class":206,"line":207},[204,63325,1123],{"class":214},[204,63327,51886],{"class":51386},[204,63329,51393],{"class":214},[204,63331,63332],{"class":206,"line":126},[204,63333,63334],{"class":273},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[204,63336,63337,63339,63341,63343,63345,63347],{"class":206,"line":131},[204,63338,52230],{"class":214},[204,63340,53907],{"class":51386},[204,63342,53910],{"class":2049},[204,63344,260],{"class":214},[204,63346,62785],{"class":319},[204,63348,51393],{"class":214},[204,63350,63351,63353,63355],{"class":206,"line":1281},[204,63352,52230],{"class":214},[204,63354,51899],{"class":51386},[204,63356,51393],{"class":214},[204,63358,63359],{"class":206,"line":1287},[204,63360,63361],{"class":214},"    \u002F\u002F const btn = document.querySelector('button')\n",[204,63363,63364],{"class":206,"line":1301},[204,63365,63366],{"class":214},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[204,63368,63369],{"class":206,"line":1307},[204,63370,63371],{"class":214},"    \u002F\u002F   console.log(e);\n",[204,63373,63374],{"class":206,"line":1398},[204,63375,63376],{"class":214},"    \u002F\u002F })\n",[204,63378,63379],{"class":206,"line":1404},[204,63380,63381],{"class":214},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[204,63383,63384],{"class":206,"line":1416},[204,63385,63386],{"class":214},"    const input = document.querySelector('input')\n",[204,63388,63389],{"class":206,"line":1698},[204,63390,63391],{"class":214},"    input.addEventListener('keyup', function (e) {\n",[204,63393,63394],{"class":206,"line":1703},[204,63395,63396],{"class":214},"      if (e.key === 'Enter') {\n",[204,63398,63399],{"class":206,"line":1709},[204,63400,63401],{"class":214},"        console.log('我按下了回车键')\n",[204,63403,63404],{"class":206,"line":1714},[204,63405,52484],{"class":214},[204,63407,63408],{"class":206,"line":1728},[204,63409,33547],{"class":214},[204,63411,63412,63414,63416],{"class":206,"line":1733},[204,63413,52503],{"class":214},[204,63415,51899],{"class":51386},[204,63417,51393],{"class":214},[204,63419,63420,63422,63424],{"class":206,"line":1739},[204,63421,51871],{"class":214},[204,63423,51886],{"class":51386},[204,63425,51393],{"class":214},[22085,63427,63429],{"id":63428},"_3263-trim方法","3.2.6.3 trim方法",[19,63431,63432],{},[23,63433],{"alt":125,"src":63434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63436,63437],{},[23,63438],{"alt":125,"src":63439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63441,63442],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63444,63445],{},"str.trim()",[49,63447,63449],{"id":63448},"_327-环境对象","3.2.7 环境对象",[19,63451,63452],{},[23,63453],{"alt":125,"src":63454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63456,63457],{},[23,63458],{"alt":125,"src":63459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63461,63462],{},[23,63463],{"alt":125,"src":63464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63466,63467],{},"实际函数调用是window.fn()",[19,63469,63470],{},"普通函数里面this指向的是window",[68,63472,63473,63476,63479],{},[71,63474,63475],{},"在普通函数下，this指向的是window",[71,63477,63478],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[71,63480,63481],{},"箭头函数没有this",[19,63483,63484],{},"粗略记法就是：谁调用，this就指向谁",[19,63486,63487],{},[23,63488],{"alt":125,"src":63489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63491,63492],{},[23,63493],{"alt":125,"src":63494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63496,63497],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63499,63500],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[196,63502,63504],{"className":53153,"code":63503,"language":53155,"meta":125,"style":125},"\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",[81,63505,63506,63514,63526,63534,63539,63544,63549,63554,63558,63566],{"__ignoreMap":125},[204,63507,63508,63510,63512],{"class":206,"line":207},[204,63509,1123],{"class":214},[204,63511,51886],{"class":51386},[204,63513,51393],{"class":214},[204,63515,63516,63518,63520,63522,63524],{"class":206,"line":126},[204,63517,52230],{"class":214},[204,63519,53973],{"class":51386},[204,63521,53979],{"class":214},[204,63523,53973],{"class":51386},[204,63525,51393],{"class":214},[204,63527,63528,63530,63532],{"class":206,"line":131},[204,63529,52230],{"class":214},[204,63531,51899],{"class":51386},[204,63533,51393],{"class":214},[204,63535,63536],{"class":206,"line":1281},[204,63537,63538],{"class":214},"    const button = document.querySelector('button')\n",[204,63540,63541],{"class":206,"line":1287},[204,63542,63543],{"class":214},"    button.addEventListener('click', function () {\n",[204,63545,63546],{"class":206,"line":1301},[204,63547,63548],{"class":214},"      \u002F\u002F console.log(this);\n",[204,63550,63551],{"class":206,"line":1307},[204,63552,63553],{"class":214},"      this.style.color = 'pink'\n",[204,63555,63556],{"class":206,"line":1398},[204,63557,33547],{"class":214},[204,63559,63560,63562,63564],{"class":206,"line":1404},[204,63561,52503],{"class":214},[204,63563,51899],{"class":51386},[204,63565,51393],{"class":214},[204,63567,63568,63570,63572],{"class":206,"line":1416},[204,63569,51871],{"class":214},[204,63571,51886],{"class":51386},[204,63573,51393],{"class":214},[49,63575,63577],{"id":63576},"_328-回调函数","3.2.8 回调函数",[19,63579,63580],{},[23,63581],{"alt":125,"src":63582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63584,63585],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63587,11419],{},[68,63589,63590,63593,63596],{},[71,63591,63592],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[71,63594,63595],{},"回调函数本质还是函数，只不过把它当成参数使用",[71,63597,63598],{},"使用匿名函数做为回调函数比较常见",[49,63600,63602],{"id":63601},"_329-tab栏切换","3.2.9 tab栏切换",[19,63604,63605],{},[23,63606],{"alt":125,"src":63607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[196,63609,63611],{"className":50719,"code":63610,"language":50721,"meta":125,"style":125},"\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",[81,63612,63613,63623,63637,63641,63649,63663,63683,63703,63716,63724,63730,63740,63750,63754,63758,63765,63778,63791,63803,63819,63823,63827,63834,63846,63858,63870,63880,63890,63894,63898,63907,63919,63930,63942,63946,63950,63958,63968,63978,63988,63992,63996,64006,64020,64032,64036,64040,64052,64063,64080,64090,64094,64098,64113,64124,64134,64138,64142,64149,64164,64168,64172,64180,64190,64194,64198,64207,64217,64221,64229,64237,64241,64249,64264,64279,64292,64300,64334,64361,64388,64415,64442,64450,64458,64473,64510,64545,64580,64615,64650,64658,64666,64674,64679,64684,64704,64709,64738,64743,64748,64766,64771,64776,64781,64803,64808,64824,64828,64833,64838,64859,64864,64893,64897,64902,64906,64914,64922,64926],{"__ignoreMap":125},[204,63614,63615,63617,63619,63621],{"class":206,"line":207},[204,63616,51383],{"class":214},[204,63618,51387],{"class":51386},[204,63620,51390],{"class":2049},[204,63622,51393],{"class":214},[204,63624,63625,63627,63629,63631,63633,63635],{"class":206,"line":126},[204,63626,1123],{"class":214},[204,63628,50721],{"class":51386},[204,63630,51402],{"class":2049},[204,63632,260],{"class":214},[204,63634,51407],{"class":319},[204,63636,51393],{"class":214},[204,63638,63639],{"class":206,"line":131},[204,63640,2486],{"emptyLinePlaceholder":135},[204,63642,63643,63645,63647],{"class":206,"line":1281},[204,63644,1123],{"class":214},[204,63646,51420],{"class":51386},[204,63648,51393],{"class":214},[204,63650,63651,63653,63655,63657,63659,63661],{"class":206,"line":1287},[204,63652,52230],{"class":214},[204,63654,51430],{"class":51386},[204,63656,51433],{"class":2049},[204,63658,260],{"class":214},[204,63660,51438],{"class":319},[204,63662,59213],{"class":214},[204,63664,63665,63667,63669,63671,63673,63675,63677,63679,63681],{"class":206,"line":1301},[204,63666,52230],{"class":214},[204,63668,51430],{"class":51386},[204,63670,51449],{"class":2049},[204,63672,260],{"class":214},[204,63674,51454],{"class":319},[204,63676,51457],{"class":2049},[204,63678,260],{"class":214},[204,63680,51462],{"class":319},[204,63682,59213],{"class":214},[204,63684,63685,63687,63689,63691,63693,63695,63697,63699,63701],{"class":206,"line":1307},[204,63686,52230],{"class":214},[204,63688,51430],{"class":51386},[204,63690,15007],{"class":2049},[204,63692,260],{"class":214},[204,63694,51477],{"class":319},[204,63696,51457],{"class":2049},[204,63698,260],{"class":214},[204,63700,51484],{"class":319},[204,63702,59213],{"class":214},[204,63704,63705,63707,63709,63712,63714],{"class":206,"line":1398},[204,63706,52230],{"class":214},[204,63708,51493],{"class":51386},[204,63710,63711],{"class":214},">tab栏切换\u003C\u002F",[204,63713,51493],{"class":51386},[204,63715,51393],{"class":214},[204,63717,63718,63720,63722],{"class":206,"line":1404},[204,63719,52230],{"class":214},[204,63721,5213],{"class":51386},[204,63723,51393],{"class":214},[204,63725,63726,63728],{"class":206,"line":1416},[204,63727,6490],{"class":51386},[204,63729,15659],{"class":214},[204,63731,63732,63734,63736,63738],{"class":206,"line":1698},[204,63733,54792],{"class":263},[204,63735,51523],{"class":214},[204,63737,405],{"class":263},[204,63739,1377],{"class":214},[204,63741,63742,63744,63746,63748],{"class":206,"line":1703},[204,63743,54781],{"class":263},[204,63745,51523],{"class":214},[204,63747,405],{"class":263},[204,63749,1377],{"class":214},[204,63751,63752],{"class":206,"line":1709},[204,63753,2273],{"class":214},[204,63755,63756],{"class":206,"line":1714},[204,63757,2486],{"emptyLinePlaceholder":135},[204,63759,63760,63763],{"class":206,"line":1728},[204,63761,63762],{"class":2049},"    .tab",[204,63764,15659],{"class":214},[204,63766,63767,63769,63771,63774,63776],{"class":206,"line":1733},[204,63768,54857],{"class":263},[204,63770,51523],{"class":214},[204,63772,63773],{"class":263},"590",[204,63775,51578],{"class":210},[204,63777,1377],{"class":214},[204,63779,63780,63782,63784,63787,63789],{"class":206,"line":1739},[204,63781,54871],{"class":263},[204,63783,51523],{"class":214},[204,63785,63786],{"class":263},"340",[204,63788,51578],{"class":210},[204,63790,1377],{"class":214},[204,63792,63793,63795,63797,63799,63801],{"class":206,"line":1760},[204,63794,54792],{"class":263},[204,63796,51523],{"class":214},[204,63798,913],{"class":263},[204,63800,51578],{"class":210},[204,63802,1377],{"class":214},[204,63804,63805,63807,63809,63811,63813,63815,63817],{"class":206,"line":1765},[204,63806,62063],{"class":263},[204,63808,51523],{"class":214},[204,63810,431],{"class":263},[204,63812,51578],{"class":210},[204,63814,51607],{"class":263},[204,63816,62330],{"class":263},[204,63818,1377],{"class":214},[204,63820,63821],{"class":206,"line":1779},[204,63822,2273],{"class":214},[204,63824,63825],{"class":206,"line":1784},[204,63826,2486],{"emptyLinePlaceholder":135},[204,63828,63829,63832],{"class":206,"line":1813},[204,63830,63831],{"class":2049},"    .tab-nav",[204,63833,15659],{"class":214},[204,63835,63836,63838,63840,63842,63844],{"class":206,"line":1818},[204,63837,54857],{"class":263},[204,63839,51523],{"class":214},[204,63841,524],{"class":263},[204,63843,541],{"class":210},[204,63845,1377],{"class":214},[204,63847,63848,63850,63852,63854,63856],{"class":206,"line":1835},[204,63849,54871],{"class":263},[204,63851,51523],{"class":214},[204,63853,1120],{"class":263},[204,63855,51578],{"class":210},[204,63857,1377],{"class":214},[204,63859,63860,63862,63864,63866,63868],{"class":206,"line":1840},[204,63861,57445],{"class":263},[204,63863,51523],{"class":214},[204,63865,1120],{"class":263},[204,63867,51578],{"class":210},[204,63869,1377],{"class":214},[204,63871,63872,63874,63876,63878],{"class":206,"line":1845},[204,63873,55095],{"class":263},[204,63875,51523],{"class":214},[204,63877,51563],{"class":263},[204,63879,1377],{"class":214},[204,63881,63882,63884,63886,63888],{"class":206,"line":1850},[204,63883,55106],{"class":263},[204,63885,51523],{"class":214},[204,63887,51754],{"class":263},[204,63889,1377],{"class":214},[204,63891,63892],{"class":206,"line":1864},[204,63893,2273],{"class":214},[204,63895,63896],{"class":206,"line":1869},[204,63897,2486],{"emptyLinePlaceholder":135},[204,63899,63900,63902,63905],{"class":206,"line":2663},[204,63901,63831],{"class":2049},[204,63903,63904],{"class":51386}," h3",[204,63906,15659],{"class":214},[204,63908,63909,63911,63913,63915,63917],{"class":206,"line":2677},[204,63910,55008],{"class":263},[204,63912,51523],{"class":214},[204,63914,1013],{"class":263},[204,63916,51578],{"class":210},[204,63918,1377],{"class":214},[204,63920,63921,63923,63925,63928],{"class":206,"line":2685},[204,63922,62420],{"class":263},[204,63924,51523],{"class":214},[204,63926,63927],{"class":263},"normal",[204,63929,1377],{"class":214},[204,63931,63932,63934,63936,63938,63940],{"class":206,"line":2690},[204,63933,62086],{"class":263},[204,63935,51523],{"class":214},[204,63937,913],{"class":263},[204,63939,51578],{"class":210},[204,63941,1377],{"class":214},[204,63943,63944],{"class":206,"line":2696},[204,63945,2273],{"class":214},[204,63947,63948],{"class":206,"line":2702},[204,63949,2486],{"emptyLinePlaceholder":135},[204,63951,63952,63954,63956],{"class":206,"line":2707},[204,63953,63831],{"class":2049},[204,63955,61378],{"class":51386},[204,63957,15659],{"class":214},[204,63959,63960,63962,63964,63966],{"class":206,"line":8035},[204,63961,54818],{"class":263},[204,63963,51523],{"class":214},[204,63965,54823],{"class":263},[204,63967,1377],{"class":214},[204,63969,63970,63972,63974,63976],{"class":206,"line":8059},[204,63971,55095],{"class":263},[204,63973,51523],{"class":214},[204,63975,51563],{"class":263},[204,63977,1377],{"class":214},[204,63979,63980,63982,63984,63986],{"class":206,"line":8064},[204,63981,55106],{"class":263},[204,63983,51523],{"class":214},[204,63985,51666],{"class":263},[204,63987,1377],{"class":214},[204,63989,63990],{"class":206,"line":8070},[204,63991,2273],{"class":214},[204,63993,63994],{"class":206,"line":8097},[204,63995,2486],{"emptyLinePlaceholder":135},[204,63997,63998,64000,64002,64004],{"class":206,"line":8102},[204,63999,63831],{"class":2049},[204,64001,61378],{"class":51386},[204,64003,55161],{"class":51386},[204,64005,15659],{"class":214},[204,64007,64008,64010,64012,64014,64016,64018],{"class":206,"line":8108},[204,64009,54792],{"class":263},[204,64011,51523],{"class":214},[204,64013,405],{"class":263},[204,64015,9037],{"class":263},[204,64017,51578],{"class":210},[204,64019,1377],{"class":214},[204,64021,64022,64024,64026,64028,64030],{"class":206,"line":8120},[204,64023,55008],{"class":263},[204,64025,51523],{"class":214},[204,64027,762],{"class":263},[204,64029,51578],{"class":210},[204,64031,1377],{"class":214},[204,64033,64034],{"class":206,"line":8132},[204,64035,2273],{"class":214},[204,64037,64038],{"class":206,"line":8144},[204,64039,2486],{"emptyLinePlaceholder":135},[204,64041,64042,64044,64046,64048,64050],{"class":206,"line":9803},[204,64043,63831],{"class":2049},[204,64045,61378],{"class":51386},[204,64047,55161],{"class":51386},[204,64049,1485],{"class":51386},[204,64051,15659],{"class":214},[204,64053,64054,64057,64059,64061],{"class":206,"line":9828},[204,64055,64056],{"class":263},"      text-decoration",[204,64058,51523],{"class":214},[204,64060,54823],{"class":263},[204,64062,1377],{"class":214},[204,64064,64065,64067,64069,64071,64073,64075,64078],{"class":206,"line":9851},[204,64066,62318],{"class":263},[204,64068,51523],{"class":214},[204,64070,292],{"class":263},[204,64072,51578],{"class":210},[204,64074,51607],{"class":263},[204,64076,64077],{"class":263}," transparent",[204,64079,1377],{"class":214},[204,64081,64082,64084,64086,64088],{"class":206,"line":9875},[204,64083,57502],{"class":263},[204,64085,51523],{"class":214},[204,64087,62455],{"class":263},[204,64089,1377],{"class":214},[204,64091,64092],{"class":206,"line":9880},[204,64093,2273],{"class":214},[204,64095,64096],{"class":206,"line":9885},[204,64097,2486],{"emptyLinePlaceholder":135},[204,64099,64100,64102,64104,64106,64108,64111],{"class":206,"line":9890},[204,64101,63831],{"class":2049},[204,64103,61378],{"class":51386},[204,64105,55161],{"class":51386},[204,64107,1485],{"class":51386},[204,64109,64110],{"class":2049},".active",[204,64112,15659],{"class":214},[204,64114,64115,64117,64119,64122],{"class":206,"line":9899},[204,64116,61877],{"class":263},[204,64118,51523],{"class":214},[204,64120,64121],{"class":263},"#e1251b",[204,64123,1377],{"class":214},[204,64125,64126,64128,64130,64132],{"class":206,"line":9904},[204,64127,57502],{"class":263},[204,64129,51523],{"class":214},[204,64131,64121],{"class":263},[204,64133,1377],{"class":214},[204,64135,64136],{"class":206,"line":9910},[204,64137,2273],{"class":214},[204,64139,64140],{"class":206,"line":9931},[204,64141,2486],{"emptyLinePlaceholder":135},[204,64143,64144,64147],{"class":206,"line":9937},[204,64145,64146],{"class":2049},"    .tab-content",[204,64148,15659],{"class":214},[204,64150,64151,64153,64155,64157,64160,64162],{"class":206,"line":9951},[204,64152,54781],{"class":263},[204,64154,51523],{"class":214},[204,64156,405],{"class":263},[204,64158,64159],{"class":263}," 16",[204,64161,51578],{"class":210},[204,64163,1377],{"class":214},[204,64165,64166],{"class":206,"line":9957},[204,64167,2273],{"class":214},[204,64169,64170],{"class":206,"line":9984},[204,64171,2486],{"emptyLinePlaceholder":135},[204,64173,64174,64176,64178],{"class":206,"line":9993},[204,64175,64146],{"class":2049},[204,64177,62260],{"class":2049},[204,64179,15659],{"class":214},[204,64181,64182,64184,64186,64188],{"class":206,"line":9999},[204,64183,55095],{"class":263},[204,64185,51523],{"class":214},[204,64187,54823],{"class":263},[204,64189,1377],{"class":214},[204,64191,64192],{"class":206,"line":10007},[204,64193,2273],{"class":214},[204,64195,64196],{"class":206,"line":10012},[204,64197,2486],{"emptyLinePlaceholder":135},[204,64199,64200,64202,64205],{"class":206,"line":16691},[204,64201,64146],{"class":2049},[204,64203,64204],{"class":2049}," .item.active",[204,64206,15659],{"class":214},[204,64208,64209,64211,64213,64215],{"class":206,"line":16697},[204,64210,55095],{"class":263},[204,64212,51523],{"class":214},[204,64214,60955],{"class":263},[204,64216,1377],{"class":214},[204,64218,64219],{"class":206,"line":16720},[204,64220,2273],{"class":214},[204,64222,64223,64225,64227],{"class":206,"line":16726},[204,64224,52503],{"class":214},[204,64226,5213],{"class":51386},[204,64228,51393],{"class":214},[204,64230,64231,64233,64235],{"class":206,"line":16749},[204,64232,51871],{"class":214},[204,64234,51420],{"class":51386},[204,64236,51393],{"class":214},[204,64238,64239],{"class":206,"line":16763},[204,64240,2486],{"emptyLinePlaceholder":135},[204,64242,64243,64245,64247],{"class":206,"line":16783},[204,64244,1123],{"class":214},[204,64246,51886],{"class":51386},[204,64248,51393],{"class":214},[204,64250,64251,64253,64255,64257,64259,64262],{"class":206,"line":16789},[204,64252,52230],{"class":214},[204,64254,51697],{"class":51386},[204,64256,53572],{"class":2049},[204,64258,260],{"class":214},[204,64260,64261],{"class":319},"\"tab\"",[204,64263,51393],{"class":214},[204,64265,64266,64268,64270,64272,64274,64277],{"class":206,"line":16800},[204,64267,51427],{"class":214},[204,64269,51697],{"class":51386},[204,64271,53572],{"class":2049},[204,64273,260],{"class":214},[204,64275,64276],{"class":319},"\"tab-nav\"",[204,64278,51393],{"class":214},[204,64280,64281,64283,64285,64288,64290],{"class":206,"line":16823},[204,64282,55320],{"class":214},[204,64284,49],{"class":51386},[204,64286,64287],{"class":214},">每日特价\u003C\u002F",[204,64289,49],{"class":51386},[204,64291,51393],{"class":214},[204,64293,64294,64296,64298],{"class":206,"line":16845},[204,64295,55320],{"class":214},[204,64297,68],{"class":51386},[204,64299,51393],{"class":214},[204,64301,64302,64304,64306,64308,64310,64312,64314,64316,64318,64320,64323,64326,64328,64330,64332],{"class":206,"line":16850},[204,64303,55388],{"class":214},[204,64305,71],{"class":51386},[204,64307,61138],{"class":214},[204,64309,62],{"class":51386},[204,64311,53572],{"class":2049},[204,64313,260],{"class":214},[204,64315,59792],{"class":319},[204,64317,61143],{"class":2049},[204,64319,260],{"class":214},[204,64321,64322],{"class":319},"\"javascript:;\"",[204,64324,64325],{"class":214},">精选\u003C\u002F",[204,64327,62],{"class":51386},[204,64329,55400],{"class":214},[204,64331,71],{"class":51386},[204,64333,51393],{"class":214},[204,64335,64336,64338,64340,64342,64344,64346,64348,64350,64353,64355,64357,64359],{"class":206,"line":16856},[204,64337,55388],{"class":214},[204,64339,71],{"class":51386},[204,64341,61138],{"class":214},[204,64343,62],{"class":51386},[204,64345,61143],{"class":2049},[204,64347,260],{"class":214},[204,64349,64322],{"class":319},[204,64351,64352],{"class":214},">美食\u003C\u002F",[204,64354,62],{"class":51386},[204,64356,55400],{"class":214},[204,64358,71],{"class":51386},[204,64360,51393],{"class":214},[204,64362,64363,64365,64367,64369,64371,64373,64375,64377,64380,64382,64384,64386],{"class":206,"line":16870},[204,64364,55388],{"class":214},[204,64366,71],{"class":51386},[204,64368,61138],{"class":214},[204,64370,62],{"class":51386},[204,64372,61143],{"class":2049},[204,64374,260],{"class":214},[204,64376,64322],{"class":319},[204,64378,64379],{"class":214},">百货\u003C\u002F",[204,64381,62],{"class":51386},[204,64383,55400],{"class":214},[204,64385,71],{"class":51386},[204,64387,51393],{"class":214},[204,64389,64390,64392,64394,64396,64398,64400,64402,64404,64407,64409,64411,64413],{"class":206,"line":16883},[204,64391,55388],{"class":214},[204,64393,71],{"class":51386},[204,64395,61138],{"class":214},[204,64397,62],{"class":51386},[204,64399,61143],{"class":2049},[204,64401,260],{"class":214},[204,64403,64322],{"class":319},[204,64405,64406],{"class":214},">个护\u003C\u002F",[204,64408,62],{"class":51386},[204,64410,55400],{"class":214},[204,64412,71],{"class":51386},[204,64414,51393],{"class":214},[204,64416,64417,64419,64421,64423,64425,64427,64429,64431,64434,64436,64438,64440],{"class":206,"line":16888},[204,64418,55388],{"class":214},[204,64420,71],{"class":51386},[204,64422,61138],{"class":214},[204,64424,62],{"class":51386},[204,64426,61143],{"class":2049},[204,64428,260],{"class":214},[204,64430,64322],{"class":319},[204,64432,64433],{"class":214},">预告\u003C\u002F",[204,64435,62],{"class":51386},[204,64437,55400],{"class":214},[204,64439,71],{"class":51386},[204,64441,51393],{"class":214},[204,64443,64444,64446,64448],{"class":206,"line":16902},[204,64445,55493],{"class":214},[204,64447,68],{"class":51386},[204,64449,51393],{"class":214},[204,64451,64452,64454,64456],{"class":206,"line":16907},[204,64453,51862],{"class":214},[204,64455,51697],{"class":51386},[204,64457,51393],{"class":214},[204,64459,64460,64462,64464,64466,64468,64471],{"class":206,"line":16913},[204,64461,51427],{"class":214},[204,64463,51697],{"class":51386},[204,64465,53572],{"class":2049},[204,64467,260],{"class":214},[204,64469,64470],{"class":319},"\"tab-content\"",[204,64472,51393],{"class":214},[204,64474,64475,64477,64479,64481,64483,64486,64488,64490,64492,64494,64497,64499,64501,64503,64506,64508],{"class":206,"line":16918},[204,64476,55320],{"class":214},[204,64478,51697],{"class":51386},[204,64480,53572],{"class":2049},[204,64482,260],{"class":214},[204,64484,64485],{"class":319},"\"item active\"",[204,64487,61138],{"class":214},[204,64489,23],{"class":51386},[204,64491,55325],{"class":2049},[204,64493,260],{"class":214},[204,64495,64496],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[204,64498,55333],{"class":2049},[204,64500,260],{"class":214},[204,64502,7739],{"class":319},[204,64504,64505],{"class":214}," \u002F>\u003C\u002F",[204,64507,51697],{"class":51386},[204,64509,51393],{"class":214},[204,64511,64512,64514,64516,64518,64520,64522,64524,64526,64528,64530,64533,64535,64537,64539,64541,64543],{"class":206,"line":16932},[204,64513,55320],{"class":214},[204,64515,51697],{"class":51386},[204,64517,53572],{"class":2049},[204,64519,260],{"class":214},[204,64521,62709],{"class":319},[204,64523,61138],{"class":214},[204,64525,23],{"class":51386},[204,64527,55325],{"class":2049},[204,64529,260],{"class":214},[204,64531,64532],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[204,64534,55333],{"class":2049},[204,64536,260],{"class":214},[204,64538,7739],{"class":319},[204,64540,64505],{"class":214},[204,64542,51697],{"class":51386},[204,64544,51393],{"class":214},[204,64546,64547,64549,64551,64553,64555,64557,64559,64561,64563,64565,64568,64570,64572,64574,64576,64578],{"class":206,"line":16937},[204,64548,55320],{"class":214},[204,64550,51697],{"class":51386},[204,64552,53572],{"class":2049},[204,64554,260],{"class":214},[204,64556,62709],{"class":319},[204,64558,61138],{"class":214},[204,64560,23],{"class":51386},[204,64562,55325],{"class":2049},[204,64564,260],{"class":214},[204,64566,64567],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[204,64569,55333],{"class":2049},[204,64571,260],{"class":214},[204,64573,7739],{"class":319},[204,64575,64505],{"class":214},[204,64577,51697],{"class":51386},[204,64579,51393],{"class":214},[204,64581,64582,64584,64586,64588,64590,64592,64594,64596,64598,64600,64603,64605,64607,64609,64611,64613],{"class":206,"line":16942},[204,64583,55320],{"class":214},[204,64585,51697],{"class":51386},[204,64587,53572],{"class":2049},[204,64589,260],{"class":214},[204,64591,62709],{"class":319},[204,64593,61138],{"class":214},[204,64595,23],{"class":51386},[204,64597,55325],{"class":2049},[204,64599,260],{"class":214},[204,64601,64602],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[204,64604,55333],{"class":2049},[204,64606,260],{"class":214},[204,64608,7739],{"class":319},[204,64610,64505],{"class":214},[204,64612,51697],{"class":51386},[204,64614,51393],{"class":214},[204,64616,64617,64619,64621,64623,64625,64627,64629,64631,64633,64635,64638,64640,64642,64644,64646,64648],{"class":206,"line":16956},[204,64618,55320],{"class":214},[204,64620,51697],{"class":51386},[204,64622,53572],{"class":2049},[204,64624,260],{"class":214},[204,64626,62709],{"class":319},[204,64628,61138],{"class":214},[204,64630,23],{"class":51386},[204,64632,55325],{"class":2049},[204,64634,260],{"class":214},[204,64636,64637],{"class":319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[204,64639,55333],{"class":2049},[204,64641,260],{"class":214},[204,64643,7739],{"class":319},[204,64645,64505],{"class":214},[204,64647,51697],{"class":51386},[204,64649,51393],{"class":214},[204,64651,64652,64654,64656],{"class":206,"line":16968},[204,64653,51862],{"class":214},[204,64655,51697],{"class":51386},[204,64657,51393],{"class":214},[204,64659,64660,64662,64664],{"class":206,"line":16973},[204,64661,52503],{"class":214},[204,64663,51697],{"class":51386},[204,64665,51393],{"class":214},[204,64667,64668,64670,64672],{"class":206,"line":16986},[204,64669,52230],{"class":214},[204,64671,51899],{"class":51386},[204,64673,51393],{"class":214},[204,64675,64676],{"class":206,"line":16991},[204,64677,64678],{"class":273},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[204,64680,64681],{"class":206,"line":16996},[204,64682,64683],{"class":273},"    \u002F\u002F 1.1 获取 a 元素 \n",[204,64685,64686,64688,64691,64693,64695,64697,64699,64702],{"class":206,"line":17001},[204,64687,11308],{"class":210},[204,64689,64690],{"class":263}," as",[204,64692,13651],{"class":210},[204,64694,54482],{"class":214},[204,64696,55767],{"class":2049},[204,64698,215],{"class":214},[204,64700,64701],{"class":319},"'.tab-nav a'",[204,64703,221],{"class":214},[204,64705,64706],{"class":206,"line":17014},[204,64707,64708],{"class":273},"    \u002F\u002F console.log(as) \n",[204,64710,64711,64713,64715,64717,64719,64721,64723,64725,64727,64730,64732,64734,64736],{"class":206,"line":17019},[204,64712,3287],{"class":210},[204,64714,1744],{"class":214},[204,64716,51933],{"class":210},[204,64718,9525],{"class":214},[204,64720,260],{"class":210},[204,64722,4179],{"class":263},[204,64724,9532],{"class":214},[204,64726,1123],{"class":210},[204,64728,64729],{"class":214}," as.",[204,64731,52054],{"class":263},[204,64733,3300],{"class":214},[204,64735,2378],{"class":210},[204,64737,12529],{"class":214},[204,64739,64740],{"class":206,"line":32719},[204,64741,64742],{"class":273},"      \u002F\u002F console.log(as[i])\n",[204,64744,64745],{"class":206,"line":32725},[204,64746,64747],{"class":273},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[204,64749,64750,64753,64755,64757,64760,64762,64764],{"class":206,"line":32731},[204,64751,64752],{"class":214},"      as[i].",[204,64754,57899],{"class":2049},[204,64756,215],{"class":214},[204,64758,64759],{"class":319},"'mouseenter'",[204,64761,12522],{"class":214},[204,64763,54535],{"class":210},[204,64765,54538],{"class":214},[204,64767,64768],{"class":206,"line":32737},[204,64769,64770],{"class":273},"        \u002F\u002F console.log('鼠标经过')\n",[204,64772,64773],{"class":206,"line":32743},[204,64774,64775],{"class":273},"        \u002F\u002F 排他思想  \n",[204,64777,64778],{"class":206,"line":32754},[204,64779,64780],{"class":273},"        \u002F\u002F 干掉别人 移除类active\n",[204,64782,64783,64785,64787,64789,64792,64794,64796,64798,64801],{"class":206,"line":32760},[204,64784,52011],{"class":214},[204,64786,54485],{"class":2049},[204,64788,215],{"class":214},[204,64790,64791],{"class":319},"'.tab-nav .active'",[204,64793,57089],{"class":214},[204,64795,57092],{"class":2049},[204,64797,215],{"class":214},[204,64799,64800],{"class":319},"'active'",[204,64802,221],{"class":214},[204,64804,64805],{"class":206,"line":32780},[204,64806,64807],{"class":273},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[204,64809,64810,64813,64816,64818,64820,64822],{"class":206,"line":32786},[204,64811,64812],{"class":263},"        this",[204,64814,64815],{"class":214},".classList.",[204,64817,5421],{"class":2049},[204,64819,215],{"class":214},[204,64821,64800],{"class":319},[204,64823,221],{"class":214},[204,64825,64826],{"class":206,"line":32797},[204,64827,2486],{"emptyLinePlaceholder":135},[204,64829,64830],{"class":206,"line":32803},[204,64831,64832],{"class":273},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[204,64834,64835],{"class":206,"line":32809},[204,64836,64837],{"class":273},"        \u002F\u002F 干掉别人\n",[204,64839,64840,64842,64844,64846,64849,64851,64853,64855,64857],{"class":206,"line":32815},[204,64841,52011],{"class":214},[204,64843,54485],{"class":2049},[204,64845,215],{"class":214},[204,64847,64848],{"class":319},"'.tab-content .active'",[204,64850,57089],{"class":214},[204,64852,57092],{"class":2049},[204,64854,215],{"class":214},[204,64856,64800],{"class":319},[204,64858,221],{"class":214},[204,64860,64861],{"class":206,"line":32821},[204,64862,64863],{"class":273},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[204,64865,64866,64868,64870,64872,64875,64877,64879,64881,64883,64885,64887,64889,64891],{"class":206,"line":32827},[204,64867,52011],{"class":214},[204,64869,54485],{"class":2049},[204,64871,215],{"class":214},[204,64873,64874],{"class":319},"`.tab-content .item:nth-child(${",[204,64876,654],{"class":214},[204,64878,45652],{"class":210},[204,64880,25205],{"class":263},[204,64882,57118],{"class":319},[204,64884,57089],{"class":214},[204,64886,5421],{"class":2049},[204,64888,215],{"class":214},[204,64890,64800],{"class":319},[204,64892,221],{"class":214},[204,64894,64895],{"class":206,"line":32833},[204,64896,2486],{"emptyLinePlaceholder":135},[204,64898,64899],{"class":206,"line":32839},[204,64900,64901],{"class":214},"      })\n",[204,64903,64904],{"class":206,"line":32859},[204,64905,2273],{"class":214},[204,64907,64908,64910,64912],{"class":206,"line":32865},[204,64909,52503],{"class":214},[204,64911,51899],{"class":51386},[204,64913,51393],{"class":214},[204,64915,64916,64918,64920],{"class":206,"line":32881},[204,64917,51871],{"class":214},[204,64919,51886],{"class":51386},[204,64921,51393],{"class":214},[204,64923,64924],{"class":206,"line":32887},[204,64925,2486],{"emptyLinePlaceholder":135},[204,64927,64928,64930,64932],{"class":206,"line":32901},[204,64929,51871],{"class":214},[204,64931,50721],{"class":51386},[204,64933,51393],{"class":214},[19,64935,64936],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64938,64939],{},"在监听事件中，this指向的就是他的调用者",[19,64941,64942],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,64944,53806],{},[19,64946,64947],{},"(function () {",[19,64949,64950],{},"const list = document.querySelector('.xtx-elevator-list')",[19,64952,64953],{},"list.addEventListener('click', function (e) {",[19,64955,64956],{},"if (e.target.tagName === 'A') {",[19,64958,64959],{},"\u002F\u002F 排他思想",[19,64961,64962],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,64964,64965],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,64967,64968],{},"\u002F\u002F console.log(old);",[19,64970,64971],{},"\u002F\u002F 判断",[19,64973,64974],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,64976,64977],{},"if (old) old.classList.remove('active')",[19,64979,64980],{},"e.target.classList.add('active')",[19,64982,1159],{},[19,64984,52550],{},[19,64986,64987],{},"})();",[49,64989,64991],{"id":64990},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[196,64993,64995],{"className":50719,"code":64994,"language":50721,"meta":125,"style":125},"\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",[81,64996,64997,65007,65011,65019,65023,65037,65051,65063,65071,65077,65087,65097,65101,65105,65112,65124,65135,65152,65165,65179,65189,65193,65197,65204,65215,65233,65243,65255,65259,65263,65270,65287,65298,65310,65314,65318,65325,65337,65341,65349,65357,65361,65369,65377,65385,65400,65444,65452,65465,65478,65491,65499,65507,65515,65543,65551,65563,65576,65589,65597,65605,65613,65639,65647,65660,65672,65685,65693,65701,65709,65735,65743,65756,65768,65781,65789,65797,65805,65810,65830,65835,65855,65860,65877,65882,65890,65895,65924,65937,65941,65945,65950,65954,65982,65987,66004,66009,66014,66019,66024,66050,66054,66058,66066,66074,66078],{"__ignoreMap":125},[204,64998,64999,65001,65003,65005],{"class":206,"line":207},[204,65000,51383],{"class":214},[204,65002,51387],{"class":51386},[204,65004,51390],{"class":2049},[204,65006,51393],{"class":214},[204,65008,65009],{"class":206,"line":126},[204,65010,2486],{"emptyLinePlaceholder":135},[204,65012,65013,65015,65017],{"class":206,"line":131},[204,65014,1123],{"class":214},[204,65016,50721],{"class":51386},[204,65018,51393],{"class":214},[204,65020,65021],{"class":206,"line":1281},[204,65022,2486],{"emptyLinePlaceholder":135},[204,65024,65025,65027,65029,65031,65033,65035],{"class":206,"line":1287},[204,65026,1123],{"class":214},[204,65028,51420],{"class":51386},[204,65030,51402],{"class":2049},[204,65032,260],{"class":214},[204,65034,51407],{"class":319},[204,65036,51393],{"class":214},[204,65038,65039,65041,65043,65045,65047,65049],{"class":206,"line":1301},[204,65040,52230],{"class":214},[204,65042,51430],{"class":51386},[204,65044,51433],{"class":2049},[204,65046,260],{"class":214},[204,65048,51438],{"class":319},[204,65050,51393],{"class":214},[204,65052,65053,65055,65057,65059,65061],{"class":206,"line":1307},[204,65054,52230],{"class":214},[204,65056,51493],{"class":51386},[204,65058,55400],{"class":214},[204,65060,51493],{"class":51386},[204,65062,51393],{"class":214},[204,65064,65065,65067,65069],{"class":206,"line":1398},[204,65066,52230],{"class":214},[204,65068,5213],{"class":51386},[204,65070,51393],{"class":214},[204,65072,65073,65075],{"class":206,"line":1404},[204,65074,6490],{"class":51386},[204,65076,15659],{"class":214},[204,65078,65079,65081,65083,65085],{"class":206,"line":1416},[204,65080,54792],{"class":263},[204,65082,51523],{"class":214},[204,65084,405],{"class":263},[204,65086,1377],{"class":214},[204,65088,65089,65091,65093,65095],{"class":206,"line":1698},[204,65090,54781],{"class":263},[204,65092,51523],{"class":214},[204,65094,405],{"class":263},[204,65096,1377],{"class":214},[204,65098,65099],{"class":206,"line":1703},[204,65100,2273],{"class":214},[204,65102,65103],{"class":206,"line":1709},[204,65104,2486],{"emptyLinePlaceholder":135},[204,65106,65107,65110],{"class":206,"line":1714},[204,65108,65109],{"class":51386},"    table",[204,65111,15659],{"class":214},[204,65113,65114,65117,65119,65122],{"class":206,"line":1728},[204,65115,65116],{"class":263},"      border-collapse",[204,65118,51523],{"class":214},[204,65120,65121],{"class":263},"collapse",[204,65123,1377],{"class":214},[204,65125,65126,65129,65131,65133],{"class":206,"line":1733},[204,65127,65128],{"class":263},"      border-spacing",[204,65130,51523],{"class":214},[204,65132,405],{"class":263},[204,65134,1377],{"class":214},[204,65136,65137,65139,65141,65143,65145,65147,65150],{"class":206,"line":1739},[204,65138,62063],{"class":263},[204,65140,51523],{"class":214},[204,65142,431],{"class":263},[204,65144,51578],{"class":210},[204,65146,51607],{"class":263},[204,65148,65149],{"class":263}," #c0c0c0",[204,65151,1377],{"class":214},[204,65153,65154,65156,65158,65161,65163],{"class":206,"line":1760},[204,65155,54857],{"class":263},[204,65157,51523],{"class":214},[204,65159,65160],{"class":263},"500",[204,65162,51578],{"class":210},[204,65164,1377],{"class":214},[204,65166,65167,65169,65171,65173,65175,65177],{"class":206,"line":1765},[204,65168,54792],{"class":263},[204,65170,51523],{"class":214},[204,65172,524],{"class":263},[204,65174,51578],{"class":210},[204,65176,51642],{"class":263},[204,65178,1377],{"class":214},[204,65180,65181,65183,65185,65187],{"class":206,"line":1779},[204,65182,57372],{"class":263},[204,65184,51523],{"class":214},[204,65186,51678],{"class":263},[204,65188,1377],{"class":214},[204,65190,65191],{"class":206,"line":1784},[204,65192,2273],{"class":214},[204,65194,65195],{"class":206,"line":1813},[204,65196,2486],{"emptyLinePlaceholder":135},[204,65198,65199,65202],{"class":206,"line":1818},[204,65200,65201],{"class":51386},"    th",[204,65203,15659],{"class":214},[204,65205,65206,65208,65210,65213],{"class":206,"line":1835},[204,65207,54970],{"class":263},[204,65209,51523],{"class":214},[204,65211,65212],{"class":263},"#09c",[204,65214,1377],{"class":214},[204,65216,65217,65220,65222,65224,65226,65228,65231],{"class":206,"line":1840},[204,65218,65219],{"class":263},"      font",[204,65221,51523],{"class":214},[204,65223,62425],{"class":263},[204,65225,64159],{"class":263},[204,65227,51578],{"class":210},[204,65229,65230],{"class":319}," \"微软雅黑\"",[204,65232,1377],{"class":214},[204,65234,65235,65237,65239,65241],{"class":206,"line":1845},[204,65236,57502],{"class":263},[204,65238,51523],{"class":214},[204,65240,60928],{"class":263},[204,65242,1377],{"class":214},[204,65244,65245,65247,65249,65251,65253],{"class":206,"line":1850},[204,65246,54871],{"class":263},[204,65248,51523],{"class":214},[204,65250,1013],{"class":263},[204,65252,51578],{"class":210},[204,65254,1377],{"class":214},[204,65256,65257],{"class":206,"line":1864},[204,65258,2273],{"class":214},[204,65260,65261],{"class":206,"line":1869},[204,65262,2486],{"emptyLinePlaceholder":135},[204,65264,65265,65268],{"class":206,"line":2663},[204,65266,65267],{"class":51386},"    td",[204,65269,15659],{"class":214},[204,65271,65272,65274,65276,65278,65280,65282,65285],{"class":206,"line":2677},[204,65273,62063],{"class":263},[204,65275,51523],{"class":214},[204,65277,431],{"class":263},[204,65279,51578],{"class":210},[204,65281,51607],{"class":263},[204,65283,65284],{"class":263}," #d0d0d0",[204,65286,1377],{"class":214},[204,65288,65289,65291,65293,65296],{"class":206,"line":2685},[204,65290,57502],{"class":263},[204,65292,51523],{"class":214},[204,65294,65295],{"class":263},"#404060",[204,65297,1377],{"class":214},[204,65299,65300,65302,65304,65306,65308],{"class":206,"line":2690},[204,65301,54781],{"class":263},[204,65303,51523],{"class":214},[204,65305,659],{"class":263},[204,65307,51578],{"class":210},[204,65309,1377],{"class":214},[204,65311,65312],{"class":206,"line":2696},[204,65313,2273],{"class":214},[204,65315,65316],{"class":206,"line":2702},[204,65317,2486],{"emptyLinePlaceholder":135},[204,65319,65320,65323],{"class":206,"line":2707},[204,65321,65322],{"class":2049},"    .allCheck",[204,65324,15659],{"class":214},[204,65326,65327,65329,65331,65333,65335],{"class":206,"line":8035},[204,65328,54857],{"class":263},[204,65330,51523],{"class":214},[204,65332,825],{"class":263},[204,65334,51578],{"class":210},[204,65336,1377],{"class":214},[204,65338,65339],{"class":206,"line":8059},[204,65340,2273],{"class":214},[204,65342,65343,65345,65347],{"class":206,"line":8064},[204,65344,52503],{"class":214},[204,65346,5213],{"class":51386},[204,65348,51393],{"class":214},[204,65350,65351,65353,65355],{"class":206,"line":8070},[204,65352,51871],{"class":214},[204,65354,51420],{"class":51386},[204,65356,51393],{"class":214},[204,65358,65359],{"class":206,"line":8097},[204,65360,2486],{"emptyLinePlaceholder":135},[204,65362,65363,65365,65367],{"class":206,"line":8102},[204,65364,1123],{"class":214},[204,65366,51886],{"class":51386},[204,65368,51393],{"class":214},[204,65370,65371,65373,65375],{"class":206,"line":8108},[204,65372,52230],{"class":214},[204,65374,352],{"class":51386},[204,65376,51393],{"class":214},[204,65378,65379,65381,65383],{"class":206,"line":8120},[204,65380,51427],{"class":214},[204,65382,358],{"class":51386},[204,65384,51393],{"class":214},[204,65386,65387,65389,65391,65393,65395,65398],{"class":206,"line":8132},[204,65388,55320],{"class":214},[204,65390,361],{"class":51386},[204,65392,53572],{"class":2049},[204,65394,260],{"class":214},[204,65396,65397],{"class":319},"\"allCheck\"",[204,65399,51393],{"class":214},[204,65401,65402,65404,65406,65408,65410,65412,65414,65416,65418,65420,65422,65425,65428,65430,65432,65434,65437,65440,65442],{"class":206,"line":8144},[204,65403,55388],{"class":214},[204,65405,53907],{"class":51386},[204,65407,53910],{"class":2049},[204,65409,260],{"class":214},[204,65411,53915],{"class":319},[204,65413,15007],{"class":2049},[204,65415,260],{"class":214},[204,65417,7739],{"class":319},[204,65419,15046],{"class":2049},[204,65421,260],{"class":214},[204,65423,65424],{"class":319},"\"checkAll\"",[204,65426,65427],{"class":214},"> \u003C",[204,65429,204],{"class":51386},[204,65431,53572],{"class":2049},[204,65433,260],{"class":214},[204,65435,65436],{"class":319},"\"all\"",[204,65438,65439],{"class":214},">全选\u003C\u002F",[204,65441,204],{"class":51386},[204,65443,51393],{"class":214},[204,65445,65446,65448,65450],{"class":206,"line":9803},[204,65447,55493],{"class":214},[204,65449,361],{"class":51386},[204,65451,51393],{"class":214},[204,65453,65454,65456,65458,65461,65463],{"class":206,"line":9828},[204,65455,55320],{"class":214},[204,65457,361],{"class":51386},[204,65459,65460],{"class":214},">商品\u003C\u002F",[204,65462,361],{"class":51386},[204,65464,51393],{"class":214},[204,65466,65467,65469,65471,65474,65476],{"class":206,"line":9851},[204,65468,55320],{"class":214},[204,65470,361],{"class":51386},[204,65472,65473],{"class":214},">商家\u003C\u002F",[204,65475,361],{"class":51386},[204,65477,51393],{"class":214},[204,65479,65480,65482,65484,65487,65489],{"class":206,"line":9875},[204,65481,55320],{"class":214},[204,65483,361],{"class":51386},[204,65485,65486],{"class":214},">价格\u003C\u002F",[204,65488,361],{"class":51386},[204,65490,51393],{"class":214},[204,65492,65493,65495,65497],{"class":206,"line":9880},[204,65494,51862],{"class":214},[204,65496,358],{"class":51386},[204,65498,51393],{"class":214},[204,65500,65501,65503,65505],{"class":206,"line":9885},[204,65502,51427],{"class":214},[204,65504,358],{"class":51386},[204,65506,51393],{"class":214},[204,65508,65509,65511,65513],{"class":206,"line":9890},[204,65510,55320],{"class":214},[204,65512,403],{"class":51386},[204,65514,51393],{"class":214},[204,65516,65517,65519,65521,65523,65525,65527,65529,65531,65534,65536,65538,65541],{"class":206,"line":9899},[204,65518,55388],{"class":214},[204,65520,53907],{"class":51386},[204,65522,53910],{"class":2049},[204,65524,260],{"class":214},[204,65526,53915],{"class":319},[204,65528,15007],{"class":2049},[204,65530,260],{"class":214},[204,65532,65533],{"class":319},"\"check\"",[204,65535,53572],{"class":2049},[204,65537,260],{"class":214},[204,65539,65540],{"class":319},"\"ck\"",[204,65542,51393],{"class":214},[204,65544,65545,65547,65549],{"class":206,"line":9904},[204,65546,55493],{"class":214},[204,65548,403],{"class":51386},[204,65550,51393],{"class":214},[204,65552,65553,65555,65557,65559,65561],{"class":206,"line":9910},[204,65554,55320],{"class":214},[204,65556,403],{"class":51386},[204,65558,61259],{"class":214},[204,65560,403],{"class":51386},[204,65562,51393],{"class":214},[204,65564,65565,65567,65569,65572,65574],{"class":206,"line":9931},[204,65566,55320],{"class":214},[204,65568,403],{"class":51386},[204,65570,65571],{"class":214},">小米\u003C\u002F",[204,65573,403],{"class":51386},[204,65575,51393],{"class":214},[204,65577,65578,65580,65582,65585,65587],{"class":206,"line":9937},[204,65579,55320],{"class":214},[204,65581,403],{"class":51386},[204,65583,65584],{"class":214},">￥1999\u003C\u002F",[204,65586,403],{"class":51386},[204,65588,51393],{"class":214},[204,65590,65591,65593,65595],{"class":206,"line":9951},[204,65592,51862],{"class":214},[204,65594,358],{"class":51386},[204,65596,51393],{"class":214},[204,65598,65599,65601,65603],{"class":206,"line":9957},[204,65600,51427],{"class":214},[204,65602,358],{"class":51386},[204,65604,51393],{"class":214},[204,65606,65607,65609,65611],{"class":206,"line":9984},[204,65608,55320],{"class":214},[204,65610,403],{"class":51386},[204,65612,51393],{"class":214},[204,65614,65615,65617,65619,65621,65623,65625,65627,65629,65631,65633,65635,65637],{"class":206,"line":9993},[204,65616,55388],{"class":214},[204,65618,53907],{"class":51386},[204,65620,53910],{"class":2049},[204,65622,260],{"class":214},[204,65624,53915],{"class":319},[204,65626,15007],{"class":2049},[204,65628,260],{"class":214},[204,65630,65533],{"class":319},[204,65632,53572],{"class":2049},[204,65634,260],{"class":214},[204,65636,65540],{"class":319},[204,65638,51393],{"class":214},[204,65640,65641,65643,65645],{"class":206,"line":9999},[204,65642,55493],{"class":214},[204,65644,403],{"class":51386},[204,65646,51393],{"class":214},[204,65648,65649,65651,65653,65656,65658],{"class":206,"line":10007},[204,65650,55320],{"class":214},[204,65652,403],{"class":51386},[204,65654,65655],{"class":214},">小米净水器\u003C\u002F",[204,65657,403],{"class":51386},[204,65659,51393],{"class":214},[204,65661,65662,65664,65666,65668,65670],{"class":206,"line":10012},[204,65663,55320],{"class":214},[204,65665,403],{"class":51386},[204,65667,65571],{"class":214},[204,65669,403],{"class":51386},[204,65671,51393],{"class":214},[204,65673,65674,65676,65678,65681,65683],{"class":206,"line":16691},[204,65675,55320],{"class":214},[204,65677,403],{"class":51386},[204,65679,65680],{"class":214},">￥4999\u003C\u002F",[204,65682,403],{"class":51386},[204,65684,51393],{"class":214},[204,65686,65687,65689,65691],{"class":206,"line":16697},[204,65688,51862],{"class":214},[204,65690,358],{"class":51386},[204,65692,51393],{"class":214},[204,65694,65695,65697,65699],{"class":206,"line":16720},[204,65696,51427],{"class":214},[204,65698,358],{"class":51386},[204,65700,51393],{"class":214},[204,65702,65703,65705,65707],{"class":206,"line":16726},[204,65704,55320],{"class":214},[204,65706,403],{"class":51386},[204,65708,51393],{"class":214},[204,65710,65711,65713,65715,65717,65719,65721,65723,65725,65727,65729,65731,65733],{"class":206,"line":16749},[204,65712,55388],{"class":214},[204,65714,53907],{"class":51386},[204,65716,53910],{"class":2049},[204,65718,260],{"class":214},[204,65720,53915],{"class":319},[204,65722,15007],{"class":2049},[204,65724,260],{"class":214},[204,65726,65533],{"class":319},[204,65728,53572],{"class":2049},[204,65730,260],{"class":214},[204,65732,65540],{"class":319},[204,65734,51393],{"class":214},[204,65736,65737,65739,65741],{"class":206,"line":16763},[204,65738,55493],{"class":214},[204,65740,403],{"class":51386},[204,65742,51393],{"class":214},[204,65744,65745,65747,65749,65752,65754],{"class":206,"line":16783},[204,65746,55320],{"class":214},[204,65748,403],{"class":51386},[204,65750,65751],{"class":214},">小米电视\u003C\u002F",[204,65753,403],{"class":51386},[204,65755,51393],{"class":214},[204,65757,65758,65760,65762,65764,65766],{"class":206,"line":16789},[204,65759,55320],{"class":214},[204,65761,403],{"class":51386},[204,65763,65571],{"class":214},[204,65765,403],{"class":51386},[204,65767,51393],{"class":214},[204,65769,65770,65772,65774,65777,65779],{"class":206,"line":16800},[204,65771,55320],{"class":214},[204,65773,403],{"class":51386},[204,65775,65776],{"class":214},">￥5999\u003C\u002F",[204,65778,403],{"class":51386},[204,65780,51393],{"class":214},[204,65782,65783,65785,65787],{"class":206,"line":16823},[204,65784,51862],{"class":214},[204,65786,358],{"class":51386},[204,65788,51393],{"class":214},[204,65790,65791,65793,65795],{"class":206,"line":16845},[204,65792,52503],{"class":214},[204,65794,352],{"class":51386},[204,65796,51393],{"class":214},[204,65798,65799,65801,65803],{"class":206,"line":16850},[204,65800,52230],{"class":214},[204,65802,51899],{"class":51386},[204,65804,51393],{"class":214},[204,65806,65807],{"class":206,"line":16856},[204,65808,65809],{"class":273},"    \u002F\u002F 1. 获取大复选框\n",[204,65811,65812,65814,65817,65819,65821,65823,65825,65828],{"class":206,"line":16870},[204,65813,11308],{"class":210},[204,65815,65816],{"class":263}," checkAll",[204,65818,13651],{"class":210},[204,65820,54482],{"class":214},[204,65822,54485],{"class":2049},[204,65824,215],{"class":214},[204,65826,65827],{"class":319},"'#checkAll'",[204,65829,221],{"class":214},[204,65831,65832],{"class":206,"line":16883},[204,65833,65834],{"class":273},"    \u002F\u002F 2. 获取所有的小复选框\n",[204,65836,65837,65839,65842,65844,65846,65848,65850,65853],{"class":206,"line":16888},[204,65838,11308],{"class":210},[204,65840,65841],{"class":263}," cks",[204,65843,13651],{"class":210},[204,65845,54482],{"class":214},[204,65847,55767],{"class":2049},[204,65849,215],{"class":214},[204,65851,65852],{"class":319},"'.ck'",[204,65854,221],{"class":214},[204,65856,65857],{"class":206,"line":16902},[204,65858,65859],{"class":273},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[204,65861,65862,65865,65867,65869,65871,65873,65875],{"class":206,"line":16907},[204,65863,65864],{"class":214},"    checkAll.",[204,65866,57899],{"class":2049},[204,65868,215],{"class":214},[204,65870,57904],{"class":319},[204,65872,12522],{"class":214},[204,65874,54535],{"class":210},[204,65876,54538],{"class":214},[204,65878,65879],{"class":206,"line":16913},[204,65880,65881],{"class":273},"      \u002F\u002F 得到当前大复选框的选中状态\n",[204,65883,65884,65887],{"class":206,"line":16918},[204,65885,65886],{"class":273},"      \u002F\u002F console.log(checkAll.checked)",[204,65888,65889],{"class":273},"  \u002F\u002F 得到 是 true 或者是 false\n",[204,65891,65892],{"class":206,"line":16932},[204,65893,65894],{"class":273},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[204,65896,65897,65899,65901,65903,65905,65907,65909,65911,65913,65916,65918,65920,65922],{"class":206,"line":16937},[204,65898,52370],{"class":210},[204,65900,1744],{"class":214},[204,65902,51933],{"class":210},[204,65904,9525],{"class":214},[204,65906,260],{"class":210},[204,65908,4179],{"class":263},[204,65910,9532],{"class":214},[204,65912,1123],{"class":210},[204,65914,65915],{"class":214}," cks.",[204,65917,52054],{"class":263},[204,65919,3300],{"class":214},[204,65921,2378],{"class":210},[204,65923,12529],{"class":214},[204,65925,65926,65929,65931,65934],{"class":206,"line":16942},[204,65927,65928],{"class":214},"        cks[i].checked ",[204,65930,260],{"class":210},[204,65932,65933],{"class":263}," this",[204,65935,65936],{"class":214},".checked\n",[204,65938,65939],{"class":206,"line":16956},[204,65940,52484],{"class":214},[204,65942,65943],{"class":206,"line":16968},[204,65944,33547],{"class":214},[204,65946,65947],{"class":206,"line":16973},[204,65948,65949],{"class":273},"    \u002F\u002F 5. 小复选框控制大复选框\n",[204,65951,65952],{"class":206,"line":16986},[204,65953,2486],{"emptyLinePlaceholder":135},[204,65955,65956,65958,65960,65962,65964,65966,65968,65970,65972,65974,65976,65978,65980],{"class":206,"line":16991},[204,65957,3287],{"class":210},[204,65959,1744],{"class":214},[204,65961,51933],{"class":210},[204,65963,9525],{"class":214},[204,65965,260],{"class":210},[204,65967,4179],{"class":263},[204,65969,9532],{"class":214},[204,65971,1123],{"class":210},[204,65973,65915],{"class":214},[204,65975,52054],{"class":263},[204,65977,3300],{"class":214},[204,65979,2378],{"class":210},[204,65981,12529],{"class":214},[204,65983,65984],{"class":206,"line":16996},[204,65985,65986],{"class":273},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[204,65988,65989,65992,65994,65996,65998,66000,66002],{"class":206,"line":17001},[204,65990,65991],{"class":214},"      cks[i].",[204,65993,57899],{"class":2049},[204,65995,215],{"class":214},[204,65997,57904],{"class":319},[204,65999,12522],{"class":214},[204,66001,54535],{"class":210},[204,66003,54538],{"class":214},[204,66005,66006],{"class":206,"line":17014},[204,66007,66008],{"class":273},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[204,66010,66011],{"class":206,"line":17019},[204,66012,66013],{"class":273},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[204,66015,66016],{"class":206,"line":32719},[204,66017,66018],{"class":273},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[204,66020,66021],{"class":206,"line":32725},[204,66022,66023],{"class":273},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[204,66025,66026,66029,66031,66033,66035,66037,66040,66042,66044,66046,66048],{"class":206,"line":32731},[204,66027,66028],{"class":214},"        checkAll.checked ",[204,66030,260],{"class":210},[204,66032,54482],{"class":214},[204,66034,55767],{"class":2049},[204,66036,215],{"class":214},[204,66038,66039],{"class":319},"'.ck:checked'",[204,66041,30912],{"class":214},[204,66043,52054],{"class":263},[204,66045,57992],{"class":210},[204,66047,65915],{"class":214},[204,66049,55917],{"class":263},[204,66051,66052],{"class":206,"line":32737},[204,66053,64901],{"class":214},[204,66055,66056],{"class":206,"line":32743},[204,66057,2273],{"class":214},[204,66059,66060,66062,66064],{"class":206,"line":32754},[204,66061,52503],{"class":214},[204,66063,51899],{"class":51386},[204,66065,51393],{"class":214},[204,66067,66068,66070,66072],{"class":206,"line":32760},[204,66069,51871],{"class":214},[204,66071,51886],{"class":51386},[204,66073,51393],{"class":214},[204,66075,66076],{"class":206,"line":32780},[204,66077,2486],{"emptyLinePlaceholder":135},[204,66079,66080,66082,66084],{"class":206,"line":32786},[204,66081,51871],{"class":214},[204,66083,50721],{"class":51386},[204,66085,51393],{"class":214},[19,66087,66088],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66090,66091],{},"用好之间比较得到的布尔值！！！",[19,66093,66094,66095,66098,66099,1744,66102,797,66104,66107],{},"在 JS 里访问的时候，",[81,66096,66097],{},"checkbox.checked"," 是一个 ",[30,66100,66101],{},"布尔值",[81,66103,1449],{},[81,66105,66106],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66109,66110,66111,66114,66115],{},"HTML 的 ",[81,66112,66113],{},"checked=\"checked\""," 只是 ",[30,66116,66117,66118,66121],{},"初始值；JS 的 ",[81,66119,66120],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66123,66124],{},"：checked是一个伪类选择器",[19,66126,66127],{},[23,66128],{"alt":125,"src":66129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66131,66132,66135],{},[66133,66134],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66137,66138],{},[23,66139],{"alt":125,"src":66140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66142,66144],{"id":66143},"_33-dom事件进阶","3.3 DOM事件进阶",[49,66146,66148],{"id":66147},"_331-事件流","3.3.1 事件流",[19,66150,66151],{},[23,66152],{"alt":125,"src":66153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22085,66155,66157],{"id":66156},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66159,66160],{},[23,66161],{"alt":125,"src":66162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[196,66164,66166],{"className":50719,"code":66165,"language":50721,"meta":125,"style":125},"\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",[81,66167,66168,66178,66192,66196,66204,66218,66238,66250,66258,66265,66277,66289,66299,66303,66307,66314,66326,66338,66348,66352,66360,66368,66372,66380,66395,66414,66422,66430,66450,66470,66486,66497,66505,66522,66533,66541,66558,66569,66577,66585,66593,66597],{"__ignoreMap":125},[204,66169,66170,66172,66174,66176],{"class":206,"line":207},[204,66171,51383],{"class":214},[204,66173,51387],{"class":51386},[204,66175,51390],{"class":2049},[204,66177,51393],{"class":214},[204,66179,66180,66182,66184,66186,66188,66190],{"class":206,"line":126},[204,66181,1123],{"class":214},[204,66183,50721],{"class":51386},[204,66185,51402],{"class":2049},[204,66187,260],{"class":214},[204,66189,51407],{"class":319},[204,66191,51393],{"class":214},[204,66193,66194],{"class":206,"line":131},[204,66195,2486],{"emptyLinePlaceholder":135},[204,66197,66198,66200,66202],{"class":206,"line":1281},[204,66199,1123],{"class":214},[204,66201,51420],{"class":51386},[204,66203,51393],{"class":214},[204,66205,66206,66208,66210,66212,66214,66216],{"class":206,"line":1287},[204,66207,52230],{"class":214},[204,66209,51430],{"class":51386},[204,66211,51433],{"class":2049},[204,66213,260],{"class":214},[204,66215,51438],{"class":319},[204,66217,51393],{"class":214},[204,66219,66220,66222,66224,66226,66228,66230,66232,66234,66236],{"class":206,"line":1301},[204,66221,52230],{"class":214},[204,66223,51430],{"class":51386},[204,66225,15007],{"class":2049},[204,66227,260],{"class":214},[204,66229,51477],{"class":319},[204,66231,51457],{"class":2049},[204,66233,260],{"class":214},[204,66235,51484],{"class":319},[204,66237,51393],{"class":214},[204,66239,66240,66242,66244,66246,66248],{"class":206,"line":1307},[204,66241,52230],{"class":214},[204,66243,51493],{"class":51386},[204,66245,51496],{"class":214},[204,66247,51493],{"class":51386},[204,66249,51393],{"class":214},[204,66251,66252,66254,66256],{"class":206,"line":1398},[204,66253,52230],{"class":214},[204,66255,5213],{"class":51386},[204,66257,51393],{"class":214},[204,66259,66260,66263],{"class":206,"line":1404},[204,66261,66262],{"class":2049},"    .father",[204,66264,15659],{"class":214},[204,66266,66267,66269,66271,66273,66275],{"class":206,"line":1416},[204,66268,54857],{"class":263},[204,66270,51523],{"class":214},[204,66272,65160],{"class":263},[204,66274,51578],{"class":210},[204,66276,1377],{"class":214},[204,66278,66279,66281,66283,66285,66287],{"class":206,"line":1698},[204,66280,54871],{"class":263},[204,66282,51523],{"class":214},[204,66284,65160],{"class":263},[204,66286,51578],{"class":210},[204,66288,1377],{"class":214},[204,66290,66291,66293,66295,66297],{"class":206,"line":1703},[204,66292,54970],{"class":263},[204,66294,51523],{"class":214},[204,66296,51731],{"class":263},[204,66298,1377],{"class":214},[204,66300,66301],{"class":206,"line":1709},[204,66302,2273],{"class":214},[204,66304,66305],{"class":206,"line":1714},[204,66306,2486],{"emptyLinePlaceholder":135},[204,66308,66309,66312],{"class":206,"line":1728},[204,66310,66311],{"class":2049},"    .son",[204,66313,15659],{"class":214},[204,66315,66316,66318,66320,66322,66324],{"class":206,"line":1733},[204,66317,54857],{"class":263},[204,66319,51523],{"class":214},[204,66321,1808],{"class":263},[204,66323,51578],{"class":210},[204,66325,1377],{"class":214},[204,66327,66328,66330,66332,66334,66336],{"class":206,"line":1739},[204,66329,54871],{"class":263},[204,66331,51523],{"class":214},[204,66333,1808],{"class":263},[204,66335,51578],{"class":210},[204,66337,1377],{"class":214},[204,66339,66340,66342,66344,66346],{"class":206,"line":1760},[204,66341,54970],{"class":263},[204,66343,51523],{"class":214},[204,66345,54975],{"class":263},[204,66347,1377],{"class":214},[204,66349,66350],{"class":206,"line":1765},[204,66351,2273],{"class":214},[204,66353,66354,66356,66358],{"class":206,"line":1779},[204,66355,52503],{"class":214},[204,66357,5213],{"class":51386},[204,66359,51393],{"class":214},[204,66361,66362,66364,66366],{"class":206,"line":1784},[204,66363,51871],{"class":214},[204,66365,51420],{"class":51386},[204,66367,51393],{"class":214},[204,66369,66370],{"class":206,"line":1813},[204,66371,2486],{"emptyLinePlaceholder":135},[204,66373,66374,66376,66378],{"class":206,"line":1818},[204,66375,1123],{"class":214},[204,66377,51886],{"class":51386},[204,66379,51393],{"class":214},[204,66381,66382,66384,66386,66388,66390,66393],{"class":206,"line":1835},[204,66383,52230],{"class":214},[204,66385,51697],{"class":51386},[204,66387,53572],{"class":2049},[204,66389,260],{"class":214},[204,66391,66392],{"class":319},"\"father\"",[204,66394,51393],{"class":214},[204,66396,66397,66399,66401,66403,66405,66408,66410,66412],{"class":206,"line":1840},[204,66398,51427],{"class":214},[204,66400,51697],{"class":51386},[204,66402,53572],{"class":2049},[204,66404,260],{"class":214},[204,66406,66407],{"class":319},"\"son\"",[204,66409,55400],{"class":214},[204,66411,51697],{"class":51386},[204,66413,51393],{"class":214},[204,66415,66416,66418,66420],{"class":206,"line":1845},[204,66417,52503],{"class":214},[204,66419,51697],{"class":51386},[204,66421,51393],{"class":214},[204,66423,66424,66426,66428],{"class":206,"line":1850},[204,66425,52230],{"class":214},[204,66427,51899],{"class":51386},[204,66429,51393],{"class":214},[204,66431,66432,66434,66437,66439,66441,66443,66445,66448],{"class":206,"line":1864},[204,66433,11308],{"class":210},[204,66435,66436],{"class":263}," fa",[204,66438,13651],{"class":210},[204,66440,54482],{"class":214},[204,66442,54485],{"class":2049},[204,66444,215],{"class":214},[204,66446,66447],{"class":319},"'.father'",[204,66449,221],{"class":214},[204,66451,66452,66454,66457,66459,66461,66463,66465,66468],{"class":206,"line":1869},[204,66453,11308],{"class":210},[204,66455,66456],{"class":263}," son",[204,66458,13651],{"class":210},[204,66460,54482],{"class":214},[204,66462,54485],{"class":2049},[204,66464,215],{"class":214},[204,66466,66467],{"class":319},"'.son'",[204,66469,221],{"class":214},[204,66471,66472,66474,66476,66478,66480,66482,66484],{"class":206,"line":2663},[204,66473,52493],{"class":214},[204,66475,57899],{"class":2049},[204,66477,215],{"class":214},[204,66479,57904],{"class":319},[204,66481,12522],{"class":214},[204,66483,54535],{"class":210},[204,66485,54538],{"class":214},[204,66487,66488,66490,66492,66495],{"class":206,"line":2677},[204,66489,59011],{"class":2049},[204,66491,215],{"class":214},[204,66493,66494],{"class":319},"'woshiu1'",[204,66496,221],{"class":214},[204,66498,66499,66501,66503],{"class":206,"line":2685},[204,66500,54621],{"class":214},[204,66502,1449],{"class":263},[204,66504,221],{"class":214},[204,66506,66507,66510,66512,66514,66516,66518,66520],{"class":206,"line":2690},[204,66508,66509],{"class":214},"    fa.",[204,66511,57899],{"class":2049},[204,66513,215],{"class":214},[204,66515,57904],{"class":319},[204,66517,12522],{"class":214},[204,66519,54535],{"class":210},[204,66521,54538],{"class":214},[204,66523,66524,66526,66528,66531],{"class":206,"line":2696},[204,66525,59011],{"class":2049},[204,66527,215],{"class":214},[204,66529,66530],{"class":319},"'1'",[204,66532,221],{"class":214},[204,66534,66535,66537,66539],{"class":206,"line":2702},[204,66536,54621],{"class":214},[204,66538,1449],{"class":263},[204,66540,221],{"class":214},[204,66542,66543,66546,66548,66550,66552,66554,66556],{"class":206,"line":2707},[204,66544,66545],{"class":214},"    son.",[204,66547,57899],{"class":2049},[204,66549,215],{"class":214},[204,66551,57904],{"class":319},[204,66553,12522],{"class":214},[204,66555,54535],{"class":210},[204,66557,54538],{"class":214},[204,66559,66560,66562,66564,66567],{"class":206,"line":8035},[204,66561,59011],{"class":2049},[204,66563,215],{"class":214},[204,66565,66566],{"class":319},"'2'",[204,66568,221],{"class":214},[204,66570,66571,66573,66575],{"class":206,"line":8059},[204,66572,54621],{"class":214},[204,66574,1449],{"class":263},[204,66576,221],{"class":214},[204,66578,66579,66581,66583],{"class":206,"line":8064},[204,66580,52503],{"class":214},[204,66582,51899],{"class":51386},[204,66584,51393],{"class":214},[204,66586,66587,66589,66591],{"class":206,"line":8070},[204,66588,51871],{"class":214},[204,66590,51886],{"class":51386},[204,66592,51393],{"class":214},[204,66594,66595],{"class":206,"line":8097},[204,66596,2486],{"emptyLinePlaceholder":135},[204,66598,66599,66601,66603],{"class":206,"line":8102},[204,66600,51871],{"class":214},[204,66602,50721],{"class":51386},[204,66604,51393],{"class":214},[19,66606,66607],{},[23,66608],{"alt":125,"src":66609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66611,66612],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22085,66614,66616],{"id":66615},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66618,66619],{},[23,66620],{"alt":125,"src":66621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66623,66624],{},"反着来",[19,66626,66627],{},"注意是同名事件，比如都是‘click’",[22085,66629,66631],{"id":66630},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66633,66634],{},[23,66635],{"alt":125,"src":66636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22085,66638,66640],{"id":66639},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66642,66643],{},[23,66644],{"alt":125,"src":66645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66647,66648],{},[23,66649],{"alt":125,"src":66650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22085,66652,66654],{"id":66653},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[161,66656,66657],{},[71,66658,66659],{},"事件类型的区别",[19,66661,66662],{},[23,66663],{"alt":125,"src":66664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66666,66667],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[161,66669,66670],{"start":126},[71,66671,66672],{},"注册事件的区别",[19,66674,66675],{},[23,66676],{"alt":125,"src":66677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22085,66679,66681],{"id":66680},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66683,66684],{},[23,66685],{"alt":125,"src":66686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66688,66689],{},[23,66690],{"alt":125,"src":66691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[196,66693,66695],{"className":53153,"code":66694,"language":53155,"meta":125,"style":125},"\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",[81,66696,66697,66705,66722,66745,66753,66758,66763,66768,66772,66780,66788],{"__ignoreMap":125},[204,66698,66699,66701,66703],{"class":206,"line":207},[204,66700,1123],{"class":214},[204,66702,51886],{"class":51386},[204,66704,51393],{"class":214},[204,66706,66707,66709,66712,66715,66717,66720],{"class":206,"line":126},[204,66708,52230],{"class":214},[204,66710,66711],{"class":51386},"form",[204,66713,66714],{"class":2049}," action",[204,66716,260],{"class":214},[204,66718,66719],{"class":319},"\"http:\u002F\u002Fwww.itcast.cn\"",[204,66721,51393],{"class":214},[204,66723,66724,66726,66728,66730,66732,66735,66738,66740,66743],{"class":206,"line":131},[204,66725,51427],{"class":214},[204,66727,53907],{"class":51386},[204,66729,53910],{"class":2049},[204,66731,260],{"class":214},[204,66733,66734],{"class":319},"\"submit\"",[204,66736,66737],{"class":2049}," value",[204,66739,260],{"class":214},[204,66741,66742],{"class":319},"\"免费注册\"",[204,66744,51393],{"class":214},[204,66746,66747,66749,66751],{"class":206,"line":1281},[204,66748,51427],{"class":214},[204,66750,51899],{"class":51386},[204,66752,51393],{"class":214},[204,66754,66755],{"class":206,"line":1287},[204,66756,66757],{"class":214},"      const form = document.querySelector('form')\n",[204,66759,66760],{"class":206,"line":1301},[204,66761,66762],{"class":214},"      form.addEventListener('submit', function (e) {\n",[204,66764,66765],{"class":206,"line":1307},[204,66766,66767],{"class":214},"        e.preventDefault()\n",[204,66769,66770],{"class":206,"line":1398},[204,66771,64901],{"class":214},[204,66773,66774,66776,66778],{"class":206,"line":1404},[204,66775,51862],{"class":214},[204,66777,51899],{"class":51386},[204,66779,51393],{"class":214},[204,66781,66782,66784,66786],{"class":206,"line":1416},[204,66783,52503],{"class":214},[204,66785,66711],{"class":51386},[204,66787,51393],{"class":214},[204,66789,66790,66792,66794],{"class":206,"line":1698},[204,66791,51871],{"class":214},[204,66793,51886],{"class":51386},[204,66795,51393],{"class":214},[19,66797,66798],{},"点击不在跳转！！！",[49,66800,66802],{"id":66801},"_332-事件委托","3.3.2 事件委托",[19,66804,66805],{},[23,66806],{"alt":125,"src":66807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[196,66809,66811],{"className":50719,"code":66810,"language":50721,"meta":125,"style":125},"\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",[81,66812,66813,66823,66837,66841,66849,66863,66883,66895,66903,66907,66915,66923,66935,66947,66959,66971,66983,66996,67004,67012,67017,67036,67057,67062,67067,67072,67077,67086,67090,67100,67104,67109,67114,67128,67138,67142,67146,67154,67162,67166],{"__ignoreMap":125},[204,66814,66815,66817,66819,66821],{"class":206,"line":207},[204,66816,51383],{"class":214},[204,66818,51387],{"class":51386},[204,66820,51390],{"class":2049},[204,66822,51393],{"class":214},[204,66824,66825,66827,66829,66831,66833,66835],{"class":206,"line":126},[204,66826,1123],{"class":214},[204,66828,50721],{"class":51386},[204,66830,51402],{"class":2049},[204,66832,260],{"class":214},[204,66834,51407],{"class":319},[204,66836,51393],{"class":214},[204,66838,66839],{"class":206,"line":131},[204,66840,2486],{"emptyLinePlaceholder":135},[204,66842,66843,66845,66847],{"class":206,"line":1281},[204,66844,1123],{"class":214},[204,66846,51420],{"class":51386},[204,66848,51393],{"class":214},[204,66850,66851,66853,66855,66857,66859,66861],{"class":206,"line":1287},[204,66852,52230],{"class":214},[204,66854,51430],{"class":51386},[204,66856,51433],{"class":2049},[204,66858,260],{"class":214},[204,66860,51438],{"class":319},[204,66862,51393],{"class":214},[204,66864,66865,66867,66869,66871,66873,66875,66877,66879,66881],{"class":206,"line":1301},[204,66866,52230],{"class":214},[204,66868,51430],{"class":51386},[204,66870,15007],{"class":2049},[204,66872,260],{"class":214},[204,66874,51477],{"class":319},[204,66876,51457],{"class":2049},[204,66878,260],{"class":214},[204,66880,51484],{"class":319},[204,66882,51393],{"class":214},[204,66884,66885,66887,66889,66891,66893],{"class":206,"line":1307},[204,66886,52230],{"class":214},[204,66888,51493],{"class":51386},[204,66890,51496],{"class":214},[204,66892,51493],{"class":51386},[204,66894,51393],{"class":214},[204,66896,66897,66899,66901],{"class":206,"line":1398},[204,66898,51871],{"class":214},[204,66900,51420],{"class":51386},[204,66902,51393],{"class":214},[204,66904,66905],{"class":206,"line":1404},[204,66906,2486],{"emptyLinePlaceholder":135},[204,66908,66909,66911,66913],{"class":206,"line":1416},[204,66910,1123],{"class":214},[204,66912,51886],{"class":51386},[204,66914,51393],{"class":214},[204,66916,66917,66919,66921],{"class":206,"line":1698},[204,66918,52230],{"class":214},[204,66920,68],{"class":51386},[204,66922,51393],{"class":214},[204,66924,66925,66927,66929,66931,66933],{"class":206,"line":1703},[204,66926,51427],{"class":214},[204,66928,71],{"class":51386},[204,66930,54052],{"class":214},[204,66932,71],{"class":51386},[204,66934,51393],{"class":214},[204,66936,66937,66939,66941,66943,66945],{"class":206,"line":1709},[204,66938,51427],{"class":214},[204,66940,71],{"class":51386},[204,66942,54071],{"class":214},[204,66944,71],{"class":51386},[204,66946,51393],{"class":214},[204,66948,66949,66951,66953,66955,66957],{"class":206,"line":1714},[204,66950,51427],{"class":214},[204,66952,71],{"class":51386},[204,66954,54090],{"class":214},[204,66956,71],{"class":51386},[204,66958,51393],{"class":214},[204,66960,66961,66963,66965,66967,66969],{"class":206,"line":1728},[204,66962,51427],{"class":214},[204,66964,71],{"class":51386},[204,66966,54109],{"class":214},[204,66968,71],{"class":51386},[204,66970,51393],{"class":214},[204,66972,66973,66975,66977,66979,66981],{"class":206,"line":1733},[204,66974,51427],{"class":214},[204,66976,71],{"class":51386},[204,66978,54128],{"class":214},[204,66980,71],{"class":51386},[204,66982,51393],{"class":214},[204,66984,66985,66987,66989,66992,66994],{"class":206,"line":1739},[204,66986,51427],{"class":214},[204,66988,19],{"class":51386},[204,66990,66991],{"class":214},">我不需要变色\u003C\u002F",[204,66993,19],{"class":51386},[204,66995,51393],{"class":214},[204,66997,66998,67000,67002],{"class":206,"line":1760},[204,66999,52503],{"class":214},[204,67001,68],{"class":51386},[204,67003,51393],{"class":214},[204,67005,67006,67008,67010],{"class":206,"line":1765},[204,67007,52230],{"class":214},[204,67009,51899],{"class":51386},[204,67011,51393],{"class":214},[204,67013,67014],{"class":206,"line":1779},[204,67015,67016],{"class":273},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[204,67018,67019,67021,67023,67025,67027,67029,67031,67034],{"class":206,"line":1784},[204,67020,11308],{"class":210},[204,67022,61378],{"class":263},[204,67024,13651],{"class":210},[204,67026,54482],{"class":214},[204,67028,54485],{"class":2049},[204,67030,215],{"class":214},[204,67032,67033],{"class":319},"'ul'",[204,67035,221],{"class":214},[204,67037,67038,67041,67043,67045,67047,67049,67051,67053,67055],{"class":206,"line":1813},[204,67039,67040],{"class":214},"    ul.",[204,67042,57899],{"class":2049},[204,67044,215],{"class":214},[204,67046,57904],{"class":319},[204,67048,12522],{"class":214},[204,67050,54535],{"class":210},[204,67052,1744],{"class":214},[204,67054,289],{"class":5303},[204,67056,12529],{"class":214},[204,67058,67059],{"class":206,"line":1818},[204,67060,67061],{"class":273},"      \u002F\u002F alert(1)\n",[204,67063,67064],{"class":206,"line":1835},[204,67065,67066],{"class":273},"      \u002F\u002F e.target就是我们点击的对象\n",[204,67068,67069],{"class":206,"line":1840},[204,67070,67071],{"class":273},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[204,67073,67074],{"class":206,"line":1845},[204,67075,67076],{"class":273},"      \u002F\u002F e.target.style.color = 'red'\n",[204,67078,67079,67081,67083],{"class":206,"line":1850},[204,67080,58330],{"class":214},[204,67082,58333],{"class":2049},[204,67084,67085],{"class":214},"(e)\n",[204,67087,67088],{"class":206,"line":1864},[204,67089,2486],{"emptyLinePlaceholder":135},[204,67091,67092,67094,67097],{"class":206,"line":1869},[204,67093,58330],{"class":214},[204,67095,67096],{"class":2049},"dir",[204,67098,67099],{"class":214},"(e.target)\n",[204,67101,67102],{"class":206,"line":2663},[204,67103,2486],{"emptyLinePlaceholder":135},[204,67105,67106],{"class":206,"line":2677},[204,67107,67108],{"class":273},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[204,67110,67111],{"class":206,"line":2685},[204,67112,67113],{"class":273},"      \u002F\u002F 通过tagName来进行判断\n",[204,67115,67116,67118,67121,67123,67126],{"class":206,"line":2690},[204,67117,54566],{"class":210},[204,67119,67120],{"class":214}," (e.target.tagName ",[204,67122,54572],{"class":210},[204,67124,67125],{"class":319}," 'LI'",[204,67127,12529],{"class":214},[204,67129,67130,67133,67135],{"class":206,"line":2696},[204,67131,67132],{"class":214},"        e.target.style.color ",[204,67134,260],{"class":210},[204,67136,67137],{"class":319}," 'red'\n",[204,67139,67140],{"class":206,"line":2702},[204,67141,52484],{"class":214},[204,67143,67144],{"class":206,"line":2707},[204,67145,33547],{"class":214},[204,67147,67148,67150,67152],{"class":206,"line":8035},[204,67149,52503],{"class":214},[204,67151,51899],{"class":51386},[204,67153,51393],{"class":214},[204,67155,67156,67158,67160],{"class":206,"line":8059},[204,67157,51871],{"class":214},[204,67159,51886],{"class":51386},[204,67161,51393],{"class":214},[204,67163,67164],{"class":206,"line":8064},[204,67165,2486],{"emptyLinePlaceholder":135},[204,67167,67168,67170,67172],{"class":206,"line":8070},[204,67169,51871],{"class":214},[204,67171,50721],{"class":51386},[204,67173,51393],{"class":214},[19,67175,67176],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67178,67179],{},"if(e.target.ragName==='P') {}",[19,67181,67182],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67184,67185],{},"通过事件委托的方式实现tab栏切换改造：",[19,67187,67188],{},"一定要记住自定义属性！！！！！！",[19,67190,67191],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67193,67194],{},"id是自定义的属性名",[19,67196,67197],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[196,67199,67201],{"className":50719,"code":67200,"language":50721,"meta":125,"style":125},"\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",[81,67202,67203,67213,67227,67231,67239,67253,67273,67293,67305,67313,67319,67329,67339,67343,67347,67353,67365,67377,67389,67405,67409,67413,67419,67431,67443,67455,67465,67475,67479,67483,67491,67503,67513,67525,67529,67533,67541,67551,67561,67571,67575,67579,67589,67603,67615,67619,67623,67635,67645,67661,67671,67675,67679,67693,67703,67713,67717,67721,67727,67741,67745,67749,67757,67767,67771,67775,67784,67794,67798,67806,67814,67818,67826,67840,67854,67866,67874,67913,67945,67977,68009,68041,68049,68057,68071,68105,68139,68173,68207,68241,68249,68257,68265,68270,68275,68294,68299,68319,68327,68332,68345,68366,68379,68383,68388,68393,68406,68426,68454,68458,68462,68466,68474,68482,68486],{"__ignoreMap":125},[204,67204,67205,67207,67209,67211],{"class":206,"line":207},[204,67206,51383],{"class":214},[204,67208,51387],{"class":51386},[204,67210,51390],{"class":2049},[204,67212,51393],{"class":214},[204,67214,67215,67217,67219,67221,67223,67225],{"class":206,"line":126},[204,67216,1123],{"class":214},[204,67218,50721],{"class":51386},[204,67220,51402],{"class":2049},[204,67222,260],{"class":214},[204,67224,51407],{"class":319},[204,67226,51393],{"class":214},[204,67228,67229],{"class":206,"line":131},[204,67230,2486],{"emptyLinePlaceholder":135},[204,67232,67233,67235,67237],{"class":206,"line":1281},[204,67234,1123],{"class":214},[204,67236,51420],{"class":51386},[204,67238,51393],{"class":214},[204,67240,67241,67243,67245,67247,67249,67251],{"class":206,"line":1287},[204,67242,52230],{"class":214},[204,67244,51430],{"class":51386},[204,67246,51433],{"class":2049},[204,67248,260],{"class":214},[204,67250,51438],{"class":319},[204,67252,59213],{"class":214},[204,67254,67255,67257,67259,67261,67263,67265,67267,67269,67271],{"class":206,"line":1301},[204,67256,52230],{"class":214},[204,67258,51430],{"class":51386},[204,67260,51449],{"class":2049},[204,67262,260],{"class":214},[204,67264,51454],{"class":319},[204,67266,51457],{"class":2049},[204,67268,260],{"class":214},[204,67270,51462],{"class":319},[204,67272,59213],{"class":214},[204,67274,67275,67277,67279,67281,67283,67285,67287,67289,67291],{"class":206,"line":1307},[204,67276,52230],{"class":214},[204,67278,51430],{"class":51386},[204,67280,15007],{"class":2049},[204,67282,260],{"class":214},[204,67284,51477],{"class":319},[204,67286,51457],{"class":2049},[204,67288,260],{"class":214},[204,67290,51484],{"class":319},[204,67292,59213],{"class":214},[204,67294,67295,67297,67299,67301,67303],{"class":206,"line":1398},[204,67296,52230],{"class":214},[204,67298,51493],{"class":51386},[204,67300,63711],{"class":214},[204,67302,51493],{"class":51386},[204,67304,51393],{"class":214},[204,67306,67307,67309,67311],{"class":206,"line":1404},[204,67308,52230],{"class":214},[204,67310,5213],{"class":51386},[204,67312,51393],{"class":214},[204,67314,67315,67317],{"class":206,"line":1416},[204,67316,6490],{"class":51386},[204,67318,15659],{"class":214},[204,67320,67321,67323,67325,67327],{"class":206,"line":1698},[204,67322,54792],{"class":263},[204,67324,51523],{"class":214},[204,67326,405],{"class":263},[204,67328,1377],{"class":214},[204,67330,67331,67333,67335,67337],{"class":206,"line":1703},[204,67332,54781],{"class":263},[204,67334,51523],{"class":214},[204,67336,405],{"class":263},[204,67338,1377],{"class":214},[204,67340,67341],{"class":206,"line":1709},[204,67342,2273],{"class":214},[204,67344,67345],{"class":206,"line":1714},[204,67346,2486],{"emptyLinePlaceholder":135},[204,67348,67349,67351],{"class":206,"line":1728},[204,67350,63762],{"class":2049},[204,67352,15659],{"class":214},[204,67354,67355,67357,67359,67361,67363],{"class":206,"line":1733},[204,67356,54857],{"class":263},[204,67358,51523],{"class":214},[204,67360,63773],{"class":263},[204,67362,51578],{"class":210},[204,67364,1377],{"class":214},[204,67366,67367,67369,67371,67373,67375],{"class":206,"line":1739},[204,67368,54871],{"class":263},[204,67370,51523],{"class":214},[204,67372,63786],{"class":263},[204,67374,51578],{"class":210},[204,67376,1377],{"class":214},[204,67378,67379,67381,67383,67385,67387],{"class":206,"line":1760},[204,67380,54792],{"class":263},[204,67382,51523],{"class":214},[204,67384,913],{"class":263},[204,67386,51578],{"class":210},[204,67388,1377],{"class":214},[204,67390,67391,67393,67395,67397,67399,67401,67403],{"class":206,"line":1765},[204,67392,62063],{"class":263},[204,67394,51523],{"class":214},[204,67396,431],{"class":263},[204,67398,51578],{"class":210},[204,67400,51607],{"class":263},[204,67402,62330],{"class":263},[204,67404,1377],{"class":214},[204,67406,67407],{"class":206,"line":1779},[204,67408,2273],{"class":214},[204,67410,67411],{"class":206,"line":1784},[204,67412,2486],{"emptyLinePlaceholder":135},[204,67414,67415,67417],{"class":206,"line":1813},[204,67416,63831],{"class":2049},[204,67418,15659],{"class":214},[204,67420,67421,67423,67425,67427,67429],{"class":206,"line":1818},[204,67422,54857],{"class":263},[204,67424,51523],{"class":214},[204,67426,524],{"class":263},[204,67428,541],{"class":210},[204,67430,1377],{"class":214},[204,67432,67433,67435,67437,67439,67441],{"class":206,"line":1835},[204,67434,54871],{"class":263},[204,67436,51523],{"class":214},[204,67438,1120],{"class":263},[204,67440,51578],{"class":210},[204,67442,1377],{"class":214},[204,67444,67445,67447,67449,67451,67453],{"class":206,"line":1840},[204,67446,57445],{"class":263},[204,67448,51523],{"class":214},[204,67450,1120],{"class":263},[204,67452,51578],{"class":210},[204,67454,1377],{"class":214},[204,67456,67457,67459,67461,67463],{"class":206,"line":1845},[204,67458,55095],{"class":263},[204,67460,51523],{"class":214},[204,67462,51563],{"class":263},[204,67464,1377],{"class":214},[204,67466,67467,67469,67471,67473],{"class":206,"line":1850},[204,67468,55106],{"class":263},[204,67470,51523],{"class":214},[204,67472,51754],{"class":263},[204,67474,1377],{"class":214},[204,67476,67477],{"class":206,"line":1864},[204,67478,2273],{"class":214},[204,67480,67481],{"class":206,"line":1869},[204,67482,2486],{"emptyLinePlaceholder":135},[204,67484,67485,67487,67489],{"class":206,"line":2663},[204,67486,63831],{"class":2049},[204,67488,63904],{"class":51386},[204,67490,15659],{"class":214},[204,67492,67493,67495,67497,67499,67501],{"class":206,"line":2677},[204,67494,55008],{"class":263},[204,67496,51523],{"class":214},[204,67498,1013],{"class":263},[204,67500,51578],{"class":210},[204,67502,1377],{"class":214},[204,67504,67505,67507,67509,67511],{"class":206,"line":2685},[204,67506,62420],{"class":263},[204,67508,51523],{"class":214},[204,67510,63927],{"class":263},[204,67512,1377],{"class":214},[204,67514,67515,67517,67519,67521,67523],{"class":206,"line":2690},[204,67516,62086],{"class":263},[204,67518,51523],{"class":214},[204,67520,913],{"class":263},[204,67522,51578],{"class":210},[204,67524,1377],{"class":214},[204,67526,67527],{"class":206,"line":2696},[204,67528,2273],{"class":214},[204,67530,67531],{"class":206,"line":2702},[204,67532,2486],{"emptyLinePlaceholder":135},[204,67534,67535,67537,67539],{"class":206,"line":2707},[204,67536,63831],{"class":2049},[204,67538,61378],{"class":51386},[204,67540,15659],{"class":214},[204,67542,67543,67545,67547,67549],{"class":206,"line":8035},[204,67544,54818],{"class":263},[204,67546,51523],{"class":214},[204,67548,54823],{"class":263},[204,67550,1377],{"class":214},[204,67552,67553,67555,67557,67559],{"class":206,"line":8059},[204,67554,55095],{"class":263},[204,67556,51523],{"class":214},[204,67558,51563],{"class":263},[204,67560,1377],{"class":214},[204,67562,67563,67565,67567,67569],{"class":206,"line":8064},[204,67564,55106],{"class":263},[204,67566,51523],{"class":214},[204,67568,51666],{"class":263},[204,67570,1377],{"class":214},[204,67572,67573],{"class":206,"line":8070},[204,67574,2273],{"class":214},[204,67576,67577],{"class":206,"line":8097},[204,67578,2486],{"emptyLinePlaceholder":135},[204,67580,67581,67583,67585,67587],{"class":206,"line":8102},[204,67582,63831],{"class":2049},[204,67584,61378],{"class":51386},[204,67586,55161],{"class":51386},[204,67588,15659],{"class":214},[204,67590,67591,67593,67595,67597,67599,67601],{"class":206,"line":8108},[204,67592,54792],{"class":263},[204,67594,51523],{"class":214},[204,67596,405],{"class":263},[204,67598,9037],{"class":263},[204,67600,51578],{"class":210},[204,67602,1377],{"class":214},[204,67604,67605,67607,67609,67611,67613],{"class":206,"line":8120},[204,67606,55008],{"class":263},[204,67608,51523],{"class":214},[204,67610,762],{"class":263},[204,67612,51578],{"class":210},[204,67614,1377],{"class":214},[204,67616,67617],{"class":206,"line":8132},[204,67618,2273],{"class":214},[204,67620,67621],{"class":206,"line":8144},[204,67622,2486],{"emptyLinePlaceholder":135},[204,67624,67625,67627,67629,67631,67633],{"class":206,"line":9803},[204,67626,63831],{"class":2049},[204,67628,61378],{"class":51386},[204,67630,55161],{"class":51386},[204,67632,1485],{"class":51386},[204,67634,15659],{"class":214},[204,67636,67637,67639,67641,67643],{"class":206,"line":9828},[204,67638,64056],{"class":263},[204,67640,51523],{"class":214},[204,67642,54823],{"class":263},[204,67644,1377],{"class":214},[204,67646,67647,67649,67651,67653,67655,67657,67659],{"class":206,"line":9851},[204,67648,62318],{"class":263},[204,67650,51523],{"class":214},[204,67652,292],{"class":263},[204,67654,51578],{"class":210},[204,67656,51607],{"class":263},[204,67658,64077],{"class":263},[204,67660,1377],{"class":214},[204,67662,67663,67665,67667,67669],{"class":206,"line":9875},[204,67664,57502],{"class":263},[204,67666,51523],{"class":214},[204,67668,62455],{"class":263},[204,67670,1377],{"class":214},[204,67672,67673],{"class":206,"line":9880},[204,67674,2273],{"class":214},[204,67676,67677],{"class":206,"line":9885},[204,67678,2486],{"emptyLinePlaceholder":135},[204,67680,67681,67683,67685,67687,67689,67691],{"class":206,"line":9890},[204,67682,63831],{"class":2049},[204,67684,61378],{"class":51386},[204,67686,55161],{"class":51386},[204,67688,1485],{"class":51386},[204,67690,64110],{"class":2049},[204,67692,15659],{"class":214},[204,67694,67695,67697,67699,67701],{"class":206,"line":9899},[204,67696,61877],{"class":263},[204,67698,51523],{"class":214},[204,67700,64121],{"class":263},[204,67702,1377],{"class":214},[204,67704,67705,67707,67709,67711],{"class":206,"line":9904},[204,67706,57502],{"class":263},[204,67708,51523],{"class":214},[204,67710,64121],{"class":263},[204,67712,1377],{"class":214},[204,67714,67715],{"class":206,"line":9910},[204,67716,2273],{"class":214},[204,67718,67719],{"class":206,"line":9931},[204,67720,2486],{"emptyLinePlaceholder":135},[204,67722,67723,67725],{"class":206,"line":9937},[204,67724,64146],{"class":2049},[204,67726,15659],{"class":214},[204,67728,67729,67731,67733,67735,67737,67739],{"class":206,"line":9951},[204,67730,54781],{"class":263},[204,67732,51523],{"class":214},[204,67734,405],{"class":263},[204,67736,64159],{"class":263},[204,67738,51578],{"class":210},[204,67740,1377],{"class":214},[204,67742,67743],{"class":206,"line":9957},[204,67744,2273],{"class":214},[204,67746,67747],{"class":206,"line":9984},[204,67748,2486],{"emptyLinePlaceholder":135},[204,67750,67751,67753,67755],{"class":206,"line":9993},[204,67752,64146],{"class":2049},[204,67754,62260],{"class":2049},[204,67756,15659],{"class":214},[204,67758,67759,67761,67763,67765],{"class":206,"line":9999},[204,67760,55095],{"class":263},[204,67762,51523],{"class":214},[204,67764,54823],{"class":263},[204,67766,1377],{"class":214},[204,67768,67769],{"class":206,"line":10007},[204,67770,2273],{"class":214},[204,67772,67773],{"class":206,"line":10012},[204,67774,2486],{"emptyLinePlaceholder":135},[204,67776,67777,67779,67782],{"class":206,"line":16691},[204,67778,64146],{"class":2049},[204,67780,67781],{"class":2049}," .active",[204,67783,15659],{"class":214},[204,67785,67786,67788,67790,67792],{"class":206,"line":16697},[204,67787,55095],{"class":263},[204,67789,51523],{"class":214},[204,67791,60955],{"class":263},[204,67793,1377],{"class":214},[204,67795,67796],{"class":206,"line":16720},[204,67797,2273],{"class":214},[204,67799,67800,67802,67804],{"class":206,"line":16726},[204,67801,52503],{"class":214},[204,67803,5213],{"class":51386},[204,67805,51393],{"class":214},[204,67807,67808,67810,67812],{"class":206,"line":16749},[204,67809,51871],{"class":214},[204,67811,51420],{"class":51386},[204,67813,51393],{"class":214},[204,67815,67816],{"class":206,"line":16763},[204,67817,2486],{"emptyLinePlaceholder":135},[204,67819,67820,67822,67824],{"class":206,"line":16783},[204,67821,1123],{"class":214},[204,67823,51886],{"class":51386},[204,67825,51393],{"class":214},[204,67827,67828,67830,67832,67834,67836,67838],{"class":206,"line":16789},[204,67829,52230],{"class":214},[204,67831,51697],{"class":51386},[204,67833,53572],{"class":2049},[204,67835,260],{"class":214},[204,67837,64261],{"class":319},[204,67839,51393],{"class":214},[204,67841,67842,67844,67846,67848,67850,67852],{"class":206,"line":16800},[204,67843,51427],{"class":214},[204,67845,51697],{"class":51386},[204,67847,53572],{"class":2049},[204,67849,260],{"class":214},[204,67851,64276],{"class":319},[204,67853,51393],{"class":214},[204,67855,67856,67858,67860,67862,67864],{"class":206,"line":16823},[204,67857,55320],{"class":214},[204,67859,49],{"class":51386},[204,67861,64287],{"class":214},[204,67863,49],{"class":51386},[204,67865,51393],{"class":214},[204,67867,67868,67870,67872],{"class":206,"line":16845},[204,67869,55320],{"class":214},[204,67871,68],{"class":51386},[204,67873,51393],{"class":214},[204,67875,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67903,67905,67907,67909,67911],{"class":206,"line":16850},[204,67877,55388],{"class":214},[204,67879,71],{"class":51386},[204,67881,61138],{"class":214},[204,67883,62],{"class":51386},[204,67885,53572],{"class":2049},[204,67887,260],{"class":214},[204,67889,59792],{"class":319},[204,67891,61143],{"class":2049},[204,67893,260],{"class":214},[204,67895,64322],{"class":319},[204,67897,54037],{"class":2049},[204,67899,260],{"class":214},[204,67901,67902],{"class":319},"\"0\"",[204,67904,64325],{"class":214},[204,67906,62],{"class":51386},[204,67908,55400],{"class":214},[204,67910,71],{"class":51386},[204,67912,51393],{"class":214},[204,67914,67915,67917,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943],{"class":206,"line":16856},[204,67916,55388],{"class":214},[204,67918,71],{"class":51386},[204,67920,61138],{"class":214},[204,67922,62],{"class":51386},[204,67924,61143],{"class":2049},[204,67926,260],{"class":214},[204,67928,64322],{"class":319},[204,67930,54037],{"class":2049},[204,67932,260],{"class":214},[204,67934,3764],{"class":319},[204,67936,64352],{"class":214},[204,67938,62],{"class":51386},[204,67940,55400],{"class":214},[204,67942,71],{"class":51386},[204,67944,51393],{"class":214},[204,67946,67947,67949,67951,67953,67955,67957,67959,67961,67963,67965,67967,67969,67971,67973,67975],{"class":206,"line":16870},[204,67948,55388],{"class":214},[204,67950,71],{"class":51386},[204,67952,61138],{"class":214},[204,67954,62],{"class":51386},[204,67956,61143],{"class":2049},[204,67958,260],{"class":214},[204,67960,64322],{"class":319},[204,67962,54037],{"class":2049},[204,67964,260],{"class":214},[204,67966,3787],{"class":319},[204,67968,64379],{"class":214},[204,67970,62],{"class":51386},[204,67972,55400],{"class":214},[204,67974,71],{"class":51386},[204,67976,51393],{"class":214},[204,67978,67979,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007],{"class":206,"line":16883},[204,67980,55388],{"class":214},[204,67982,71],{"class":51386},[204,67984,61138],{"class":214},[204,67986,62],{"class":51386},[204,67988,61143],{"class":2049},[204,67990,260],{"class":214},[204,67992,64322],{"class":319},[204,67994,54037],{"class":2049},[204,67996,260],{"class":214},[204,67998,3800],{"class":319},[204,68000,64406],{"class":214},[204,68002,62],{"class":51386},[204,68004,55400],{"class":214},[204,68006,71],{"class":51386},[204,68008,51393],{"class":214},[204,68010,68011,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039],{"class":206,"line":16888},[204,68012,55388],{"class":214},[204,68014,71],{"class":51386},[204,68016,61138],{"class":214},[204,68018,62],{"class":51386},[204,68020,61143],{"class":2049},[204,68022,260],{"class":214},[204,68024,64322],{"class":319},[204,68026,54037],{"class":2049},[204,68028,260],{"class":214},[204,68030,3813],{"class":319},[204,68032,64433],{"class":214},[204,68034,62],{"class":51386},[204,68036,55400],{"class":214},[204,68038,71],{"class":51386},[204,68040,51393],{"class":214},[204,68042,68043,68045,68047],{"class":206,"line":16902},[204,68044,55493],{"class":214},[204,68046,68],{"class":51386},[204,68048,51393],{"class":214},[204,68050,68051,68053,68055],{"class":206,"line":16907},[204,68052,51862],{"class":214},[204,68054,51697],{"class":51386},[204,68056,51393],{"class":214},[204,68058,68059,68061,68063,68065,68067,68069],{"class":206,"line":16913},[204,68060,51427],{"class":214},[204,68062,51697],{"class":51386},[204,68064,53572],{"class":2049},[204,68066,260],{"class":214},[204,68068,64470],{"class":319},[204,68070,51393],{"class":214},[204,68072,68073,68075,68077,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103],{"class":206,"line":16918},[204,68074,55320],{"class":214},[204,68076,51697],{"class":51386},[204,68078,53572],{"class":2049},[204,68080,260],{"class":214},[204,68082,64485],{"class":319},[204,68084,61138],{"class":214},[204,68086,23],{"class":51386},[204,68088,55325],{"class":2049},[204,68090,260],{"class":214},[204,68092,64496],{"class":319},[204,68094,55333],{"class":2049},[204,68096,260],{"class":214},[204,68098,7739],{"class":319},[204,68100,64505],{"class":214},[204,68102,51697],{"class":51386},[204,68104,51393],{"class":214},[204,68106,68107,68109,68111,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137],{"class":206,"line":16932},[204,68108,55320],{"class":214},[204,68110,51697],{"class":51386},[204,68112,53572],{"class":2049},[204,68114,260],{"class":214},[204,68116,62709],{"class":319},[204,68118,61138],{"class":214},[204,68120,23],{"class":51386},[204,68122,55325],{"class":2049},[204,68124,260],{"class":214},[204,68126,64532],{"class":319},[204,68128,55333],{"class":2049},[204,68130,260],{"class":214},[204,68132,7739],{"class":319},[204,68134,64505],{"class":214},[204,68136,51697],{"class":51386},[204,68138,51393],{"class":214},[204,68140,68141,68143,68145,68147,68149,68151,68153,68155,68157,68159,68161,68163,68165,68167,68169,68171],{"class":206,"line":16937},[204,68142,55320],{"class":214},[204,68144,51697],{"class":51386},[204,68146,53572],{"class":2049},[204,68148,260],{"class":214},[204,68150,62709],{"class":319},[204,68152,61138],{"class":214},[204,68154,23],{"class":51386},[204,68156,55325],{"class":2049},[204,68158,260],{"class":214},[204,68160,64567],{"class":319},[204,68162,55333],{"class":2049},[204,68164,260],{"class":214},[204,68166,7739],{"class":319},[204,68168,64505],{"class":214},[204,68170,51697],{"class":51386},[204,68172,51393],{"class":214},[204,68174,68175,68177,68179,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201,68203,68205],{"class":206,"line":16942},[204,68176,55320],{"class":214},[204,68178,51697],{"class":51386},[204,68180,53572],{"class":2049},[204,68182,260],{"class":214},[204,68184,62709],{"class":319},[204,68186,61138],{"class":214},[204,68188,23],{"class":51386},[204,68190,55325],{"class":2049},[204,68192,260],{"class":214},[204,68194,64602],{"class":319},[204,68196,55333],{"class":2049},[204,68198,260],{"class":214},[204,68200,7739],{"class":319},[204,68202,64505],{"class":214},[204,68204,51697],{"class":51386},[204,68206,51393],{"class":214},[204,68208,68209,68211,68213,68215,68217,68219,68221,68223,68225,68227,68229,68231,68233,68235,68237,68239],{"class":206,"line":16956},[204,68210,55320],{"class":214},[204,68212,51697],{"class":51386},[204,68214,53572],{"class":2049},[204,68216,260],{"class":214},[204,68218,62709],{"class":319},[204,68220,61138],{"class":214},[204,68222,23],{"class":51386},[204,68224,55325],{"class":2049},[204,68226,260],{"class":214},[204,68228,64637],{"class":319},[204,68230,55333],{"class":2049},[204,68232,260],{"class":214},[204,68234,7739],{"class":319},[204,68236,64505],{"class":214},[204,68238,51697],{"class":51386},[204,68240,51393],{"class":214},[204,68242,68243,68245,68247],{"class":206,"line":16968},[204,68244,51862],{"class":214},[204,68246,51697],{"class":51386},[204,68248,51393],{"class":214},[204,68250,68251,68253,68255],{"class":206,"line":16973},[204,68252,52503],{"class":214},[204,68254,51697],{"class":51386},[204,68256,51393],{"class":214},[204,68258,68259,68261,68263],{"class":206,"line":16986},[204,68260,52230],{"class":214},[204,68262,51899],{"class":51386},[204,68264,51393],{"class":214},[204,68266,68267],{"class":206,"line":16991},[204,68268,68269],{"class":273},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[204,68271,68272],{"class":206,"line":16996},[204,68273,68274],{"class":273},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[204,68276,68277,68279,68281,68283,68285,68287,68289,68292],{"class":206,"line":17001},[204,68278,11308],{"class":210},[204,68280,61378],{"class":263},[204,68282,13651],{"class":210},[204,68284,54482],{"class":214},[204,68286,54485],{"class":2049},[204,68288,215],{"class":214},[204,68290,68291],{"class":319},"'.tab-nav ul'",[204,68293,221],{"class":214},[204,68295,68296],{"class":206,"line":17014},[204,68297,68298],{"class":273},"    \u002F\u002F 2.添加事件\n",[204,68300,68301,68303,68305,68307,68309,68311,68313,68315,68317],{"class":206,"line":17019},[204,68302,67040],{"class":214},[204,68304,57899],{"class":2049},[204,68306,215],{"class":214},[204,68308,57904],{"class":319},[204,68310,12522],{"class":214},[204,68312,54535],{"class":210},[204,68314,1744],{"class":214},[204,68316,289],{"class":5303},[204,68318,12529],{"class":214},[204,68320,68321,68323,68325],{"class":206,"line":32719},[204,68322,58330],{"class":214},[204,68324,67096],{"class":2049},[204,68326,67099],{"class":214},[204,68328,68329],{"class":206,"line":32725},[204,68330,68331],{"class":273},"      \u002F\u002Fe.targer是我们点击的对象\n",[204,68333,68334,68336,68338,68340,68343],{"class":206,"line":32731},[204,68335,54566],{"class":210},[204,68337,67120],{"class":214},[204,68339,54572],{"class":210},[204,68341,68342],{"class":319}," 'A'",[204,68344,12529],{"class":214},[204,68346,68347,68349,68351,68353,68356,68358,68360,68362,68364],{"class":206,"line":32737},[204,68348,52011],{"class":214},[204,68350,54485],{"class":2049},[204,68352,215],{"class":214},[204,68354,68355],{"class":319},"'.active'",[204,68357,57089],{"class":214},[204,68359,57092],{"class":2049},[204,68361,215],{"class":214},[204,68363,64800],{"class":319},[204,68365,221],{"class":214},[204,68367,68368,68371,68373,68375,68377],{"class":206,"line":32743},[204,68369,68370],{"class":214},"        e.target.classList.",[204,68372,5421],{"class":2049},[204,68374,215],{"class":214},[204,68376,64800],{"class":319},[204,68378,221],{"class":214},[204,68380,68381],{"class":206,"line":32754},[204,68382,2486],{"emptyLinePlaceholder":135},[204,68384,68385],{"class":206,"line":32760},[204,68386,68387],{"class":273},"        \u002F\u002F 下面大盒子模块\n",[204,68389,68390],{"class":206,"line":32780},[204,68391,68392],{"class":273},"        \u002F\u002F console.log(e.target.dataset.id)\n",[204,68394,68395,68397,68399,68401,68403],{"class":206,"line":32786},[204,68396,61356],{"class":210},[204,68398,3118],{"class":263},[204,68400,13651],{"class":210},[204,68402,45652],{"class":210},[204,68404,68405],{"class":214},"e.target.dataset.id\n",[204,68407,68408,68410,68412,68414,68416,68418,68420,68422,68424],{"class":206,"line":32797},[204,68409,52011],{"class":214},[204,68411,54485],{"class":2049},[204,68413,215],{"class":214},[204,68415,64848],{"class":319},[204,68417,57089],{"class":214},[204,68419,57092],{"class":2049},[204,68421,215],{"class":214},[204,68423,64800],{"class":319},[204,68425,221],{"class":214},[204,68427,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68452],{"class":206,"line":32803},[204,68429,52011],{"class":214},[204,68431,54485],{"class":2049},[204,68433,215],{"class":214},[204,68435,64874],{"class":319},[204,68437,654],{"class":214},[204,68439,45652],{"class":210},[204,68441,25205],{"class":263},[204,68443,57118],{"class":319},[204,68445,57089],{"class":214},[204,68447,5421],{"class":2049},[204,68449,215],{"class":214},[204,68451,64800],{"class":319},[204,68453,221],{"class":214},[204,68455,68456],{"class":206,"line":32809},[204,68457,2486],{"emptyLinePlaceholder":135},[204,68459,68460],{"class":206,"line":32815},[204,68461,52484],{"class":214},[204,68463,68464],{"class":206,"line":32821},[204,68465,33547],{"class":214},[204,68467,68468,68470,68472],{"class":206,"line":32827},[204,68469,52503],{"class":214},[204,68471,51899],{"class":51386},[204,68473,51393],{"class":214},[204,68475,68476,68478,68480],{"class":206,"line":32833},[204,68477,51871],{"class":214},[204,68479,51886],{"class":51386},[204,68481,51393],{"class":214},[204,68483,68484],{"class":206,"line":32839},[204,68485,2486],{"emptyLinePlaceholder":135},[204,68487,68488,68490,68492],{"class":206,"line":32859},[204,68489,51871],{"class":214},[204,68491,50721],{"class":51386},[204,68493,51393],{"class":214},[49,68495,68497],{"id":68496},"_333-页面加载事件","3.3.3 页面加载事件",[161,68499,68500],{},[71,68501,68502],{},"load",[19,68504,68505],{},[23,68506],{"alt":125,"src":68507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68509,68510],{},"window代表整个窗口，比document还要大",[19,68512,68513],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68515,68516],{},"img.addEventListener('load', function () {",[19,68518,68519],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68521,52550],{},[161,68523,68524],{"start":126},[71,68525,68526],{},"DOMContentLoaded",[19,68528,68529],{},[23,68530],{"alt":125,"src":68531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68533,68534],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[49,68536,68538],{"id":68537},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68540,68541],{},[23,68542],{"alt":125,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68545,68546],{},[23,68547],{"alt":125,"src":68548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68550,68551],{},[23,68552],{"alt":125,"src":68553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68555,68556],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68558,68559],{},"获得的是数字型数据，不带单位",[19,68561,68562],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68564,68565],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68567,68568],{},"它是通过document.documentElement来获取",[19,68570,68571],{},[23,68572],{"alt":125,"src":68573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68575,68576],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[49,68578,68580],{"id":68579},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68582,68583],{},[23,68584],{"alt":125,"src":68585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68587,68588],{},[23,68589],{"alt":125,"src":68590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[49,68592,68594],{"id":68593},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68596,68597],{},[23,68598],{"alt":125,"src":68599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68601,68602],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68604,68605],{},[23,68606],{"alt":125,"src":68607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68609,68610],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68612,68613],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68615,68616],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68618,68619],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68621,68622],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68624,68625],{},[23,68626],{"alt":125,"src":68627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68629,68630],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68632,68633],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68635,68636],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68638,68639],{},"e.pageX-box.getBoundingClientRect()",[49,68641,68643],{"id":68642},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68645,68646],{},[23,68647],{"alt":125,"src":68648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68650,68651],{},"这个是相对于视口来说的，它是个方法，不是属性值",[49,68653,68655],{"id":68654},"_338-总结","3.3.8 总结",[19,68657,68658],{},[23,68659],{"alt":125,"src":68660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68662,68663],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68665,68666],{},"修改盒子的宽高只能通过width和height来实现",[49,68668,68670],{"id":68669},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[196,68672,68674],{"className":50719,"code":68673,"language":50721,"meta":125,"style":125},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[81,68675,68676,68681,68686,68691,68696],{"__ignoreMap":125},[204,68677,68678],{"class":206,"line":207},[204,68679,68680],{"class":214},"\u002F* 页面滑动 *\u002F\n",[204,68682,68683],{"class":206,"line":126},[204,68684,68685],{"class":214},"html {\n",[204,68687,68688],{"class":206,"line":131},[204,68689,68690],{"class":214},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[204,68692,68693],{"class":206,"line":1281},[204,68694,68695],{"class":214},"  scroll-behavior: smooth;\n",[204,68697,68698],{"class":206,"line":1287},[204,68699,1651],{"class":214},[19,68701,68702],{},"默认是auto",[49,68704,68706],{"id":68705},"_3310-日期对象","3.3.10 日期对象",[22085,68708,68710],{"id":68709},"_33101-实例化","3.3.10.1 实例化",[19,68712,68713],{},[23,68714],{"alt":125,"src":68715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22085,68717,68719],{"id":68718},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68721,68722],{},[23,68723],{"alt":125,"src":68724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68726,68727],{},"月份+1",[19,68729,68730],{},"老外认为第一天为0，星期天",[19,68732,68733],{},"方法使用的时候必须要跟括号",[19,68735,68736],{},"快速获得日期",[19,68738,68739],{},"\u002F\u002F 得到年月日",[19,68741,68742],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68744,68745],{},"\u002F\u002F 得到当地日期",[19,68747,68748],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68750,68751],{},"\u002F\u002F 得到当地时间",[19,68753,68754],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68756,68757],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68759,68760],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51899,68762,68763],{},"\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",[19,68765,68766],{},"学会去封装函数！",[22085,68768,68770],{"id":68769},"_33103-时间戳","3.3.10.3 时间戳",[19,68772,68773],{},[23,68774],{"alt":125,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68777,68778],{},[23,68779],{"alt":125,"src":68780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68782,68783],{},"三种方法记住一个就可以",[49,68785,68787],{"id":68786},"_3311-节点操作","3.3.11 节点操作",[22085,68789,68791],{"id":68790},"_33111-dom节点","3.3.11.1 DOM节点",[19,68793,68794],{},[23,68795],{"alt":125,"src":68796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68798,68799],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22085,68801,68803],{"id":68802},"_33112-查找节点","3.3.11.2 查找节点",[19,68805,68806],{},"前边的document.querySelector()是获取的元素",[19,68808,68809],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68811,68812],{},[23,68813],{"alt":125,"src":68814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[161,68816,68817],{},[71,68818,68819],{},"父节点",[19,68821,68822],{},[23,68823],{"alt":125,"src":68824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[161,68826,68827],{"start":126},[71,68828,68829],{},"子节点",[19,68831,68832],{},[23,68833],{"alt":125,"src":68834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68836,68837],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68839,68840],{},"children获得的是伪数组，是亲儿子",[161,68842,68843],{"start":131},[71,68844,68845],{},"兄弟节点",[19,68847,68848],{},[23,68849],{"alt":125,"src":68850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22085,68852,68854],{"id":68853},"_33113-增加节点","3.3.11.3 增加节点",[19,68856,68857],{},[23,68858],{"alt":125,"src":68859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68861,68862],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68864,68865],{},[23,68866],{"alt":125,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68869,68870],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68872,68873],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68875,68876],{},"例：",[51899,68878,68879],{},"\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",[19,68881,68882],{},[23,68883],{"alt":125,"src":68884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68886,68887],{},"false只克隆标签，里边的内容不会克隆过来",[196,68889,68891],{"className":50719,"code":68890,"language":50721,"meta":125,"style":125},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[81,68892,68893],{"__ignoreMap":125},[204,68894,68895],{"class":206,"line":207},[204,68896,68890],{"class":214},[22085,68898,68900],{"id":68899},"_33114-删除节点","3.3.11.4 删除节点",[19,68902,68903],{},[23,68904],{"alt":125,"src":68905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68907,68908],{},"父亲删儿子",[19,68910,68911],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[49,68913,68915],{"id":68914},"_3312-m端事件","3.3.12 M端事件",[19,68917,68918],{},"M端就是移动端",[19,68920,68921],{},[23,68922],{"alt":125,"src":68923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[49,68925,68927],{"id":68926},"_3313-插件","3.3.13 插件",[19,68929,68930],{},"要熟悉官网！！！",[19,68932,68933],{},[62,68934,68935],{"href":68935,"rel":68936},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[66],[19,68938,68939],{},[62,68940,68941],{"href":68941,"rel":68942},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[66],[49,68944,68946],{"id":68945},"_3314-学生信息表","3.3.14 学生信息表",[161,68948,68949,68952,68955,68958,68961,68964,68967,68970],{},[71,68950,68951],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[71,68953,68954],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[71,68956,68957],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[71,68959,68960],{},"用好表单元素自带的属性，value,name等",[71,68962,68963],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[71,68965,68966],{},"不要忘记事件对象",[71,68968,68969],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[71,68971,68972],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,68974,68975],{},"结构：",[196,68977,68979],{"className":50719,"code":68978,"language":50721,"meta":125,"style":125},"\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",[81,68980,68981,68991,69005,69009,69017,69031,69051,69072,69085,69109,69117,69121,69129,69142,69163,69191,69219,69224,69246,69266,69285,69293,69321,69343,69363,69383,69403,69423,69443,69451,69471,69479,69483,69496,69504,69512,69520,69533,69546,69559,69572,69585,69598,69611,69619,69627,69635,69640,69645,69650,69655,69660,69665,69670,69675,69680,69685,69690,69695,69700,69708,69716,69724,69728,69748,69767,69787,69807,69827,69847,69851,69856,69876,69881,69891,69896,69901,69921,69943,69948,69958,69962,69966,69971,69976,70005,70019,70034,70038,70042,70046,70051,70062,70075,70080,70085,70090,70095,70100,70104,70109,70114,70123,70128,70133,70145,70150,70157,70161,70166,70176,70181,70191,70196,70224,70245,70255,70275,70293,70310,70327,70344,70361,70365,70375,70380,70385,70390,70401,70405,70409,70413,70418,70423,70444,70456,70461,70466,70471,70485,70490,70497,70501,70505,70513,70517,70525,70529],{"__ignoreMap":125},[204,68982,68983,68985,68987,68989],{"class":206,"line":207},[204,68984,51383],{"class":214},[204,68986,51387],{"class":51386},[204,68988,51390],{"class":2049},[204,68990,51393],{"class":214},[204,68992,68993,68995,68997,68999,69001,69003],{"class":206,"line":126},[204,68994,1123],{"class":214},[204,68996,50721],{"class":51386},[204,68998,51402],{"class":2049},[204,69000,260],{"class":214},[204,69002,51407],{"class":319},[204,69004,51393],{"class":214},[204,69006,69007],{"class":206,"line":131},[204,69008,2486],{"emptyLinePlaceholder":135},[204,69010,69011,69013,69015],{"class":206,"line":1281},[204,69012,1123],{"class":214},[204,69014,51420],{"class":51386},[204,69016,51393],{"class":214},[204,69018,69019,69021,69023,69025,69027,69029],{"class":206,"line":1287},[204,69020,52230],{"class":214},[204,69022,51430],{"class":51386},[204,69024,51433],{"class":2049},[204,69026,260],{"class":214},[204,69028,51438],{"class":319},[204,69030,59213],{"class":214},[204,69032,69033,69035,69037,69039,69041,69043,69045,69047,69049],{"class":206,"line":1301},[204,69034,52230],{"class":214},[204,69036,51430],{"class":51386},[204,69038,15007],{"class":2049},[204,69040,260],{"class":214},[204,69042,51477],{"class":319},[204,69044,51457],{"class":2049},[204,69046,260],{"class":214},[204,69048,51484],{"class":319},[204,69050,59213],{"class":214},[204,69052,69053,69055,69057,69059,69061,69063,69065,69067,69070],{"class":206,"line":1307},[204,69054,52230],{"class":214},[204,69056,51430],{"class":51386},[204,69058,51449],{"class":2049},[204,69060,260],{"class":214},[204,69062,51454],{"class":319},[204,69064,51457],{"class":2049},[204,69066,260],{"class":214},[204,69068,69069],{"class":319},"\"ie=edge\"",[204,69071,59213],{"class":214},[204,69073,69074,69076,69078,69081,69083],{"class":206,"line":1398},[204,69075,52230],{"class":214},[204,69077,51493],{"class":51386},[204,69079,69080],{"class":214},">学生信息管理\u003C\u002F",[204,69082,51493],{"class":51386},[204,69084,51393],{"class":214},[204,69086,69087,69089,69092,69095,69097,69100,69102,69104,69107],{"class":206,"line":1404},[204,69088,52230],{"class":214},[204,69090,69091],{"class":51386},"link",[204,69093,69094],{"class":2049}," rel",[204,69096,260],{"class":214},[204,69098,69099],{"class":319},"\"stylesheet\"",[204,69101,61143],{"class":2049},[204,69103,260],{"class":214},[204,69105,69106],{"class":319},"\"css\u002Findex.css\"",[204,69108,59213],{"class":214},[204,69110,69111,69113,69115],{"class":206,"line":1416},[204,69112,51871],{"class":214},[204,69114,51420],{"class":51386},[204,69116,51393],{"class":214},[204,69118,69119],{"class":206,"line":1698},[204,69120,2486],{"emptyLinePlaceholder":135},[204,69122,69123,69125,69127],{"class":206,"line":1703},[204,69124,1123],{"class":214},[204,69126,51886],{"class":51386},[204,69128,51393],{"class":214},[204,69130,69131,69133,69135,69138,69140],{"class":206,"line":1709},[204,69132,52230],{"class":214},[204,69134,10],{"class":51386},[204,69136,69137],{"class":214},">新增学员\u003C\u002F",[204,69139,10],{"class":51386},[204,69141,51393],{"class":214},[204,69143,69144,69146,69148,69150,69152,69154,69157,69159,69161],{"class":206,"line":1714},[204,69145,52230],{"class":214},[204,69147,66711],{"class":51386},[204,69149,53572],{"class":2049},[204,69151,260],{"class":214},[204,69153,62750],{"class":319},[204,69155,69156],{"class":2049}," autocomplete",[204,69158,260],{"class":214},[204,69160,31862],{"class":319},[204,69162,51393],{"class":214},[204,69164,69165,69168,69170,69172,69174,69176,69178,69180,69183,69185,69187,69189],{"class":206,"line":1728},[204,69166,69167],{"class":214},"    姓名：\u003C",[204,69169,53907],{"class":51386},[204,69171,53910],{"class":2049},[204,69173,260],{"class":214},[204,69175,62785],{"class":319},[204,69177,53572],{"class":2049},[204,69179,260],{"class":214},[204,69181,69182],{"class":319},"\"uname\"",[204,69184,15007],{"class":2049},[204,69186,260],{"class":214},[204,69188,69182],{"class":319},[204,69190,59213],{"class":214},[204,69192,69193,69196,69198,69200,69202,69204,69206,69208,69211,69213,69215,69217],{"class":206,"line":1733},[204,69194,69195],{"class":214},"    年龄：\u003C",[204,69197,53907],{"class":51386},[204,69199,53910],{"class":2049},[204,69201,260],{"class":214},[204,69203,62785],{"class":319},[204,69205,53572],{"class":2049},[204,69207,260],{"class":214},[204,69209,69210],{"class":319},"\"age\"",[204,69212,15007],{"class":2049},[204,69214,260],{"class":214},[204,69216,69210],{"class":319},[204,69218,59213],{"class":214},[204,69220,69221],{"class":206,"line":1739},[204,69222,69223],{"class":214},"    性别:\n",[204,69225,69226,69228,69231,69233,69235,69238,69240,69242,69244],{"class":206,"line":1760},[204,69227,51427],{"class":214},[204,69229,69230],{"class":51386},"select",[204,69232,15007],{"class":2049},[204,69234,260],{"class":214},[204,69236,69237],{"class":319},"\"gender\"",[204,69239,53572],{"class":2049},[204,69241,260],{"class":214},[204,69243,69237],{"class":319},[204,69245,51393],{"class":214},[204,69247,69248,69250,69253,69255,69257,69259,69262,69264],{"class":206,"line":1765},[204,69249,55320],{"class":214},[204,69251,69252],{"class":51386},"option",[204,69254,66737],{"class":2049},[204,69256,260],{"class":214},[204,69258,10048],{"class":319},[204,69260,69261],{"class":214},">男\u003C\u002F",[204,69263,69252],{"class":51386},[204,69265,51393],{"class":214},[204,69267,69268,69270,69272,69274,69276,69278,69281,69283],{"class":206,"line":1779},[204,69269,55320],{"class":214},[204,69271,69252],{"class":51386},[204,69273,66737],{"class":2049},[204,69275,260],{"class":214},[204,69277,10117],{"class":319},[204,69279,69280],{"class":214},">女\u003C\u002F",[204,69282,69252],{"class":51386},[204,69284,51393],{"class":214},[204,69286,69287,69289,69291],{"class":206,"line":1784},[204,69288,51862],{"class":214},[204,69290,69230],{"class":51386},[204,69292,51393],{"class":214},[204,69294,69295,69298,69300,69302,69304,69306,69308,69310,69313,69315,69317,69319],{"class":206,"line":1813},[204,69296,69297],{"class":214},"    薪资：\u003C",[204,69299,53907],{"class":51386},[204,69301,53910],{"class":2049},[204,69303,260],{"class":214},[204,69305,62785],{"class":319},[204,69307,53572],{"class":2049},[204,69309,260],{"class":214},[204,69311,69312],{"class":319},"\"salary\"",[204,69314,15007],{"class":2049},[204,69316,260],{"class":214},[204,69318,69312],{"class":319},[204,69320,59213],{"class":214},[204,69322,69323,69326,69328,69330,69332,69335,69337,69339,69341],{"class":206,"line":1818},[204,69324,69325],{"class":214},"    就业城市：\u003C",[204,69327,69230],{"class":51386},[204,69329,15007],{"class":2049},[204,69331,260],{"class":214},[204,69333,69334],{"class":319},"\"city\"",[204,69336,53572],{"class":2049},[204,69338,260],{"class":214},[204,69340,69334],{"class":319},[204,69342,51393],{"class":214},[204,69344,69345,69347,69349,69351,69353,69356,69359,69361],{"class":206,"line":1835},[204,69346,55320],{"class":214},[204,69348,69252],{"class":51386},[204,69350,66737],{"class":2049},[204,69352,260],{"class":214},[204,69354,69355],{"class":319},"\"北京\"",[204,69357,69358],{"class":214},">北京\u003C\u002F",[204,69360,69252],{"class":51386},[204,69362,51393],{"class":214},[204,69364,69365,69367,69369,69371,69373,69376,69379,69381],{"class":206,"line":1840},[204,69366,55320],{"class":214},[204,69368,69252],{"class":51386},[204,69370,66737],{"class":2049},[204,69372,260],{"class":214},[204,69374,69375],{"class":319},"\"上海\"",[204,69377,69378],{"class":214},">上海\u003C\u002F",[204,69380,69252],{"class":51386},[204,69382,51393],{"class":214},[204,69384,69385,69387,69389,69391,69393,69396,69399,69401],{"class":206,"line":1845},[204,69386,55320],{"class":214},[204,69388,69252],{"class":51386},[204,69390,66737],{"class":2049},[204,69392,260],{"class":214},[204,69394,69395],{"class":319},"\"广州\"",[204,69397,69398],{"class":214},">广州\u003C\u002F",[204,69400,69252],{"class":51386},[204,69402,51393],{"class":214},[204,69404,69405,69407,69409,69411,69413,69416,69419,69421],{"class":206,"line":1850},[204,69406,55320],{"class":214},[204,69408,69252],{"class":51386},[204,69410,66737],{"class":2049},[204,69412,260],{"class":214},[204,69414,69415],{"class":319},"\"深圳\"",[204,69417,69418],{"class":214},">深圳\u003C\u002F",[204,69420,69252],{"class":51386},[204,69422,51393],{"class":214},[204,69424,69425,69427,69429,69431,69433,69436,69439,69441],{"class":206,"line":1864},[204,69426,55320],{"class":214},[204,69428,69252],{"class":51386},[204,69430,66737],{"class":2049},[204,69432,260],{"class":214},[204,69434,69435],{"class":319},"\"曹县\"",[204,69437,69438],{"class":214},">曹县\u003C\u002F",[204,69440,69252],{"class":51386},[204,69442,51393],{"class":214},[204,69444,69445,69447,69449],{"class":206,"line":1869},[204,69446,51862],{"class":214},[204,69448,69230],{"class":51386},[204,69450,51393],{"class":214},[204,69452,69453,69455,69457,69459,69461,69464,69467,69469],{"class":206,"line":2663},[204,69454,51427],{"class":214},[204,69456,53973],{"class":51386},[204,69458,53572],{"class":2049},[204,69460,260],{"class":214},[204,69462,69463],{"class":319},"\"add\"",[204,69465,69466],{"class":214},">录入\u003C\u002F",[204,69468,53973],{"class":51386},[204,69470,51393],{"class":214},[204,69472,69473,69475,69477],{"class":206,"line":2677},[204,69474,52503],{"class":214},[204,69476,66711],{"class":51386},[204,69478,51393],{"class":214},[204,69480,69481],{"class":206,"line":2685},[204,69482,2486],{"emptyLinePlaceholder":135},[204,69484,69485,69487,69489,69492,69494],{"class":206,"line":2690},[204,69486,52230],{"class":214},[204,69488,10],{"class":51386},[204,69490,69491],{"class":214},">就业榜\u003C\u002F",[204,69493,10],{"class":51386},[204,69495,51393],{"class":214},[204,69497,69498,69500,69502],{"class":206,"line":2696},[204,69499,52230],{"class":214},[204,69501,352],{"class":51386},[204,69503,51393],{"class":214},[204,69505,69506,69508,69510],{"class":206,"line":2702},[204,69507,51427],{"class":214},[204,69509,355],{"class":51386},[204,69511,51393],{"class":214},[204,69513,69514,69516,69518],{"class":206,"line":2707},[204,69515,55320],{"class":214},[204,69517,358],{"class":51386},[204,69519,51393],{"class":214},[204,69521,69522,69524,69526,69529,69531],{"class":206,"line":8035},[204,69523,55388],{"class":214},[204,69525,361],{"class":51386},[204,69527,69528],{"class":214},">序号\u003C\u002F",[204,69530,361],{"class":51386},[204,69532,51393],{"class":214},[204,69534,69535,69537,69539,69542,69544],{"class":206,"line":8059},[204,69536,55388],{"class":214},[204,69538,361],{"class":51386},[204,69540,69541],{"class":214},">姓名\u003C\u002F",[204,69543,361],{"class":51386},[204,69545,51393],{"class":214},[204,69547,69548,69550,69552,69555,69557],{"class":206,"line":8064},[204,69549,55388],{"class":214},[204,69551,361],{"class":51386},[204,69553,69554],{"class":214},">年龄\u003C\u002F",[204,69556,361],{"class":51386},[204,69558,51393],{"class":214},[204,69560,69561,69563,69565,69568,69570],{"class":206,"line":8070},[204,69562,55388],{"class":214},[204,69564,361],{"class":51386},[204,69566,69567],{"class":214},">性别\u003C\u002F",[204,69569,361],{"class":51386},[204,69571,51393],{"class":214},[204,69573,69574,69576,69578,69581,69583],{"class":206,"line":8097},[204,69575,55388],{"class":214},[204,69577,361],{"class":51386},[204,69579,69580],{"class":214},">薪资\u003C\u002F",[204,69582,361],{"class":51386},[204,69584,51393],{"class":214},[204,69586,69587,69589,69591,69594,69596],{"class":206,"line":8102},[204,69588,55388],{"class":214},[204,69590,361],{"class":51386},[204,69592,69593],{"class":214},">就业城市\u003C\u002F",[204,69595,361],{"class":51386},[204,69597,51393],{"class":214},[204,69599,69600,69602,69604,69607,69609],{"class":206,"line":8108},[204,69601,55388],{"class":214},[204,69603,361],{"class":51386},[204,69605,69606],{"class":214},">操作\u003C\u002F",[204,69608,361],{"class":51386},[204,69610,51393],{"class":214},[204,69612,69613,69615,69617],{"class":206,"line":8120},[204,69614,55493],{"class":214},[204,69616,358],{"class":51386},[204,69618,51393],{"class":214},[204,69620,69621,69623,69625],{"class":206,"line":8132},[204,69622,51862],{"class":214},[204,69624,355],{"class":51386},[204,69626,51393],{"class":214},[204,69628,69629,69631,69633],{"class":206,"line":8144},[204,69630,51427],{"class":214},[204,69632,398],{"class":51386},[204,69634,51393],{"class":214},[204,69636,69637],{"class":206,"line":9803},[204,69638,69639],{"class":273},"      \u003C!-- \n",[204,69641,69642],{"class":206,"line":9828},[204,69643,69644],{"class":273},"        \u003Ctr>\n",[204,69646,69647],{"class":206,"line":9851},[204,69648,69649],{"class":273},"          \u003Ctd>1001\u003C\u002Ftd>\n",[204,69651,69652],{"class":206,"line":9875},[204,69653,69654],{"class":273},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[204,69656,69657],{"class":206,"line":9880},[204,69658,69659],{"class":273},"          \u003Ctd>19\u003C\u002Ftd>\n",[204,69661,69662],{"class":206,"line":9885},[204,69663,69664],{"class":273},"          \u003Ctd>男\u003C\u002Ftd>\n",[204,69666,69667],{"class":206,"line":9890},[204,69668,69669],{"class":273},"          \u003Ctd>15000\u003C\u002Ftd>\n",[204,69671,69672],{"class":206,"line":9899},[204,69673,69674],{"class":273},"          \u003Ctd>上海\u003C\u002Ftd>\n",[204,69676,69677],{"class":206,"line":9904},[204,69678,69679],{"class":273},"          \u003Ctd>\n",[204,69681,69682],{"class":206,"line":9910},[204,69683,69684],{"class":273},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[204,69686,69687],{"class":206,"line":9931},[204,69688,69689],{"class":273},"          \u003C\u002Ftd>\n",[204,69691,69692],{"class":206,"line":9937},[204,69693,69694],{"class":273},"        \u003C\u002Ftr> \n",[204,69696,69697],{"class":206,"line":9951},[204,69698,69699],{"class":273},"        -->\n",[204,69701,69702,69704,69706],{"class":206,"line":9957},[204,69703,51862],{"class":214},[204,69705,398],{"class":51386},[204,69707,51393],{"class":214},[204,69709,69710,69712,69714],{"class":206,"line":9984},[204,69711,52503],{"class":214},[204,69713,352],{"class":51386},[204,69715,51393],{"class":214},[204,69717,69718,69720,69722],{"class":206,"line":9993},[204,69719,52230],{"class":214},[204,69721,51899],{"class":51386},[204,69723,51393],{"class":214},[204,69725,69726],{"class":206,"line":9999},[204,69727,60044],{"class":273},[204,69729,69730,69732,69735,69737,69739,69741,69743,69746],{"class":206,"line":10007},[204,69731,11308],{"class":210},[204,69733,69734],{"class":263}," uname",[204,69736,13651],{"class":210},[204,69738,54482],{"class":214},[204,69740,54485],{"class":2049},[204,69742,215],{"class":214},[204,69744,69745],{"class":319},"'.uname'",[204,69747,221],{"class":214},[204,69749,69750,69752,69754,69756,69758,69760,69762,69765],{"class":206,"line":10012},[204,69751,11308],{"class":210},[204,69753,15776],{"class":263},[204,69755,13651],{"class":210},[204,69757,54482],{"class":214},[204,69759,54485],{"class":2049},[204,69761,215],{"class":214},[204,69763,69764],{"class":319},"'.age'",[204,69766,221],{"class":214},[204,69768,69769,69771,69774,69776,69778,69780,69782,69785],{"class":206,"line":16691},[204,69770,11308],{"class":210},[204,69772,69773],{"class":263}," gender",[204,69775,13651],{"class":210},[204,69777,54482],{"class":214},[204,69779,54485],{"class":2049},[204,69781,215],{"class":214},[204,69783,69784],{"class":319},"'.gender'",[204,69786,221],{"class":214},[204,69788,69789,69791,69794,69796,69798,69800,69802,69805],{"class":206,"line":16697},[204,69790,11308],{"class":210},[204,69792,69793],{"class":263}," salary",[204,69795,13651],{"class":210},[204,69797,54482],{"class":214},[204,69799,54485],{"class":2049},[204,69801,215],{"class":214},[204,69803,69804],{"class":319},"'.salary'",[204,69806,221],{"class":214},[204,69808,69809,69811,69814,69816,69818,69820,69822,69825],{"class":206,"line":16720},[204,69810,11308],{"class":210},[204,69812,69813],{"class":263}," city",[204,69815,13651],{"class":210},[204,69817,54482],{"class":214},[204,69819,54485],{"class":2049},[204,69821,215],{"class":214},[204,69823,69824],{"class":319},"'.city'",[204,69826,221],{"class":214},[204,69828,69829,69831,69834,69836,69838,69840,69842,69845],{"class":206,"line":16726},[204,69830,11308],{"class":210},[204,69832,69833],{"class":263}," tbody",[204,69835,13651],{"class":210},[204,69837,54482],{"class":214},[204,69839,54485],{"class":2049},[204,69841,215],{"class":214},[204,69843,69844],{"class":319},"'tbody'",[204,69846,221],{"class":214},[204,69848,69849],{"class":206,"line":16749},[204,69850,2486],{"emptyLinePlaceholder":135},[204,69852,69853],{"class":206,"line":16763},[204,69854,69855],{"class":273},"    \u002F\u002F 获取所有带有name属性的元素\n",[204,69857,69858,69860,69863,69865,69867,69869,69871,69874],{"class":206,"line":16783},[204,69859,11308],{"class":210},[204,69861,69862],{"class":263}," items",[204,69864,13651],{"class":210},[204,69866,54482],{"class":214},[204,69868,55767],{"class":2049},[204,69870,215],{"class":214},[204,69872,69873],{"class":319},"'[name]'",[204,69875,221],{"class":214},[204,69877,69878],{"class":206,"line":16789},[204,69879,69880],{"class":273},"    \u002F\u002F 声明一个空的数组\n",[204,69882,69883,69885,69887,69889],{"class":206,"line":16800},[204,69884,11308],{"class":210},[204,69886,57781],{"class":263},[204,69888,13651],{"class":210},[204,69890,51924],{"class":214},[204,69892,69893],{"class":206,"line":16823},[204,69894,69895],{"class":273},"    \u002F\u002F 1.录入模块\n",[204,69897,69898],{"class":206,"line":16845},[204,69899,69900],{"class":273},"    \u002F\u002F 1.1这是一个表单提交事件\n",[204,69902,69903,69905,69908,69910,69912,69914,69916,69919],{"class":206,"line":16850},[204,69904,11308],{"class":210},[204,69906,69907],{"class":263}," info",[204,69909,13651],{"class":210},[204,69911,54482],{"class":214},[204,69913,54485],{"class":2049},[204,69915,215],{"class":214},[204,69917,69918],{"class":319},"'.info'",[204,69920,221],{"class":214},[204,69922,69923,69926,69928,69930,69933,69935,69937,69939,69941],{"class":206,"line":16856},[204,69924,69925],{"class":214},"    info.",[204,69927,57899],{"class":2049},[204,69929,215],{"class":214},[204,69931,69932],{"class":319},"'submit'",[204,69934,12522],{"class":214},[204,69936,54535],{"class":210},[204,69938,1744],{"class":214},[204,69940,289],{"class":5303},[204,69942,12529],{"class":214},[204,69944,69945],{"class":206,"line":16870},[204,69946,69947],{"class":273},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[204,69949,69950,69953,69956],{"class":206,"line":16883},[204,69951,69952],{"class":214},"      e.",[204,69954,69955],{"class":2049},"preventDefault",[204,69957,2062],{"class":214},[204,69959,69960],{"class":206,"line":16888},[204,69961,60098],{"class":273},[204,69963,69964],{"class":206,"line":16902},[204,69965,2486],{"emptyLinePlaceholder":135},[204,69967,69968],{"class":206,"line":16907},[204,69969,69970],{"class":273},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[204,69972,69973],{"class":206,"line":16913},[204,69974,69975],{"class":273},"      \u002F\u002F 先遍历循环\n",[204,69977,69978,69980,69982,69984,69986,69988,69990,69992,69994,69997,69999,70001,70003],{"class":206,"line":16918},[204,69979,52370],{"class":210},[204,69981,1744],{"class":214},[204,69983,51933],{"class":210},[204,69985,9525],{"class":214},[204,69987,260],{"class":210},[204,69989,4179],{"class":263},[204,69991,9532],{"class":214},[204,69993,1123],{"class":210},[204,69995,69996],{"class":214}," items.",[204,69998,52054],{"class":263},[204,70000,3300],{"class":214},[204,70002,2378],{"class":210},[204,70004,12529],{"class":214},[204,70006,70007,70009,70012,70014,70017],{"class":206,"line":16932},[204,70008,2583],{"class":210},[204,70010,70011],{"class":214}," (items[i].value ",[204,70013,54572],{"class":210},[204,70015,70016],{"class":319}," ''",[204,70018,12529],{"class":214},[204,70020,70021,70024,70027,70029,70032],{"class":206,"line":16937},[204,70022,70023],{"class":210},"          return",[204,70025,70026],{"class":2049}," alert",[204,70028,215],{"class":214},[204,70030,70031],{"class":319},"'输入内容不能为空'",[204,70033,221],{"class":214},[204,70035,70036],{"class":206,"line":16942},[204,70037,2615],{"class":214},[204,70039,70040],{"class":206,"line":16956},[204,70041,52484],{"class":214},[204,70043,70044],{"class":206,"line":16968},[204,70045,2486],{"emptyLinePlaceholder":135},[204,70047,70048],{"class":206,"line":16973},[204,70049,70050],{"class":273},"      \u002F\u002F 创建新的对象\n",[204,70052,70053,70055,70058,70060],{"class":206,"line":16986},[204,70054,58314],{"class":210},[204,70056,70057],{"class":263}," obj",[204,70059,13651],{"class":210},[204,70061,15659],{"class":214},[204,70063,70064,70067,70069,70071,70073],{"class":206,"line":16991},[204,70065,70066],{"class":214},"        stuID: arr.",[204,70068,52054],{"class":263},[204,70070,45652],{"class":210},[204,70072,25205],{"class":263},[204,70074,31552],{"class":214},[204,70076,70077],{"class":206,"line":16996},[204,70078,70079],{"class":214},"        uname: uname.value,\n",[204,70081,70082],{"class":206,"line":17001},[204,70083,70084],{"class":214},"        age: age.value,\n",[204,70086,70087],{"class":206,"line":17014},[204,70088,70089],{"class":214},"        gender: gender.value,\n",[204,70091,70092],{"class":206,"line":17019},[204,70093,70094],{"class":214},"        salary: salary.value,\n",[204,70096,70097],{"class":206,"line":32719},[204,70098,70099],{"class":214},"        city: city.value\n",[204,70101,70102],{"class":206,"line":32725},[204,70103,52484],{"class":214},[204,70105,70106],{"class":206,"line":32731},[204,70107,70108],{"class":273},"      \u002F\u002F console.log(obj);\n",[204,70110,70111],{"class":206,"line":32737},[204,70112,70113],{"class":273},"      \u002F\u002F 追加到数组里面\n",[204,70115,70116,70118,70120],{"class":206,"line":32743},[204,70117,58093],{"class":214},[204,70119,51970],{"class":2049},[204,70121,70122],{"class":214},"(obj)\n",[204,70124,70125],{"class":206,"line":32754},[204,70126,70127],{"class":273},"      \u002F\u002F console.log(arr);\n",[204,70129,70130],{"class":206,"line":32760},[204,70131,70132],{"class":273},"      \u002F\u002F 清空表单  reset重置表单\n",[204,70134,70135,70138,70140,70143],{"class":206,"line":32780},[204,70136,70137],{"class":263},"      this",[204,70139,771],{"class":214},[204,70141,70142],{"class":2049},"reset",[204,70144,2062],{"class":214},[204,70146,70147],{"class":206,"line":32786},[204,70148,70149],{"class":273},"      \u002F\u002F 调用渲染函数\n",[204,70151,70152,70155],{"class":206,"line":32797},[204,70153,70154],{"class":2049},"      render",[204,70156,2062],{"class":214},[204,70158,70159],{"class":206,"line":32803},[204,70160,33547],{"class":214},[204,70162,70163],{"class":206,"line":32809},[204,70164,70165],{"class":273},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[204,70167,70168,70171,70174],{"class":206,"line":32815},[204,70169,70170],{"class":210},"    function",[204,70172,70173],{"class":2049}," render",[204,70175,10940],{"class":214},[204,70177,70178],{"class":206,"line":32821},[204,70179,70180],{"class":273},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[204,70182,70183,70186,70188],{"class":206,"line":32827},[204,70184,70185],{"class":214},"      tbody.innerHTML ",[204,70187,260],{"class":210},[204,70189,70190],{"class":319}," ''\n",[204,70192,70193],{"class":206,"line":32833},[204,70194,70195],{"class":273},"      \u002F\u002F 遍历数组\n",[204,70197,70198,70200,70202,70204,70206,70208,70210,70212,70214,70216,70218,70220,70222],{"class":206,"line":32839},[204,70199,52370],{"class":210},[204,70201,1744],{"class":214},[204,70203,51933],{"class":210},[204,70205,9525],{"class":214},[204,70207,260],{"class":210},[204,70209,4179],{"class":263},[204,70211,9532],{"class":214},[204,70213,1123],{"class":210},[204,70215,52051],{"class":214},[204,70217,52054],{"class":263},[204,70219,3300],{"class":214},[204,70221,2378],{"class":210},[204,70223,12529],{"class":214},[204,70225,70226,70228,70231,70233,70235,70238,70240,70243],{"class":206,"line":32859},[204,70227,61356],{"class":210},[204,70229,70230],{"class":263}," tr",[204,70232,13651],{"class":210},[204,70234,54482],{"class":214},[204,70236,70237],{"class":2049},"createElement",[204,70239,215],{"class":214},[204,70241,70242],{"class":319},"'tr'",[204,70244,221],{"class":214},[204,70246,70247,70250,70252],{"class":206,"line":32865},[204,70248,70249],{"class":214},"        tr.innerHTML ",[204,70251,260],{"class":210},[204,70253,70254],{"class":319}," `\n",[204,70256,70257,70260,70262,70264,70266,70269,70272],{"class":206,"line":32881},[204,70258,70259],{"class":319},"        \u003Ctd>${",[204,70261,3966],{"class":214},[204,70263,1103],{"class":319},[204,70265,654],{"class":214},[204,70267,70268],{"class":319},"].",[204,70270,70271],{"class":214},"stuID",[204,70273,70274],{"class":319},"}\u003C\u002Ftd>\n",[204,70276,70277,70280,70282,70284,70286,70288,70291],{"class":206,"line":32887},[204,70278,70279],{"class":319},"          \u003Ctd>${",[204,70281,3966],{"class":214},[204,70283,1103],{"class":319},[204,70285,654],{"class":214},[204,70287,70268],{"class":319},[204,70289,70290],{"class":214},"uname",[204,70292,70274],{"class":319},[204,70294,70295,70297,70299,70301,70303,70305,70308],{"class":206,"line":32901},[204,70296,70279],{"class":319},[204,70298,3966],{"class":214},[204,70300,1103],{"class":319},[204,70302,654],{"class":214},[204,70304,70268],{"class":319},[204,70306,70307],{"class":214},"age",[204,70309,70274],{"class":319},[204,70311,70312,70314,70316,70318,70320,70322,70325],{"class":206,"line":32907},[204,70313,70279],{"class":319},[204,70315,3966],{"class":214},[204,70317,1103],{"class":319},[204,70319,654],{"class":214},[204,70321,70268],{"class":319},[204,70323,70324],{"class":214},"gender",[204,70326,70274],{"class":319},[204,70328,70329,70331,70333,70335,70337,70339,70342],{"class":206,"line":32922},[204,70330,70279],{"class":319},[204,70332,3966],{"class":214},[204,70334,1103],{"class":319},[204,70336,654],{"class":214},[204,70338,70268],{"class":319},[204,70340,70341],{"class":214},"salary",[204,70343,70274],{"class":319},[204,70345,70346,70348,70350,70352,70354,70356,70359],{"class":206,"line":32928},[204,70347,70279],{"class":319},[204,70349,3966],{"class":214},[204,70351,1103],{"class":319},[204,70353,654],{"class":214},[204,70355,70268],{"class":319},[204,70357,70358],{"class":214},"city",[204,70360,70274],{"class":319},[204,70362,70363],{"class":206,"line":32937},[204,70364,69679],{"class":319},[204,70366,70367,70370,70372],{"class":206,"line":32943},[204,70368,70369],{"class":319},"            \u003Ca href=\"javascript:\" data-id=${",[204,70371,654],{"class":214},[204,70373,70374],{"class":319},"}>删除\u003C\u002Fa>\n",[204,70376,70377],{"class":206,"line":32952},[204,70378,70379],{"class":319},"          \u003C\u002Ftd> \n",[204,70381,70382],{"class":206,"line":32958},[204,70383,70384],{"class":319},"          `\n",[204,70386,70387],{"class":206,"line":32964},[204,70388,70389],{"class":273},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[204,70391,70392,70395,70398],{"class":206,"line":32973},[204,70393,70394],{"class":214},"        tbody.",[204,70396,70397],{"class":2049},"appendChild",[204,70399,70400],{"class":214},"(tr)\n",[204,70402,70403],{"class":206,"line":32979},[204,70404,52484],{"class":214},[204,70406,70407],{"class":206,"line":32990},[204,70408,2273],{"class":214},[204,70410,70411],{"class":206,"line":32996},[204,70412,2486],{"emptyLinePlaceholder":135},[204,70414,70415],{"class":206,"line":33015},[204,70416,70417],{"class":273},"    \u002F\u002F 3.删除委托\n",[204,70419,70420],{"class":206,"line":33021},[204,70421,70422],{"class":273},"    \u002F\u002F 3.1 事件委托 tbody\n",[204,70424,70425,70428,70430,70432,70434,70436,70438,70440,70442],{"class":206,"line":33032},[204,70426,70427],{"class":214},"    tbody.",[204,70429,57899],{"class":2049},[204,70431,215],{"class":214},[204,70433,57904],{"class":319},[204,70435,12522],{"class":214},[204,70437,54535],{"class":210},[204,70439,1744],{"class":214},[204,70441,289],{"class":5303},[204,70443,12529],{"class":214},[204,70445,70446,70448,70450,70452,70454],{"class":206,"line":33038},[204,70447,54566],{"class":210},[204,70449,67120],{"class":214},[204,70451,54572],{"class":210},[204,70453,68342],{"class":319},[204,70455,12529],{"class":214},[204,70457,70458],{"class":206,"line":33058},[204,70459,70460],{"class":273},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[204,70462,70463],{"class":206,"line":33074},[204,70464,70465],{"class":273},"        \u002F\u002F console.log(e.target.dataset.id);\n",[204,70467,70468],{"class":206,"line":33080},[204,70469,70470],{"class":273},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[204,70472,70473,70476,70478,70481,70483],{"class":206,"line":33094},[204,70474,70475],{"class":214},"        arr.",[204,70477,58096],{"class":2049},[204,70479,70480],{"class":214},"(e.target.dataset.id, ",[204,70482,431],{"class":263},[204,70484,221],{"class":214},[204,70486,70487],{"class":206,"line":33100},[204,70488,70489],{"class":273},"        \u002F\u002F 重新渲染一次\n",[204,70491,70492,70495],{"class":206,"line":33106},[204,70493,70494],{"class":2049},"        render",[204,70496,2062],{"class":214},[204,70498,70499],{"class":206,"line":33117},[204,70500,52484],{"class":214},[204,70502,70503],{"class":206,"line":33123},[204,70504,33547],{"class":214},[204,70506,70507,70509,70511],{"class":206,"line":33129},[204,70508,52503],{"class":214},[204,70510,51899],{"class":51386},[204,70512,51393],{"class":214},[204,70514,70515],{"class":206,"line":33139},[204,70516,2486],{"emptyLinePlaceholder":135},[204,70518,70519,70521,70523],{"class":206,"line":33145},[204,70520,51871],{"class":214},[204,70522,51886],{"class":51386},[204,70524,51393],{"class":214},[204,70526,70527],{"class":206,"line":33156},[204,70528,2486],{"emptyLinePlaceholder":135},[204,70530,70531,70533,70535],{"class":206,"line":33162},[204,70532,51871],{"class":214},[204,70534,50721],{"class":51386},[204,70536,51393],{"class":214},[19,70538,70539],{},"样式：",[196,70541,70545],{"className":70542,"code":70543,"language":70544,"meta":125,"style":125},"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",[81,70546,70547,70552,70562,70571,70575,70579,70584,70594,70599,70603,70608,70618,70623,70632,70636,70640,70645,70650,70660,70670,70675,70679,70684,70693,70703,70708,70718,70728,70732,70737,70745,70749,70754,70759,70764,70772,70781,70785,70790,70799,70803,70808,70817,70821,70826,70835,70844,70852,70856,70861,70870,70880,70889,70899,70905,70914,70924,70934,70938,70943,70952,70960,70970,70978,70987,70996,71006,71014,71018,71023,71032],{"__ignoreMap":125},[204,70548,70549],{"class":206,"line":207},[204,70550,70551],{"class":214},"* {\n",[204,70553,70554,70557,70559],{"class":206,"line":126},[204,70555,70556],{"class":51386},"  margin",[204,70558,51523],{"class":214},[204,70560,70561],{"class":319},"0;\n",[204,70563,70564,70567,70569],{"class":206,"line":131},[204,70565,70566],{"class":319},"  padding",[204,70568,51523],{"class":214},[204,70570,70561],{"class":319},[204,70572,70573],{"class":206,"line":1281},[204,70574,1651],{"class":214},[204,70576,70577],{"class":206,"line":1287},[204,70578,2486],{"emptyLinePlaceholder":135},[204,70580,70581],{"class":206,"line":1301},[204,70582,70583],{"class":319},"a {\n",[204,70585,70586,70589,70591],{"class":206,"line":1307},[204,70587,70588],{"class":51386},"  text-decoration",[204,70590,51523],{"class":214},[204,70592,70593],{"class":319},"none;\n",[204,70595,70596],{"class":206,"line":1398},[204,70597,70598],{"class":319},"  color:#721c24;\n",[204,70600,70601],{"class":206,"line":1404},[204,70602,1651],{"class":214},[204,70604,70605],{"class":206,"line":1416},[204,70606,70607],{"class":319},"h1 {\n",[204,70609,70610,70613,70615],{"class":206,"line":1698},[204,70611,70612],{"class":51386},"  text-align",[204,70614,51523],{"class":214},[204,70616,70617],{"class":319},"center;\n",[204,70619,70620],{"class":206,"line":1703},[204,70621,70622],{"class":319},"  color:#333;\n",[204,70624,70625,70627,70629],{"class":206,"line":1709},[204,70626,70556],{"class":51386},[204,70628,51523],{"class":214},[204,70630,70631],{"class":319},"20px 0;\n",[204,70633,70634],{"class":206,"line":1714},[204,70635,2760],{"class":214},[204,70637,70638],{"class":206,"line":1728},[204,70639,1651],{"class":214},[204,70641,70642],{"class":206,"line":1733},[204,70643,70644],{"class":319},"table {\n",[204,70646,70647],{"class":206,"line":1739},[204,70648,70649],{"class":319},"  margin:0 auto;\n",[204,70651,70652,70655,70657],{"class":206,"line":1760},[204,70653,70654],{"class":51386},"  width",[204,70656,51523],{"class":214},[204,70658,70659],{"class":319},"800px;\n",[204,70661,70662,70665,70667],{"class":206,"line":1765},[204,70663,70664],{"class":51386},"  border-collapse",[204,70666,51523],{"class":214},[204,70668,70669],{"class":319},"collapse;\n",[204,70671,70672],{"class":206,"line":1779},[204,70673,70674],{"class":319},"  color:#004085;\n",[204,70676,70677],{"class":206,"line":1784},[204,70678,1651],{"class":214},[204,70680,70681],{"class":206,"line":1813},[204,70682,70683],{"class":319},"th {\n",[204,70685,70686,70688,70690],{"class":206,"line":1818},[204,70687,70566],{"class":51386},[204,70689,51523],{"class":214},[204,70691,70692],{"class":319},"10px;\n",[204,70694,70695,70698,70700],{"class":206,"line":1835},[204,70696,70697],{"class":51386},"  background",[204,70699,51523],{"class":214},[204,70701,70702],{"class":273},"#cfe5ff;\n",[204,70704,70705],{"class":206,"line":1840},[204,70706,70707],{"class":214},"  \n",[204,70709,70710,70713,70715],{"class":206,"line":1845},[204,70711,70712],{"class":51386},"  font-size",[204,70714,51523],{"class":214},[204,70716,70717],{"class":319},"20px;\n",[204,70719,70720,70723,70725],{"class":206,"line":1850},[204,70721,70722],{"class":51386},"  font-weight",[204,70724,51523],{"class":214},[204,70726,70727],{"class":319},"400;\n",[204,70729,70730],{"class":206,"line":1864},[204,70731,1651],{"class":214},[204,70733,70734],{"class":206,"line":1869},[204,70735,70736],{"class":319},"td,th {\n",[204,70738,70739,70742],{"class":206,"line":2663},[204,70740,70741],{"class":319},"  border:1px solid",[204,70743,70744],{"class":273}," #b8daff;\n",[204,70746,70747],{"class":206,"line":2677},[204,70748,1651],{"class":214},[204,70750,70751],{"class":206,"line":2685},[204,70752,70753],{"class":319},"td {\n",[204,70755,70756],{"class":206,"line":2690},[204,70757,70758],{"class":319},"  padding:10px;\n",[204,70760,70761],{"class":206,"line":2696},[204,70762,70763],{"class":319},"  color:#666;\n",[204,70765,70766,70768,70770],{"class":206,"line":2702},[204,70767,70612],{"class":51386},[204,70769,51523],{"class":214},[204,70771,70617],{"class":319},[204,70773,70774,70776,70778],{"class":206,"line":2707},[204,70775,70712],{"class":51386},[204,70777,51523],{"class":214},[204,70779,70780],{"class":319},"16px;\n",[204,70782,70783],{"class":206,"line":8035},[204,70784,1651],{"class":214},[204,70786,70787],{"class":206,"line":8059},[204,70788,70789],{"class":319},"tbody tr {\n",[204,70791,70792,70794,70796],{"class":206,"line":8064},[204,70793,70697],{"class":51386},[204,70795,51523],{"class":214},[204,70797,70798],{"class":273},"#fff;\n",[204,70800,70801],{"class":206,"line":8070},[204,70802,1651],{"class":214},[204,70804,70805],{"class":206,"line":8097},[204,70806,70807],{"class":319},"tbody tr:hover {\n",[204,70809,70810,70812,70814],{"class":206,"line":8102},[204,70811,70697],{"class":51386},[204,70813,51523],{"class":214},[204,70815,70816],{"class":273},"#e1ecf8;\n",[204,70818,70819],{"class":206,"line":8108},[204,70820,1651],{"class":214},[204,70822,70823],{"class":206,"line":8120},[204,70824,70825],{"class":319},".info {\n",[204,70827,70828,70830,70832],{"class":206,"line":8132},[204,70829,70654],{"class":51386},[204,70831,51523],{"class":214},[204,70833,70834],{"class":319},"900px;\n",[204,70836,70837,70839,70841],{"class":206,"line":8144},[204,70838,70556],{"class":51386},[204,70840,51523],{"class":214},[204,70842,70843],{"class":319},"50px auto;\n",[204,70845,70846,70848,70850],{"class":206,"line":9803},[204,70847,70612],{"class":51386},[204,70849,51523],{"class":214},[204,70851,70617],{"class":319},[204,70853,70854],{"class":206,"line":9828},[204,70855,1651],{"class":214},[204,70857,70858],{"class":206,"line":9851},[204,70859,70860],{"class":319},".info  input, .info select {\n",[204,70862,70863,70865,70867],{"class":206,"line":9875},[204,70864,70654],{"class":51386},[204,70866,51523],{"class":214},[204,70868,70869],{"class":319},"80px;\n",[204,70871,70872,70875,70877],{"class":206,"line":9880},[204,70873,70874],{"class":51386},"  height",[204,70876,51523],{"class":214},[204,70878,70879],{"class":319},"27px;\n",[204,70881,70882,70885,70887],{"class":206,"line":9885},[204,70883,70884],{"class":51386},"  outline",[204,70886,51523],{"class":214},[204,70888,70593],{"class":319},[204,70890,70891,70894,70896],{"class":206,"line":9890},[204,70892,70893],{"class":51386},"  border-radius",[204,70895,51523],{"class":214},[204,70897,70898],{"class":319},"5px;\n",[204,70900,70901,70903],{"class":206,"line":9899},[204,70902,70741],{"class":319},[204,70904,70744],{"class":273},[204,70906,70907,70910,70912],{"class":206,"line":9904},[204,70908,70909],{"class":51386},"  padding-left",[204,70911,51523],{"class":214},[204,70913,70898],{"class":319},[204,70915,70916,70919,70921],{"class":206,"line":9910},[204,70917,70918],{"class":51386},"  box-sizing",[204,70920,51523],{"class":214},[204,70922,70923],{"class":319},"border-box;\n",[204,70925,70926,70929,70931],{"class":206,"line":9931},[204,70927,70928],{"class":51386},"  margin-right",[204,70930,51523],{"class":214},[204,70932,70933],{"class":319},"15px;\n",[204,70935,70936],{"class":206,"line":9937},[204,70937,1651],{"class":214},[204,70939,70940],{"class":206,"line":9951},[204,70941,70942],{"class":319},".info button {\n",[204,70944,70945,70947,70949],{"class":206,"line":9957},[204,70946,70654],{"class":51386},[204,70948,51523],{"class":214},[204,70950,70951],{"class":319},"60px;\n",[204,70953,70954,70956,70958],{"class":206,"line":9984},[204,70955,70874],{"class":51386},[204,70957,51523],{"class":214},[204,70959,70879],{"class":319},[204,70961,70962,70965,70967],{"class":206,"line":9993},[204,70963,70964],{"class":51386},"  background-color",[204,70966,51523],{"class":214},[204,70968,70969],{"class":273},"#004085;\n",[204,70971,70972,70974,70976],{"class":206,"line":9999},[204,70973,70884],{"class":51386},[204,70975,51523],{"class":214},[204,70977,70593],{"class":319},[204,70979,70980,70983,70985],{"class":206,"line":10007},[204,70981,70982],{"class":51386},"  border",[204,70984,51523],{"class":214},[204,70986,70561],{"class":319},[204,70988,70989,70992,70994],{"class":206,"line":10012},[204,70990,70991],{"class":51386},"  color",[204,70993,51523],{"class":214},[204,70995,70798],{"class":273},[204,70997,70998,71001,71003],{"class":206,"line":16691},[204,70999,71000],{"class":51386},"  cursor",[204,71002,51523],{"class":214},[204,71004,71005],{"class":319},"pointer;\n",[204,71007,71008,71010,71012],{"class":206,"line":16697},[204,71009,70893],{"class":51386},[204,71011,51523],{"class":214},[204,71013,70898],{"class":319},[204,71015,71016],{"class":206,"line":16720},[204,71017,1651],{"class":214},[204,71019,71020],{"class":206,"line":16726},[204,71021,71022],{"class":319},".info .age {\n",[204,71024,71025,71027,71029],{"class":206,"line":16749},[204,71026,70654],{"class":51386},[204,71028,51523],{"class":214},[204,71030,71031],{"class":319},"50px;\n",[204,71033,71034],{"class":206,"line":16763},[204,71035,1651],{"class":214},[19,71037,71038],{},"思路：",[19,71040,71041],{},[23,71042],{"alt":125,"src":71043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71045,71046],{},[23,71047],{"alt":125,"src":71048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71050,71051],{},[23,71052],{"alt":125,"src":71053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[49,71055,71057],{"id":71056},"_3315-重绘回流","3.3.15 重绘回流",[19,71059,71060],{},[23,71061],{"alt":125,"src":71062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71064,71065],{},[23,71066],{"alt":125,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71069,71070],{},[23,71071],{"alt":125,"src":71072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71074,71076],{"id":71075},"_34-bom","3.4 BOM",[19,71078,71079],{},[23,71080],{"alt":125,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71083,71084],{},"平时写的document省略了window而已，实际上是window.document",[19,71086,71087],{},"函数也是这样，调用的时候实际为window.fn()",[19,71089,71090],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71092,71093],{},"window大部分情况下可以省略",[49,71095,71097],{"id":71096},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71099,71100],{},"只执行一次",[19,71102,71103],{},[23,71104],{"alt":125,"src":71105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71107,71108],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71110,71111],{},[23,71112],{"alt":125,"src":71113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[49,71115,71117],{"id":71116},"_342-js执行机制","3.4.2 JS执行机制",[19,71119,71120],{},[23,71121],{"alt":125,"src":71122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71124,71125],{},"两个的结果都是1111 3333 2222",[19,71127,71128],{},[23,71129],{"alt":125,"src":71130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71132,71133],{},[23,71134],{"alt":125,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71137,71138],{},[23,71139],{"alt":125,"src":71140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71142,71143],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71145,71146],{},"工作流程：",[19,71148,71149],{},[23,71150],{"alt":125,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71153,71154],{},[23,71155],{"alt":125,"src":71156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71158,71159],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71161,71162],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[49,71164,71166],{"id":71165},"_343-location对象","3.4.3 location对象",[19,71168,71169],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71171,71172],{},[23,71173],{"alt":125,"src":71174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71176,71177],{},"href可以跳转页面",[161,71179,71180],{},[71,71181,71182],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71184,71185],{},"search得到提交信息之后网站后边的地址",[19,71187,71188],{},[23,71189],{"alt":125,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71192,71193],{},[23,71194],{"alt":125,"src":71195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[161,71197,71198],{"start":126},[71,71199,71200],{},"hash:这个获取单页面应用#后边的地址",[19,71202,71203],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71205,71206],{},[23,71207],{"alt":125,"src":71208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[196,71210,71212],{"className":53153,"code":71211,"language":53155,"meta":125,"style":125},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[81,71213,71214,71234,71254],{"__ignoreMap":125},[204,71215,71216,71218,71220,71222,71224,71227,71230,71232],{"class":206,"line":207},[204,71217,52230],{"class":214},[204,71219,62],{"class":51386},[204,71221,61143],{"class":2049},[204,71223,260],{"class":214},[204,71225,71226],{"class":319},"\"#\u002Fmy\"",[204,71228,71229],{"class":214},">我的\u003C\u002F",[204,71231,62],{"class":51386},[204,71233,51393],{"class":214},[204,71235,71236,71238,71240,71242,71244,71247,71250,71252],{"class":206,"line":126},[204,71237,52230],{"class":214},[204,71239,62],{"class":51386},[204,71241,61143],{"class":2049},[204,71243,260],{"class":214},[204,71245,71246],{"class":319},"\"#\u002Ffriend\"",[204,71248,71249],{"class":214},">关注\u003C\u002F",[204,71251,62],{"class":51386},[204,71253,51393],{"class":214},[204,71255,71256,71258,71260,71262,71264,71267,71270,71272],{"class":206,"line":131},[204,71257,52230],{"class":214},[204,71259,62],{"class":51386},[204,71261,61143],{"class":2049},[204,71263,260],{"class":214},[204,71265,71266],{"class":319},"\"#\u002Fdownload\"",[204,71268,71269],{"class":214},">下载\u003C\u002F",[204,71271,62],{"class":51386},[204,71273,51393],{"class":214},[19,71275,71276],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[161,71278,71279],{"start":131},[71,71280,71281,71282,71284,71285,71287],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53802,71283],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53802,71286],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[49,71289,71291],{"id":71290},"_345-navigator对象","3.4.5 navigator对象",[19,71293,71294],{},[23,71295],{"alt":125,"src":71296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[196,71298,71302],{"className":71299,"code":71300,"language":71301,"meta":125,"style":125},"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",[81,71303,71304,71309,71320,71332,71337,71388,71429,71434,71447,71459,71464],{"__ignoreMap":125},[204,71305,71306],{"class":206,"line":207},[204,71307,71308],{"class":273},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[204,71310,71311,71313,71315,71317],{"class":206,"line":126},[204,71312,440],{"class":210},[204,71314,215],{"class":214},[204,71316,54535],{"class":210},[204,71318,71319],{"class":214}," () { \n",[204,71321,71322,71324,71327,71329],{"class":206,"line":131},[204,71323,6879],{"class":210},[204,71325,71326],{"class":263}," userAgent",[204,71328,13651],{"class":210},[204,71330,71331],{"class":214}," navigator.userAgent \n",[204,71333,71334],{"class":206,"line":1281},[204,71335,71336],{"class":273},"\u002F\u002F 验证是否为Android或iPhone \n",[204,71338,71339,71341,71344,71346,71349,71352,71354,71356,71359,71361,71364,71368,71370,71372,71374,71377,71379,71381,71383,71385],{"class":206,"line":1287},[204,71340,6879],{"class":210},[204,71342,71343],{"class":263}," android",[204,71345,13651],{"class":210},[204,71347,71348],{"class":214}," userAgent.",[204,71350,71351],{"class":2049},"match",[204,71353,215],{"class":214},[204,71355,797],{"class":319},[204,71357,71358],{"class":48063},"(Android);",[204,71360,1199],{"class":210},[204,71362,71363],{"class":263},"[\\s",[204,71365,71367],{"class":71366},"snhLl","\\\u002F",[204,71369,1153],{"class":263},[204,71371,694],{"class":210},[204,71373,215],{"class":48063},[204,71375,71376],{"class":263},"[\\d.]",[204,71378,694],{"class":210},[204,71380,642],{"class":48063},[204,71382,1199],{"class":210},[204,71384,797],{"class":319},[204,71386,71387],{"class":214},") \n",[204,71389,71390,71392,71395,71397,71399,71401,71403,71405,71408,71411,71414,71416,71418,71421,71423,71425,71427],{"class":206,"line":1301},[204,71391,6879],{"class":210},[204,71393,71394],{"class":263}," iphone",[204,71396,13651],{"class":210},[204,71398,71348],{"class":214},[204,71400,71351],{"class":2049},[204,71402,215],{"class":214},[204,71404,797],{"class":319},[204,71406,71407],{"class":48063},"(iPhone",[204,71409,71410],{"class":263},"\\s",[204,71412,71413],{"class":48063},"OS)",[204,71415,71410],{"class":263},[204,71417,215],{"class":48063},[204,71419,71420],{"class":263},"[\\d_]",[204,71422,694],{"class":210},[204,71424,642],{"class":48063},[204,71426,797],{"class":319},[204,71428,71387],{"class":214},[204,71430,71431],{"class":206,"line":1307},[204,71432,71433],{"class":273},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[204,71435,71436,71438,71441,71444],{"class":206,"line":1398},[204,71437,1617],{"class":210},[204,71439,71440],{"class":214}," (android ",[204,71442,71443],{"class":210},"||",[204,71445,71446],{"class":214}," iphone) { \n",[204,71448,71449,71452,71454,71457],{"class":206,"line":1404},[204,71450,71451],{"class":214},"location.href ",[204,71453,260],{"class":210},[204,71455,71456],{"class":319}," 'http:\u002F\u002Fm.itcast.cn'",[204,71458,2760],{"class":214},[204,71460,71461],{"class":206,"line":1416},[204,71462,71463],{"class":214},"} \n",[204,71465,71466],{"class":206,"line":1698},[204,71467,71468],{"class":214},"})()\n",[49,71470,71472],{"id":71471},"_346-histroy对象","3.4.6 histroy对象",[19,71474,71475],{},[23,71476],{"alt":125,"src":71477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71479,71480],{},"浏览器地址的前进与后退!!!",[19,71482,71483],{},"history.back() 等效于 history.go(-1)",[19,71485,71486],{},"history.forward() 等效于 history.go(1)",[14,71488,71490],{"id":71489},"_35-本地存储","3.5 本地存储",[161,71492,71493,71496,71499],{},[71,71494,71495],{},"数据存储在用户浏览器中",[71,71497,71498],{},"设置、读取方便、甚至页面刷新不丢失数据",[71,71500,71501],{},"容量较大，sessionStorage和localStorage约 5M 左右",[49,71503,71505],{"id":71504},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71507,71508],{},"只能存储字符串",[19,71510,71511],{},[23,71512],{"alt":125,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71515,71516],{},[23,71517],{"alt":125,"src":71518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71520,71521],{},"键值对要加引号,不然就会当变量来看了",[19,71523,71524],{},"localStorage.setItem('uname', 'pink')",[19,71526,71527],{},"刷新之后信息不再丢失",[19,71529,71530],{},"操作key,value会跟着变",[19,71532,71533],{},"删除只删除键就可以,即名字",[19,71535,71524],{},[19,71537,71538],{},"改:",[19,71540,71541],{},"localStorage.setItem('uname','red')",[19,71543,71544],{},"有这个键就是改,没有这个键就是改",[19,71546,71547],{},[23,71548],{"alt":125,"src":71549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71551,71552],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71554,71555],{},[23,71556],{"alt":125,"src":71557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71559,71560],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[49,71562,71564],{"id":71563},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71566,71567],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71569,71570],{},"特性:",[161,71572,71573,71576,71579,71582],{},[71,71574,71575],{},"生命周期为关闭浏览器窗口",[71,71577,71578],{},"在同一个窗口(页面)下数据可以共享",[71,71580,71581],{},"以键值对的形式存储使用",[71,71583,71584],{},"用法跟localStorage 基本相同",[49,71586,71588],{"id":71587},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71590,71591],{},"本地只能存储字符串,无法直接存储复杂数据类型",[196,71593,71595],{"className":53153,"code":71594,"language":53155,"meta":125,"style":125},"\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",[81,71596,71597,71605,71610,71615,71620,71625,71629,71634,71639],{"__ignoreMap":125},[204,71598,71599,71601,71603],{"class":206,"line":207},[204,71600,1123],{"class":214},[204,71602,51899],{"class":51386},[204,71604,51393],{"class":214},[204,71606,71607],{"class":206,"line":126},[204,71608,71609],{"class":214},"    const obj = {\n",[204,71611,71612],{"class":206,"line":131},[204,71613,71614],{"class":214},"      uname: 'pink老师',\n",[204,71616,71617],{"class":206,"line":1281},[204,71618,71619],{"class":214},"      age: 18,\n",[204,71621,71622],{"class":206,"line":1287},[204,71623,71624],{"class":214},"      gender: '女'\n",[204,71626,71627],{"class":206,"line":1301},[204,71628,2273],{"class":214},[204,71630,71631],{"class":206,"line":1307},[204,71632,71633],{"class":214},"    \u002F\u002F 存储复杂数据类型\n",[204,71635,71636],{"class":206,"line":1398},[204,71637,71638],{"class":214},"    localStorage.setItem('obj', obj)\n",[204,71640,71641,71643,71645],{"class":206,"line":1404},[204,71642,52503],{"class":214},[204,71644,51899],{"class":51386},[204,71646,51393],{"class":214},[19,71648,71649],{},[23,71650],{"alt":125,"src":71651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71653,71654],{},"如果获取一下数据:",[19,71656,71657],{},"log(localStorage.getItem('obj'))",[19,71659,71660],{},[23,71661],{"alt":125,"src":71662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71664,71665],{},"发现直接存对象是使用不了的!!!",[22085,71667,71669],{"id":71668},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71671,71672],{},[23,71673],{"alt":125,"src":71674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[196,71676,71678],{"className":50719,"code":71677,"language":50721,"meta":125,"style":125},"\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",[81,71679,71680,71688,71698,71708,71717,71725,71729,71733,71759,71778,71786,71790,71795,71800],{"__ignoreMap":125},[204,71681,71682,71684,71686],{"class":206,"line":207},[204,71683,1123],{"class":214},[204,71685,51899],{"class":51386},[204,71687,51393],{"class":214},[204,71689,71690,71692,71694,71696],{"class":206,"line":126},[204,71691,11308],{"class":210},[204,71693,70057],{"class":263},[204,71695,13651],{"class":210},[204,71697,15659],{"class":214},[204,71699,71700,71703,71706],{"class":206,"line":131},[204,71701,71702],{"class":214},"      uname: ",[204,71704,71705],{"class":319},"'pink老师'",[204,71707,31552],{"class":214},[204,71709,71710,71713,71715],{"class":206,"line":1281},[204,71711,71712],{"class":214},"      age: ",[204,71714,863],{"class":263},[204,71716,31552],{"class":214},[204,71718,71719,71722],{"class":206,"line":1287},[204,71720,71721],{"class":214},"      gender: ",[204,71723,71724],{"class":319},"'女'\n",[204,71726,71727],{"class":206,"line":1301},[204,71728,2273],{"class":214},[204,71730,71731],{"class":206,"line":1307},[204,71732,71633],{"class":273},[204,71734,71735,71738,71741,71743,71746,71748,71751,71753,71756],{"class":206,"line":1398},[204,71736,71737],{"class":214},"  localStorage.",[204,71739,71740],{"class":2049},"setItem",[204,71742,215],{"class":214},[204,71744,71745],{"class":319},"'obj'",[204,71747,12522],{"class":214},[204,71749,71750],{"class":263},"JSON",[204,71752,771],{"class":214},[204,71754,71755],{"class":2049},"stringify",[204,71757,71758],{"class":214},"(obj))\n",[204,71760,71761,71764,71766,71769,71772,71774,71776],{"class":206,"line":1404},[204,71762,71763],{"class":214},"  console.",[204,71765,58333],{"class":2049},[204,71767,71768],{"class":214},"(localStorage.",[204,71770,71771],{"class":2049},"getItem",[204,71773,215],{"class":214},[204,71775,71745],{"class":319},[204,71777,30583],{"class":214},[204,71779,71780,71782,71784],{"class":206,"line":1416},[204,71781,52503],{"class":214},[204,71783,51899],{"class":51386},[204,71785,51393],{"class":214},[204,71787,71788],{"class":206,"line":1698},[204,71789,70707],{"class":214},[204,71791,71792],{"class":206,"line":1703},[204,71793,71794],{"class":214},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[204,71796,71797],{"class":206,"line":1709},[204,71798,71799],{"class":214},"  类型是字符串的\n",[204,71801,71802],{"class":206,"line":1714},[204,71803,71804],{"class":214},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22085,71806,71808],{"id":71807},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71810,71811],{},[23,71812],{"alt":125,"src":71813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71815,71816],{},[23,71817],{"alt":125,"src":71818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[196,71820,71822],{"className":53153,"code":71821,"language":53155,"meta":125,"style":125},"  \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",[81,71823,71824,71832,71836,71840,71844,71848,71852,71857,71862,71867,71872,71877,71882,71887,71892],{"__ignoreMap":125},[204,71825,71826,71828,71830],{"class":206,"line":207},[204,71827,52230],{"class":214},[204,71829,51899],{"class":51386},[204,71831,51393],{"class":214},[204,71833,71834],{"class":206,"line":126},[204,71835,71609],{"class":214},[204,71837,71838],{"class":206,"line":131},[204,71839,71614],{"class":214},[204,71841,71842],{"class":206,"line":1281},[204,71843,71619],{"class":214},[204,71845,71846],{"class":206,"line":1287},[204,71847,71624],{"class":214},[204,71849,71850],{"class":206,"line":1301},[204,71851,2273],{"class":214},[204,71853,71854],{"class":206,"line":1307},[204,71855,71856],{"class":214},"    \u002F\u002F 1.存储复杂数据类型\n",[204,71858,71859],{"class":206,"line":1398},[204,71860,71861],{"class":214},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[204,71863,71864],{"class":206,"line":1404},[204,71865,71866],{"class":214},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[204,71868,71869],{"class":206,"line":1416},[204,71870,71871],{"class":214},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[204,71873,71874],{"class":206,"line":1698},[204,71875,71876],{"class":214},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[204,71878,71879],{"class":206,"line":1703},[204,71880,71881],{"class":214},"    \u002F\u002F 取\n",[204,71883,71884],{"class":206,"line":1709},[204,71885,71886],{"class":214},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[204,71888,71889],{"class":206,"line":1714},[204,71890,71891],{"class":214},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[204,71893,71894,71896,71898],{"class":206,"line":1728},[204,71895,52503],{"class":214},[204,71897,51899],{"class":51386},[204,71899,51393],{"class":214},[19,71901,71902],{},[23,71903],{"alt":125,"src":71904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[49,71906,71908],{"id":71907},"_356-数组map方法","3.5.6 数组map方法",[19,71910,71911],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71913,71914],{},[23,71915],{"alt":125,"src":71916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71918,71919],{},[23,71920],{"alt":125,"src":71921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71923,71924,71927],{},[30,71925,71926],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71929,71930],{},"map有返回值，但是forEach没有返回值",[19,71932,71933],{},"map是个方法。用的时候要加 ()",[19,71935,71936],{},"map返回的是一个数组",[49,71938,71940],{"id":71939},"_357-数组中join方法","3.5.7 数组中join方法",[19,71942,71943],{},[23,71944],{"alt":125,"src":71945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,71947,71948],{},"类似于python中拼接字符串一样！",[161,71950,71951,71954,71957],{},[71,71952,71953],{},"小括号为空则逗号分开",[71,71955,71956],{},"小括号为空字符串 ''，则元素之间没有分隔符",[71,71958,71959],{},"小括号用啥符号就用进行分割",[49,71961,71963],{"id":71962},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[161,71965,71966,71969,71972,71975,71978],{},[71,71967,71968],{},"记住本地时间获取快速方式：new Date().toDateString()",[71,71970,71971],{},"尽量减少DOM操作，用好map+join的渲染方式",[71,71973,71974],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[71,71976,71977],{},"return可以实现函数的结束",[71,71979,71980],{},"禁止跳转是 preventDefault() 不要忘记",[196,71982,71984],{"className":50719,"code":71983,"language":50721,"meta":125,"style":125},"\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",[81,71985,71986,71996,72010,72014,72022,72036,72056,72068,72076,72082,72092,72102,72106,72110,72116,72126,72138,72142,72146,72153,72165,72179,72189,72193,72197,72204,72211,72218,72230,72242,72252,72264,72268,72272,72279,72286,72298,72310,72320,72332,72362,72366,72370,72377,72389,72401,72425,72435,72445,72449,72453,72461,72472,72484,72496,72508,72525,72537,72549,72553,72557,72564,72576,72588,72600,72611,72629,72642,72654,72678,72689,72693,72697,72705,72715,72719,72723,72729,72741,72752,72762,72766,72770,72776,72798,72802,72806,72812,72818,72830,72840,72852,72882,72895,72912,72916,72920,72931,72953,72963,72967,72971,72984,72994,73006,73018,73030,73042,73052,73062,73072,73083,73096,73100,73108,73116,73120,73128,73141,73161,73194,73227,73260,73286,73304,73322,73330,73356,73374,73392,73410,73428,73446,73454,73462,73480,73488,73517,73525,73533,73541,73554,73566,73578,73590,73602,73614,73627,73639,73647,73655,73663,73668,73673,73677,73681,73685,73689,73693,73697,73702,73707,73712,73717,73725,73733,73741,73746,73751,73756,73761,73766,73771,73776,73781,73786,73791,73796,73801,73806,73811,73815,73820,73825,73835,73844,73848,73853,73862,73878,73920,73960,73999,74064,74072,74076,74081,74099,74107,74112,74117,74147,74153,74158,74171,74183,74195,74207,74219,74231,74243,74247,74257,74261,74266,74271,74275,74284,74288,74293,74298,74317,74322,74342,74346,74351,74355,74360,74378,74396,74414,74433,74452,74471,74476,74482,74503,74509,74518,74524,74530,74536,74563,74576,74581,74591,74597,74603,74609,74615,74620,74626,74632,74638,74644,74677,74682,74687,74692,74697,74703,74709,74715,74726,74731,74737,74744,74758,74764,74788,74793,74798,74804,74810,74831,74837,74850,74856,74862,74868,74874,74879,74885,74891,74897,74915,74929,74935,74943,74949,74971,74976,74981,74986,74991,74996,75005,75014,75019],{"__ignoreMap":125},[204,71987,71988,71990,71992,71994],{"class":206,"line":207},[204,71989,51383],{"class":214},[204,71991,51387],{"class":51386},[204,71993,51390],{"class":2049},[204,71995,51393],{"class":214},[204,71997,71998,72000,72002,72004,72006,72008],{"class":206,"line":126},[204,71999,1123],{"class":214},[204,72001,50721],{"class":51386},[204,72003,51402],{"class":2049},[204,72005,260],{"class":214},[204,72007,51407],{"class":319},[204,72009,51393],{"class":214},[204,72011,72012],{"class":206,"line":131},[204,72013,2486],{"emptyLinePlaceholder":135},[204,72015,72016,72018,72020],{"class":206,"line":1281},[204,72017,1123],{"class":214},[204,72019,51420],{"class":51386},[204,72021,51393],{"class":214},[204,72023,72024,72026,72028,72030,72032,72034],{"class":206,"line":1287},[204,72025,52230],{"class":214},[204,72027,51430],{"class":51386},[204,72029,51433],{"class":2049},[204,72031,260],{"class":214},[204,72033,51438],{"class":319},[204,72035,51393],{"class":214},[204,72037,72038,72040,72042,72044,72046,72048,72050,72052,72054],{"class":206,"line":1301},[204,72039,52230],{"class":214},[204,72041,51430],{"class":51386},[204,72043,15007],{"class":2049},[204,72045,260],{"class":214},[204,72047,51477],{"class":319},[204,72049,51457],{"class":2049},[204,72051,260],{"class":214},[204,72053,51484],{"class":319},[204,72055,51393],{"class":214},[204,72057,72058,72060,72062,72064,72066],{"class":206,"line":1307},[204,72059,52230],{"class":214},[204,72061,51493],{"class":51386},[204,72063,51496],{"class":214},[204,72065,51493],{"class":51386},[204,72067,51393],{"class":214},[204,72069,72070,72072,72074],{"class":206,"line":1398},[204,72071,52230],{"class":214},[204,72073,5213],{"class":51386},[204,72075,51393],{"class":214},[204,72077,72078,72080],{"class":206,"line":1404},[204,72079,6490],{"class":51386},[204,72081,15659],{"class":214},[204,72083,72084,72086,72088,72090],{"class":206,"line":1416},[204,72085,54781],{"class":263},[204,72087,51523],{"class":214},[204,72089,405],{"class":263},[204,72091,1377],{"class":214},[204,72093,72094,72096,72098,72100],{"class":206,"line":1698},[204,72095,54792],{"class":263},[204,72097,51523],{"class":214},[204,72099,405],{"class":263},[204,72101,1377],{"class":214},[204,72103,72104],{"class":206,"line":1703},[204,72105,2273],{"class":214},[204,72107,72108],{"class":206,"line":1709},[204,72109,2486],{"emptyLinePlaceholder":135},[204,72111,72112,72114],{"class":206,"line":1714},[204,72113,57365],{"class":51386},[204,72115,15659],{"class":214},[204,72117,72118,72120,72122,72124],{"class":206,"line":1728},[204,72119,57372],{"class":263},[204,72121,51523],{"class":214},[204,72123,51678],{"class":263},[204,72125,1377],{"class":214},[204,72127,72128,72130,72132,72134,72136],{"class":206,"line":1733},[204,72129,62163],{"class":263},[204,72131,51523],{"class":214},[204,72133,913],{"class":263},[204,72135,51578],{"class":210},[204,72137,1377],{"class":214},[204,72139,72140],{"class":206,"line":1739},[204,72141,2273],{"class":214},[204,72143,72144],{"class":206,"line":1760},[204,72145,2486],{"emptyLinePlaceholder":135},[204,72147,72148,72151],{"class":206,"line":1765},[204,72149,72150],{"class":2049},"    .info",[204,72152,15659],{"class":214},[204,72154,72155,72157,72159,72161,72163],{"class":206,"line":1779},[204,72156,54857],{"class":263},[204,72158,51523],{"class":214},[204,72160,51575],{"class":263},[204,72162,51578],{"class":210},[204,72164,1377],{"class":214},[204,72166,72167,72169,72171,72173,72175,72177],{"class":206,"line":1784},[204,72168,54792],{"class":263},[204,72170,51523],{"class":214},[204,72172,659],{"class":263},[204,72174,51578],{"class":210},[204,72176,51642],{"class":263},[204,72178,1377],{"class":214},[204,72180,72181,72183,72185,72187],{"class":206,"line":1813},[204,72182,57372],{"class":263},[204,72184,51523],{"class":214},[204,72186,51678],{"class":263},[204,72188,1377],{"class":214},[204,72190,72191],{"class":206,"line":1818},[204,72192,2273],{"class":214},[204,72194,72195],{"class":206,"line":1835},[204,72196,2486],{"emptyLinePlaceholder":135},[204,72198,72199,72202],{"class":206,"line":1840},[204,72200,72201],{"class":2049},"    .uname",[204,72203,31552],{"class":214},[204,72205,72206,72209],{"class":206,"line":1845},[204,72207,72208],{"class":2049},"    .age",[204,72210,31552],{"class":214},[204,72212,72213,72216],{"class":206,"line":1850},[204,72214,72215],{"class":2049},"    .salary",[204,72217,15659],{"class":214},[204,72219,72220,72222,72224,72226,72228],{"class":206,"line":1864},[204,72221,54857],{"class":263},[204,72223,51523],{"class":214},[204,72225,524],{"class":263},[204,72227,51578],{"class":210},[204,72229,1377],{"class":214},[204,72231,72232,72234,72236,72238,72240],{"class":206,"line":1869},[204,72233,54871],{"class":263},[204,72235,51523],{"class":214},[204,72237,913],{"class":263},[204,72239,51578],{"class":210},[204,72241,1377],{"class":214},[204,72243,72244,72246,72248,72250],{"class":206,"line":2663},[204,72245,61866],{"class":263},[204,72247,51523],{"class":214},[204,72249,54823],{"class":263},[204,72251,1377],{"class":214},[204,72253,72254,72256,72258,72260,72262],{"class":206,"line":2677},[204,72255,61836],{"class":263},[204,72257,51523],{"class":214},[204,72259,788],{"class":263},[204,72261,51578],{"class":210},[204,72263,1377],{"class":214},[204,72265,72266],{"class":206,"line":2685},[204,72267,2273],{"class":214},[204,72269,72270],{"class":206,"line":2690},[204,72271,2486],{"emptyLinePlaceholder":135},[204,72273,72274,72277],{"class":206,"line":2696},[204,72275,72276],{"class":2049},"    .gender",[204,72278,31552],{"class":214},[204,72280,72281,72284],{"class":206,"line":2702},[204,72282,72283],{"class":2049},"    .city",[204,72285,15659],{"class":214},[204,72287,72288,72290,72292,72294,72296],{"class":206,"line":2707},[204,72289,54857],{"class":263},[204,72291,51523],{"class":214},[204,72293,524],{"class":263},[204,72295,51578],{"class":210},[204,72297,1377],{"class":214},[204,72299,72300,72302,72304,72306,72308],{"class":206,"line":8035},[204,72301,54871],{"class":263},[204,72303,51523],{"class":214},[204,72305,1038],{"class":263},[204,72307,51578],{"class":210},[204,72309,1377],{"class":214},[204,72311,72312,72314,72316,72318],{"class":206,"line":8059},[204,72313,61866],{"class":263},[204,72315,51523],{"class":214},[204,72317,54823],{"class":263},[204,72319,1377],{"class":214},[204,72321,72322,72324,72326,72328,72330],{"class":206,"line":8064},[204,72323,61836],{"class":263},[204,72325,51523],{"class":214},[204,72327,788],{"class":263},[204,72329,51578],{"class":210},[204,72331,1377],{"class":214},[204,72333,72334,72336,72338,72340,72342,72344,72347,72349,72351,72353,72356,72358,72360],{"class":206,"line":8070},[204,72335,62063],{"class":263},[204,72337,51523],{"class":214},[204,72339,431],{"class":263},[204,72341,51578],{"class":210},[204,72343,51607],{"class":263},[204,72345,72346],{"class":263}," rgb",[204,72348,215],{"class":214},[204,72350,1808],{"class":263},[204,72352,12522],{"class":214},[204,72354,72355],{"class":263},"197",[204,72357,12522],{"class":214},[204,72359,72355],{"class":263},[204,72361,2805],{"class":214},[204,72363,72364],{"class":206,"line":8097},[204,72365,2273],{"class":214},[204,72367,72368],{"class":206,"line":8102},[204,72369,2486],{"emptyLinePlaceholder":135},[204,72371,72372,72375],{"class":206,"line":8108},[204,72373,72374],{"class":51386},"    button",[204,72376,15659],{"class":214},[204,72378,72379,72381,72383,72385,72387],{"class":206,"line":8120},[204,72380,54871],{"class":263},[204,72382,51523],{"class":214},[204,72384,1038],{"class":263},[204,72386,51578],{"class":210},[204,72388,1377],{"class":214},[204,72390,72391,72393,72395,72397,72399],{"class":206,"line":8132},[204,72392,54857],{"class":263},[204,72394,51523],{"class":214},[204,72396,697],{"class":263},[204,72398,51578],{"class":210},[204,72400,1377],{"class":214},[204,72402,72403,72405,72407,72410,72412,72414,72416,72419,72421,72423],{"class":206,"line":8144},[204,72404,54970],{"class":263},[204,72406,51523],{"class":214},[204,72408,72409],{"class":263},"rgb",[204,72411,215],{"class":214},[204,72413,1182],{"class":263},[204,72415,12522],{"class":214},[204,72417,72418],{"class":263},"187",[204,72420,12522],{"class":214},[204,72422,512],{"class":263},[204,72424,2805],{"class":214},[204,72426,72427,72429,72431,72433],{"class":206,"line":9803},[204,72428,57502],{"class":263},[204,72430,51523],{"class":214},[204,72432,60928],{"class":263},[204,72434,1377],{"class":214},[204,72436,72437,72439,72441,72443],{"class":206,"line":9828},[204,72438,62063],{"class":263},[204,72440,51523],{"class":214},[204,72442,405],{"class":263},[204,72444,1377],{"class":214},[204,72446,72447],{"class":206,"line":9851},[204,72448,2273],{"class":214},[204,72450,72451],{"class":206,"line":9875},[204,72452,2486],{"emptyLinePlaceholder":135},[204,72454,72455,72457,72459],{"class":206,"line":9880},[204,72456,72374],{"class":51386},[204,72458,51774],{"class":51386},[204,72460,15659],{"class":214},[204,72462,72463,72465,72467,72470],{"class":206,"line":9885},[204,72464,55095],{"class":263},[204,72466,51523],{"class":214},[204,72468,72469],{"class":263},"inline-block",[204,72471,1377],{"class":214},[204,72473,72474,72476,72478,72480,72482],{"class":206,"line":9890},[204,72475,54857],{"class":263},[204,72477,51523],{"class":214},[204,72479,659],{"class":263},[204,72481,51578],{"class":210},[204,72483,1377],{"class":214},[204,72485,72486,72488,72490,72492,72494],{"class":206,"line":9899},[204,72487,54871],{"class":263},[204,72489,51523],{"class":214},[204,72491,659],{"class":263},[204,72493,51578],{"class":210},[204,72495,1377],{"class":214},[204,72497,72498,72500,72502,72504,72506],{"class":206,"line":9904},[204,72499,57445],{"class":263},[204,72501,51523],{"class":214},[204,72503,685],{"class":263},[204,72505,51578],{"class":210},[204,72507,1377],{"class":214},[204,72509,72510,72512,72514,72516,72518,72520,72523],{"class":206,"line":9910},[204,72511,62063],{"class":263},[204,72513,51523],{"class":214},[204,72515,431],{"class":263},[204,72517,51578],{"class":210},[204,72519,51607],{"class":263},[204,72521,72522],{"class":263}," #fff",[204,72524,1377],{"class":214},[204,72526,72527,72529,72531,72533,72535],{"class":206,"line":9931},[204,72528,55220],{"class":263},[204,72530,51523],{"class":214},[204,72532,532],{"class":263},[204,72534,51578],{"class":210},[204,72536,1377],{"class":214},[204,72538,72539,72541,72543,72545,72547],{"class":206,"line":9937},[204,72540,61836],{"class":263},[204,72542,51523],{"class":214},[204,72544,431],{"class":263},[204,72546,51578],{"class":210},[204,72548,1377],{"class":214},[204,72550,72551],{"class":206,"line":9951},[204,72552,2273],{"class":214},[204,72554,72555],{"class":206,"line":9957},[204,72556,2486],{"emptyLinePlaceholder":135},[204,72558,72559,72562],{"class":206,"line":9984},[204,72560,72561],{"class":2049},"    .total",[204,72563,15659],{"class":214},[204,72565,72566,72568,72570,72572,72574],{"class":206,"line":9993},[204,72567,54857],{"class":263},[204,72569,51523],{"class":214},[204,72571,61715],{"class":263},[204,72573,51578],{"class":210},[204,72575,1377],{"class":214},[204,72577,72578,72580,72582,72584,72586],{"class":206,"line":9999},[204,72579,54871],{"class":263},[204,72581,51523],{"class":214},[204,72583,614],{"class":263},[204,72585,51578],{"class":210},[204,72587,1377],{"class":214},[204,72589,72590,72592,72594,72596,72598],{"class":206,"line":10007},[204,72591,57445],{"class":263},[204,72593,51523],{"class":214},[204,72595,614],{"class":263},[204,72597,51578],{"class":210},[204,72599,1377],{"class":214},[204,72601,72602,72604,72606,72609],{"class":206,"line":10012},[204,72603,57372],{"class":263},[204,72605,51523],{"class":214},[204,72607,72608],{"class":263},"right",[204,72610,1377],{"class":214},[204,72612,72613,72615,72617,72619,72621,72623,72625,72627],{"class":206,"line":16691},[204,72614,54792],{"class":263},[204,72616,51523],{"class":214},[204,72618,614],{"class":263},[204,72620,51578],{"class":210},[204,72622,51642],{"class":263},[204,72624,2124],{"class":263},[204,72626,51578],{"class":210},[204,72628,1377],{"class":214},[204,72630,72631,72634,72636,72638,72640],{"class":206,"line":16697},[204,72632,72633],{"class":263},"      padding-right",[204,72635,51523],{"class":214},[204,72637,659],{"class":263},[204,72639,51578],{"class":210},[204,72641,1377],{"class":214},[204,72643,72644,72646,72648,72650,72652],{"class":206,"line":16720},[204,72645,55008],{"class":263},[204,72647,51523],{"class":214},[204,72649,736],{"class":263},[204,72651,51578],{"class":210},[204,72653,1377],{"class":214},[204,72655,72656,72658,72660,72662,72664,72667,72669,72672,72674,72676],{"class":206,"line":16726},[204,72657,54970],{"class":263},[204,72659,51523],{"class":214},[204,72661,72409],{"class":263},[204,72663,215],{"class":214},[204,72665,72666],{"class":263},"237",[204,72668,12522],{"class":214},[204,72670,72671],{"class":263},"235",[204,72673,12522],{"class":214},[204,72675,72671],{"class":263},[204,72677,2805],{"class":214},[204,72679,72680,72683,72685,72687],{"class":206,"line":16749},[204,72681,72682],{"class":263},"      box-sizing",[204,72684,51523],{"class":214},[204,72686,60591],{"class":263},[204,72688,1377],{"class":214},[204,72690,72691],{"class":206,"line":16763},[204,72692,2273],{"class":214},[204,72694,72695],{"class":206,"line":16783},[204,72696,2486],{"emptyLinePlaceholder":135},[204,72698,72699,72701,72703],{"class":206,"line":16789},[204,72700,72561],{"class":2049},[204,72702,51774],{"class":51386},[204,72704,15659],{"class":214},[204,72706,72707,72709,72711,72713],{"class":206,"line":16800},[204,72708,57502],{"class":263},[204,72710,51523],{"class":214},[204,72712,57507],{"class":263},[204,72714,1377],{"class":214},[204,72716,72717],{"class":206,"line":16823},[204,72718,2273],{"class":214},[204,72720,72721],{"class":206,"line":16845},[204,72722,2486],{"emptyLinePlaceholder":135},[204,72724,72725,72727],{"class":206,"line":16850},[204,72726,65109],{"class":51386},[204,72728,15659],{"class":214},[204,72730,72731,72733,72735,72737,72739],{"class":206,"line":16856},[204,72732,54857],{"class":263},[204,72734,51523],{"class":214},[204,72736,61715],{"class":263},[204,72738,51578],{"class":210},[204,72740,1377],{"class":214},[204,72742,72743,72745,72747,72750],{"class":206,"line":16870},[204,72744,54792],{"class":263},[204,72746,51523],{"class":214},[204,72748,72749],{"class":263},"auto",[204,72751,1377],{"class":214},[204,72753,72754,72756,72758,72760],{"class":206,"line":16883},[204,72755,65116],{"class":263},[204,72757,51523],{"class":214},[204,72759,65121],{"class":263},[204,72761,1377],{"class":214},[204,72763,72764],{"class":206,"line":16888},[204,72765,2273],{"class":214},[204,72767,72768],{"class":206,"line":16902},[204,72769,2486],{"emptyLinePlaceholder":135},[204,72771,72772,72774],{"class":206,"line":16907},[204,72773,65201],{"class":51386},[204,72775,15659],{"class":214},[204,72777,72778,72780,72782,72784,72786,72788,72790,72792,72794,72796],{"class":206,"line":16913},[204,72779,54970],{"class":263},[204,72781,51523],{"class":214},[204,72783,72409],{"class":263},[204,72785,215],{"class":214},[204,72787,72666],{"class":263},[204,72789,12522],{"class":214},[204,72791,72671],{"class":263},[204,72793,12522],{"class":214},[204,72795,72671],{"class":263},[204,72797,2805],{"class":214},[204,72799,72800],{"class":206,"line":16918},[204,72801,2273],{"class":214},[204,72803,72804],{"class":206,"line":16932},[204,72805,2486],{"emptyLinePlaceholder":135},[204,72807,72808,72810],{"class":206,"line":16937},[204,72809,65201],{"class":51386},[204,72811,31552],{"class":214},[204,72813,72814,72816],{"class":206,"line":16942},[204,72815,65267],{"class":51386},[204,72817,15659],{"class":214},[204,72819,72820,72822,72824,72826,72828],{"class":206,"line":16956},[204,72821,54871],{"class":263},[204,72823,51523],{"class":214},[204,72825,486],{"class":263},[204,72827,51578],{"class":210},[204,72829,1377],{"class":214},[204,72831,72832,72834,72836,72838],{"class":206,"line":16968},[204,72833,57372],{"class":263},[204,72835,51523],{"class":214},[204,72837,23823],{"class":263},[204,72839,1377],{"class":214},[204,72841,72842,72844,72846,72848,72850],{"class":206,"line":16973},[204,72843,55008],{"class":263},[204,72845,51523],{"class":214},[204,72847,762],{"class":263},[204,72849,51578],{"class":210},[204,72851,1377],{"class":214},[204,72853,72854,72856,72858,72860,72862,72864,72866,72868,72871,72873,72876,72878,72880],{"class":206,"line":16986},[204,72855,62063],{"class":263},[204,72857,51523],{"class":214},[204,72859,431],{"class":263},[204,72861,51578],{"class":210},[204,72863,51607],{"class":263},[204,72865,72346],{"class":263},[204,72867,215],{"class":214},[204,72869,72870],{"class":263},"228",[204,72872,12522],{"class":214},[204,72874,72875],{"class":263},"225",[204,72877,12522],{"class":214},[204,72879,72875],{"class":263},[204,72881,2805],{"class":214},[204,72883,72884,72887,72889,72891,72893],{"class":206,"line":16991},[204,72885,72886],{"class":263},"      padding-left",[204,72888,51523],{"class":214},[204,72890,532],{"class":263},[204,72892,51578],{"class":210},[204,72894,1377],{"class":214},[204,72896,72897,72899,72901,72903,72906,72908,72910],{"class":206,"line":16996},[204,72898,61946],{"class":263},[204,72900,51523],{"class":214},[204,72902,28207],{"class":263},[204,72904,72905],{"class":263}," linear",[204,72907,61953],{"class":263},[204,72909,908],{"class":210},[204,72911,1377],{"class":214},[204,72913,72914],{"class":206,"line":17001},[204,72915,2273],{"class":214},[204,72917,72918],{"class":206,"line":17014},[204,72919,2486],{"emptyLinePlaceholder":135},[204,72921,72922,72925,72927,72929],{"class":206,"line":17019},[204,72923,72924],{"class":51386},"    tbody",[204,72926,70230],{"class":51386},[204,72928,61026],{"class":2049},[204,72930,15659],{"class":214},[204,72932,72933,72935,72937,72939,72941,72943,72945,72947,72949,72951],{"class":206,"line":32719},[204,72934,54970],{"class":263},[204,72936,51523],{"class":214},[204,72938,72409],{"class":263},[204,72940,215],{"class":214},[204,72942,72666],{"class":263},[204,72944,12522],{"class":214},[204,72946,72671],{"class":263},[204,72948,12522],{"class":214},[204,72950,72671],{"class":263},[204,72952,2805],{"class":214},[204,72954,72955,72957,72959,72961],{"class":206,"line":32725},[204,72956,62111],{"class":263},[204,72958,51523],{"class":214},[204,72960,62116],{"class":263},[204,72962,1377],{"class":214},[204,72964,72965],{"class":206,"line":32731},[204,72966,2273],{"class":214},[204,72968,72969],{"class":206,"line":32737},[204,72970,2486],{"emptyLinePlaceholder":135},[204,72972,72973,72975,72977,72980,72982],{"class":206,"line":32743},[204,72974,72924],{"class":51386},[204,72976,70230],{"class":51386},[204,72978,72979],{"class":51386}," td",[204,72981,1485],{"class":51386},[204,72983,15659],{"class":214},[204,72985,72986,72988,72990,72992],{"class":206,"line":32754},[204,72987,55095],{"class":263},[204,72989,51523],{"class":214},[204,72991,60955],{"class":263},[204,72993,1377],{"class":214},[204,72995,72996,72998,73000,73002,73004],{"class":206,"line":32760},[204,72997,54857],{"class":263},[204,72999,51523],{"class":214},[204,73001,1120],{"class":263},[204,73003,51578],{"class":210},[204,73005,1377],{"class":214},[204,73007,73008,73010,73012,73014,73016],{"class":206,"line":32780},[204,73009,54871],{"class":263},[204,73011,51523],{"class":214},[204,73013,1038],{"class":263},[204,73015,51578],{"class":210},[204,73017,1377],{"class":214},[204,73019,73020,73022,73024,73026,73028],{"class":206,"line":32786},[204,73021,57445],{"class":263},[204,73023,51523],{"class":214},[204,73025,1038],{"class":263},[204,73027,51578],{"class":210},[204,73029,1377],{"class":214},[204,73031,73032,73034,73036,73038,73040],{"class":206,"line":32797},[204,73033,62163],{"class":263},[204,73035,51523],{"class":214},[204,73037,292],{"class":263},[204,73039,51578],{"class":210},[204,73041,1377],{"class":214},[204,73043,73044,73046,73048,73050],{"class":206,"line":32803},[204,73045,57502],{"class":263},[204,73047,51523],{"class":214},[204,73049,60928],{"class":263},[204,73051,1377],{"class":214},[204,73053,73054,73056,73058,73060],{"class":206,"line":32809},[204,73055,57372],{"class":263},[204,73057,51523],{"class":214},[204,73059,51678],{"class":263},[204,73061,1377],{"class":214},[204,73063,73064,73066,73068,73070],{"class":206,"line":32815},[204,73065,64056],{"class":263},[204,73067,51523],{"class":214},[204,73069,54823],{"class":263},[204,73071,1377],{"class":214},[204,73073,73074,73076,73078,73081],{"class":206,"line":32821},[204,73075,54970],{"class":263},[204,73077,51523],{"class":214},[204,73079,73080],{"class":263},"orange",[204,73082,1377],{"class":214},[204,73084,73085,73087,73089,73092,73094],{"class":206,"line":32827},[204,73086,55220],{"class":263},[204,73088,51523],{"class":214},[204,73090,73091],{"class":263},"12.5",[204,73093,51578],{"class":210},[204,73095,1377],{"class":214},[204,73097,73098],{"class":206,"line":32833},[204,73099,2273],{"class":214},[204,73101,73102,73104,73106],{"class":206,"line":32839},[204,73103,52503],{"class":214},[204,73105,5213],{"class":51386},[204,73107,51393],{"class":214},[204,73109,73110,73112,73114],{"class":206,"line":32859},[204,73111,51871],{"class":214},[204,73113,51420],{"class":51386},[204,73115,51393],{"class":214},[204,73117,73118],{"class":206,"line":32865},[204,73119,2486],{"emptyLinePlaceholder":135},[204,73121,73122,73124,73126],{"class":206,"line":32881},[204,73123,1123],{"class":214},[204,73125,51886],{"class":51386},[204,73127,51393],{"class":214},[204,73129,73130,73132,73134,73137,73139],{"class":206,"line":32887},[204,73131,52230],{"class":214},[204,73133,14],{"class":51386},[204,73135,73136],{"class":214},">学生就业统计表\u003C\u002F",[204,73138,14],{"class":51386},[204,73140,51393],{"class":214},[204,73142,73143,73145,73147,73149,73151,73153,73155,73157,73159],{"class":206,"line":32901},[204,73144,52230],{"class":214},[204,73146,66711],{"class":51386},[204,73148,53572],{"class":2049},[204,73150,260],{"class":214},[204,73152,62750],{"class":319},[204,73154,69156],{"class":2049},[204,73156,260],{"class":214},[204,73158,31862],{"class":319},[204,73160,51393],{"class":214},[204,73162,73163,73165,73167,73169,73171,73173,73175,73177,73179,73181,73183,73186,73188,73190,73192],{"class":206,"line":32907},[204,73164,51427],{"class":214},[204,73166,53907],{"class":51386},[204,73168,53910],{"class":2049},[204,73170,260],{"class":214},[204,73172,62785],{"class":319},[204,73174,15007],{"class":2049},[204,73176,260],{"class":214},[204,73178,69182],{"class":319},[204,73180,61106],{"class":2049},[204,73182,260],{"class":214},[204,73184,73185],{"class":319},"\"姓名\"",[204,73187,53572],{"class":2049},[204,73189,260],{"class":214},[204,73191,69182],{"class":319},[204,73193,51393],{"class":214},[204,73195,73196,73198,73200,73202,73204,73206,73208,73210,73212,73214,73216,73219,73221,73223,73225],{"class":206,"line":32922},[204,73197,51427],{"class":214},[204,73199,53907],{"class":51386},[204,73201,53910],{"class":2049},[204,73203,260],{"class":214},[204,73205,62785],{"class":319},[204,73207,15007],{"class":2049},[204,73209,260],{"class":214},[204,73211,69210],{"class":319},[204,73213,61106],{"class":2049},[204,73215,260],{"class":214},[204,73217,73218],{"class":319},"\"年龄\"",[204,73220,53572],{"class":2049},[204,73222,260],{"class":214},[204,73224,69210],{"class":319},[204,73226,51393],{"class":214},[204,73228,73229,73231,73233,73235,73237,73239,73241,73243,73245,73247,73249,73252,73254,73256,73258],{"class":206,"line":32928},[204,73230,51427],{"class":214},[204,73232,53907],{"class":51386},[204,73234,53910],{"class":2049},[204,73236,260],{"class":214},[204,73238,62785],{"class":319},[204,73240,15007],{"class":2049},[204,73242,260],{"class":214},[204,73244,69312],{"class":319},[204,73246,61106],{"class":2049},[204,73248,260],{"class":214},[204,73250,73251],{"class":319},"\"薪资\"",[204,73253,53572],{"class":2049},[204,73255,260],{"class":214},[204,73257,69312],{"class":319},[204,73259,51393],{"class":214},[204,73261,73262,73264,73266,73268,73270,73272,73274,73276,73278,73280,73282,73284],{"class":206,"line":32937},[204,73263,51427],{"class":214},[204,73265,69230],{"class":51386},[204,73267,15007],{"class":2049},[204,73269,260],{"class":214},[204,73271,69237],{"class":319},[204,73273,15046],{"class":2049},[204,73275,260],{"class":214},[204,73277,7739],{"class":319},[204,73279,53572],{"class":2049},[204,73281,260],{"class":214},[204,73283,69237],{"class":319},[204,73285,51393],{"class":214},[204,73287,73288,73290,73292,73294,73296,73298,73300,73302],{"class":206,"line":32943},[204,73289,55320],{"class":214},[204,73291,69252],{"class":51386},[204,73293,66737],{"class":2049},[204,73295,260],{"class":214},[204,73297,10048],{"class":319},[204,73299,69261],{"class":214},[204,73301,69252],{"class":51386},[204,73303,51393],{"class":214},[204,73305,73306,73308,73310,73312,73314,73316,73318,73320],{"class":206,"line":32952},[204,73307,55320],{"class":214},[204,73309,69252],{"class":51386},[204,73311,66737],{"class":2049},[204,73313,260],{"class":214},[204,73315,10117],{"class":319},[204,73317,69280],{"class":214},[204,73319,69252],{"class":51386},[204,73321,51393],{"class":214},[204,73323,73324,73326,73328],{"class":206,"line":32958},[204,73325,51862],{"class":214},[204,73327,69230],{"class":51386},[204,73329,51393],{"class":214},[204,73331,73332,73334,73336,73338,73340,73342,73344,73346,73348,73350,73352,73354],{"class":206,"line":32964},[204,73333,51427],{"class":214},[204,73335,69230],{"class":51386},[204,73337,15007],{"class":2049},[204,73339,260],{"class":214},[204,73341,69334],{"class":319},[204,73343,15046],{"class":2049},[204,73345,260],{"class":214},[204,73347,7739],{"class":319},[204,73349,53572],{"class":2049},[204,73351,260],{"class":214},[204,73353,69334],{"class":319},[204,73355,51393],{"class":214},[204,73357,73358,73360,73362,73364,73366,73368,73370,73372],{"class":206,"line":32973},[204,73359,55320],{"class":214},[204,73361,69252],{"class":51386},[204,73363,66737],{"class":2049},[204,73365,260],{"class":214},[204,73367,69355],{"class":319},[204,73369,69358],{"class":214},[204,73371,69252],{"class":51386},[204,73373,51393],{"class":214},[204,73375,73376,73378,73380,73382,73384,73386,73388,73390],{"class":206,"line":32979},[204,73377,55320],{"class":214},[204,73379,69252],{"class":51386},[204,73381,66737],{"class":2049},[204,73383,260],{"class":214},[204,73385,69375],{"class":319},[204,73387,69378],{"class":214},[204,73389,69252],{"class":51386},[204,73391,51393],{"class":214},[204,73393,73394,73396,73398,73400,73402,73404,73406,73408],{"class":206,"line":32990},[204,73395,55320],{"class":214},[204,73397,69252],{"class":51386},[204,73399,66737],{"class":2049},[204,73401,260],{"class":214},[204,73403,69395],{"class":319},[204,73405,69398],{"class":214},[204,73407,69252],{"class":51386},[204,73409,51393],{"class":214},[204,73411,73412,73414,73416,73418,73420,73422,73424,73426],{"class":206,"line":32996},[204,73413,55320],{"class":214},[204,73415,69252],{"class":51386},[204,73417,66737],{"class":2049},[204,73419,260],{"class":214},[204,73421,69415],{"class":319},[204,73423,69418],{"class":214},[204,73425,69252],{"class":51386},[204,73427,51393],{"class":214},[204,73429,73430,73432,73434,73436,73438,73440,73442,73444],{"class":206,"line":33015},[204,73431,55320],{"class":214},[204,73433,69252],{"class":51386},[204,73435,66737],{"class":2049},[204,73437,260],{"class":214},[204,73439,69435],{"class":319},[204,73441,69438],{"class":214},[204,73443,69252],{"class":51386},[204,73445,51393],{"class":214},[204,73447,73448,73450,73452],{"class":206,"line":33021},[204,73449,51862],{"class":214},[204,73451,69230],{"class":51386},[204,73453,51393],{"class":214},[204,73455,73456,73458,73460],{"class":206,"line":33032},[204,73457,51427],{"class":214},[204,73459,53973],{"class":51386},[204,73461,51393],{"class":214},[204,73463,73464,73466,73468,73471,73473,73476,73478],{"class":206,"line":33038},[204,73465,55320],{"class":214},[204,73467,204],{"class":51386},[204,73469,73470],{"class":214},">+\u003C\u002F",[204,73472,204],{"class":51386},[204,73474,73475],{"class":214},">添加\u003C\u002F",[204,73477,53973],{"class":51386},[204,73479,51393],{"class":214},[204,73481,73482,73484,73486],{"class":206,"line":33058},[204,73483,52503],{"class":214},[204,73485,66711],{"class":51386},[204,73487,51393],{"class":214},[204,73489,73490,73492,73494,73496,73498,73500,73503,73505,73508,73510,73513,73515],{"class":206,"line":33074},[204,73491,52230],{"class":214},[204,73493,51697],{"class":51386},[204,73495,53572],{"class":2049},[204,73497,260],{"class":214},[204,73499,62666],{"class":319},[204,73501,73502],{"class":214},">共有数据 \u003C",[204,73504,204],{"class":51386},[204,73506,73507],{"class":214},">0\u003C\u002F",[204,73509,204],{"class":51386},[204,73511,73512],{"class":214},"> 条\u003C\u002F",[204,73514,51697],{"class":51386},[204,73516,51393],{"class":214},[204,73518,73519,73521,73523],{"class":206,"line":33080},[204,73520,52230],{"class":214},[204,73522,352],{"class":51386},[204,73524,51393],{"class":214},[204,73526,73527,73529,73531],{"class":206,"line":33094},[204,73528,51427],{"class":214},[204,73530,355],{"class":51386},[204,73532,51393],{"class":214},[204,73534,73535,73537,73539],{"class":206,"line":33100},[204,73536,55320],{"class":214},[204,73538,358],{"class":51386},[204,73540,51393],{"class":214},[204,73542,73543,73545,73547,73550,73552],{"class":206,"line":33106},[204,73544,55388],{"class":214},[204,73546,361],{"class":51386},[204,73548,73549],{"class":214},">ID\u003C\u002F",[204,73551,361],{"class":51386},[204,73553,51393],{"class":214},[204,73555,73556,73558,73560,73562,73564],{"class":206,"line":33117},[204,73557,55388],{"class":214},[204,73559,361],{"class":51386},[204,73561,69541],{"class":214},[204,73563,361],{"class":51386},[204,73565,51393],{"class":214},[204,73567,73568,73570,73572,73574,73576],{"class":206,"line":33123},[204,73569,55388],{"class":214},[204,73571,361],{"class":51386},[204,73573,69554],{"class":214},[204,73575,361],{"class":51386},[204,73577,51393],{"class":214},[204,73579,73580,73582,73584,73586,73588],{"class":206,"line":33129},[204,73581,55388],{"class":214},[204,73583,361],{"class":51386},[204,73585,69567],{"class":214},[204,73587,361],{"class":51386},[204,73589,51393],{"class":214},[204,73591,73592,73594,73596,73598,73600],{"class":206,"line":33139},[204,73593,55388],{"class":214},[204,73595,361],{"class":51386},[204,73597,69580],{"class":214},[204,73599,361],{"class":51386},[204,73601,51393],{"class":214},[204,73603,73604,73606,73608,73610,73612],{"class":206,"line":33145},[204,73605,55388],{"class":214},[204,73607,361],{"class":51386},[204,73609,69593],{"class":214},[204,73611,361],{"class":51386},[204,73613,51393],{"class":214},[204,73615,73616,73618,73620,73623,73625],{"class":206,"line":33156},[204,73617,55388],{"class":214},[204,73619,361],{"class":51386},[204,73621,73622],{"class":214},">录入时间\u003C\u002F",[204,73624,361],{"class":51386},[204,73626,51393],{"class":214},[204,73628,73629,73631,73633,73635,73637],{"class":206,"line":33162},[204,73630,55388],{"class":214},[204,73632,361],{"class":51386},[204,73634,69606],{"class":214},[204,73636,361],{"class":51386},[204,73638,51393],{"class":214},[204,73640,73641,73643,73645],{"class":206,"line":33172},[204,73642,55493],{"class":214},[204,73644,358],{"class":51386},[204,73646,51393],{"class":214},[204,73648,73649,73651,73653],{"class":206,"line":33177},[204,73650,51862],{"class":214},[204,73652,355],{"class":51386},[204,73654,51393],{"class":214},[204,73656,73657,73659,73661],{"class":206,"line":33183},[204,73658,51427],{"class":214},[204,73660,398],{"class":51386},[204,73662,51393],{"class":214},[204,73664,73665],{"class":206,"line":33232},[204,73666,73667],{"class":273},"      \u003C!-- \u003Ctr>\n",[204,73669,73670],{"class":206,"line":33279},[204,73671,73672],{"class":273},"        \u003Ctd>1\u003C\u002Ftd>\n",[204,73674,73675],{"class":206,"line":33284},[204,73676,73672],{"class":273},[204,73678,73679],{"class":206,"line":33290},[204,73680,73672],{"class":273},[204,73682,73683],{"class":206,"line":33309},[204,73684,73672],{"class":273},[204,73686,73687],{"class":206,"line":33315},[204,73688,73672],{"class":273},[204,73690,73691],{"class":206,"line":33335},[204,73692,73672],{"class":273},[204,73694,73695],{"class":206,"line":33341},[204,73696,73672],{"class":273},[204,73698,73699],{"class":206,"line":33347},[204,73700,73701],{"class":273},"        \u003Ctd>\n",[204,73703,73704],{"class":206,"line":33357},[204,73705,73706],{"class":273},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[204,73708,73709],{"class":206,"line":33362},[204,73710,73711],{"class":273},"        \u003C\u002Ftd>\n",[204,73713,73714],{"class":206,"line":33368},[204,73715,73716],{"class":273},"      \u003C\u002Ftr> -->\n",[204,73718,73719,73721,73723],{"class":206,"line":33384},[204,73720,51862],{"class":214},[204,73722,398],{"class":51386},[204,73724,51393],{"class":214},[204,73726,73727,73729,73731],{"class":206,"line":33429},[204,73728,52503],{"class":214},[204,73730,352],{"class":51386},[204,73732,51393],{"class":214},[204,73734,73735,73737,73739],{"class":206,"line":33435},[204,73736,52230],{"class":214},[204,73738,51899],{"class":51386},[204,73740,51393],{"class":214},[204,73742,73743],{"class":206,"line":33441},[204,73744,73745],{"class":273},"    \u002F\u002F const initData = [{\n",[204,73747,73748],{"class":206,"line":33447},[204,73749,73750],{"class":273},"    \u002F\u002F   unameId: 1,\n",[204,73752,73753],{"class":206,"line":33458},[204,73754,73755],{"class":273},"    \u002F\u002F   uname: '华晨宇',\n",[204,73757,73758],{"class":206,"line":33464},[204,73759,73760],{"class":273},"    \u002F\u002F   age: 22,\n",[204,73762,73763],{"class":206,"line":33470},[204,73764,73765],{"class":273},"    \u002F\u002F   salary: 12000,\n",[204,73767,73768],{"class":206,"line":33476},[204,73769,73770],{"class":273},"    \u002F\u002F   gender: '男',\n",[204,73772,73773],{"class":206,"line":33494},[204,73774,73775],{"class":273},"    \u002F\u002F   city: '北京',\n",[204,73777,73778],{"class":206,"line":33508},[204,73779,73780],{"class":273},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[204,73782,73783],{"class":206,"line":33517},[204,73784,73785],{"class":273},"    \u002F\u002F }]\n",[204,73787,73788],{"class":206,"line":33526},[204,73789,73790],{"class":273},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[204,73792,73793],{"class":206,"line":33535},[204,73794,73795],{"class":273},"    \u002F\u002F 1.渲染业务\n",[204,73797,73798],{"class":206,"line":33544},[204,73799,73800],{"class":273},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[204,73802,73803],{"class":206,"line":33550},[204,73804,73805],{"class":273},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[204,73807,73808],{"class":206,"line":33556},[204,73809,73810],{"class":273},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[204,73812,73813],{"class":206,"line":33564},[204,73814,2486],{"emptyLinePlaceholder":135},[204,73816,73817],{"class":206,"line":33569},[204,73818,73819],{"class":273},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[204,73821,73822],{"class":206,"line":33575},[204,73823,73824],{"class":273},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[204,73826,73827,73829,73831,73833],{"class":206,"line":33586},[204,73828,11308],{"class":210},[204,73830,57781],{"class":263},[204,73832,13651],{"class":210},[204,73834,51924],{"class":214},[204,73836,73837,73840,73842],{"class":206,"line":33592},[204,73838,73839],{"class":214},"    console.",[204,73841,58333],{"class":2049},[204,73843,52498],{"class":214},[204,73845,73846],{"class":206,"line":33612},[204,73847,2486],{"emptyLinePlaceholder":135},[204,73849,73850],{"class":206,"line":33618},[204,73851,73852],{"class":273},"    \u002F\u002F 时间函数\n",[204,73854,73855,73857,73860],{"class":206,"line":33624},[204,73856,70170],{"class":210},[204,73858,73859],{"class":2049}," getTime",[204,73861,10940],{"class":214},[204,73863,73864,73866,73869,73871,73873,73876],{"class":206,"line":33630},[204,73865,58314],{"class":210},[204,73867,73868],{"class":263}," date",[204,73870,13651],{"class":210},[204,73872,11665],{"class":210},[204,73874,73875],{"class":2049}," Date",[204,73877,2062],{"class":214},[204,73879,73880,73882,73884,73886,73889,73892,73894,73896,73898,73901,73904,73906,73908,73910,73912,73914,73916,73918],{"class":206,"line":33647},[204,73881,58314],{"class":210},[204,73883,16178],{"class":263},[204,73885,13651],{"class":210},[204,73887,73888],{"class":214}," date.",[204,73890,73891],{"class":2049},"getHours",[204,73893,13137],{"class":214},[204,73895,1123],{"class":210},[204,73897,2124],{"class":263},[204,73899,73900],{"class":210}," ?",[204,73902,73903],{"class":319}," '0'",[204,73905,45652],{"class":210},[204,73907,73888],{"class":214},[204,73909,73891],{"class":2049},[204,73911,13137],{"class":214},[204,73913,1072],{"class":210},[204,73915,73888],{"class":214},[204,73917,73891],{"class":2049},[204,73919,2062],{"class":214},[204,73921,73922,73924,73927,73929,73931,73934,73936,73938,73940,73942,73944,73946,73948,73950,73952,73954,73956,73958],{"class":206,"line":33653},[204,73923,58314],{"class":210},[204,73925,73926],{"class":263}," m",[204,73928,13651],{"class":210},[204,73930,73888],{"class":214},[204,73932,73933],{"class":2049},"getMinutes",[204,73935,13137],{"class":214},[204,73937,1123],{"class":210},[204,73939,2124],{"class":263},[204,73941,73900],{"class":210},[204,73943,73903],{"class":319},[204,73945,45652],{"class":210},[204,73947,73888],{"class":214},[204,73949,73933],{"class":2049},[204,73951,13137],{"class":214},[204,73953,1072],{"class":210},[204,73955,73888],{"class":214},[204,73957,73933],{"class":2049},[204,73959,2062],{"class":214},[204,73961,73962,73964,73966,73968,73970,73973,73975,73977,73979,73981,73983,73985,73987,73989,73991,73993,73995,73997],{"class":206,"line":33659},[204,73963,58314],{"class":210},[204,73965,8515],{"class":263},[204,73967,13651],{"class":210},[204,73969,73888],{"class":214},[204,73971,73972],{"class":2049},"getSeconds",[204,73974,13137],{"class":214},[204,73976,1123],{"class":210},[204,73978,2124],{"class":263},[204,73980,73900],{"class":210},[204,73982,73903],{"class":319},[204,73984,45652],{"class":210},[204,73986,73888],{"class":214},[204,73988,73972],{"class":2049},[204,73990,13137],{"class":214},[204,73992,1072],{"class":210},[204,73994,73888],{"class":214},[204,73996,73972],{"class":2049},[204,73998,2062],{"class":214},[204,74000,74001,74003,74006,74008,74010,74013,74015,74018,74020,74023,74025,74027,74030,74032,74034,74036,74038,74040,74042,74045,74047,74050,74052,74055,74057,74059,74061],{"class":206,"line":33665},[204,74002,58314],{"class":210},[204,74004,74005],{"class":263}," str",[204,74007,13651],{"class":210},[204,74009,62989],{"class":319},[204,74011,74012],{"class":214},"date",[204,74014,771],{"class":319},[204,74016,74017],{"class":2049},"getFullYear",[204,74019,2513],{"class":319},[204,74021,74022],{"class":319},"}\u002F${",[204,74024,74012],{"class":214},[204,74026,771],{"class":319},[204,74028,74029],{"class":2049},"getMonth",[204,74031,13137],{"class":319},[204,74033,694],{"class":210},[204,74035,25205],{"class":263},[204,74037,74022],{"class":319},[204,74039,74012],{"class":214},[204,74041,771],{"class":319},[204,74043,74044],{"class":2049},"getDate",[204,74046,2513],{"class":319},[204,74048,74049],{"class":319},"} ${",[204,74051,628],{"class":214},[204,74053,74054],{"class":319},"}:${",[204,74056,757],{"class":214},[204,74058,74054],{"class":319},[204,74060,908],{"class":214},[204,74062,74063],{"class":319},"}`\n",[204,74065,74066,74069],{"class":206,"line":33671},[204,74067,74068],{"class":210},"      return",[204,74070,74071],{"class":214}," str\n",[204,74073,74074],{"class":206,"line":33677},[204,74075,2273],{"class":214},[204,74077,74078],{"class":206,"line":33704},[204,74079,74080],{"class":273},"    \u002F\u002F 渲染函数\n",[204,74082,74083,74085,74087,74089,74091,74093,74095,74097],{"class":206,"line":33728},[204,74084,11308],{"class":210},[204,74086,69833],{"class":263},[204,74088,13651],{"class":210},[204,74090,54482],{"class":214},[204,74092,54485],{"class":2049},[204,74094,215],{"class":214},[204,74096,69844],{"class":319},[204,74098,221],{"class":214},[204,74100,74101,74103,74105],{"class":206,"line":33734},[204,74102,70170],{"class":210},[204,74104,70173],{"class":2049},[204,74106,10940],{"class":214},[204,74108,74109],{"class":206,"line":33740},[204,74110,74111],{"class":273},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[204,74113,74114],{"class":206,"line":33746},[204,74115,74116],{"class":273},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[204,74118,74119,74121,74124,74126,74128,74131,74133,74135,74137,74140,74142,74145],{"class":206,"line":33757},[204,74120,58314],{"class":210},[204,74122,74123],{"class":263}," trArr",[204,74125,13651],{"class":210},[204,74127,52051],{"class":214},[204,74129,74130],{"class":2049},"map",[204,74132,215],{"class":214},[204,74134,54535],{"class":210},[204,74136,1744],{"class":214},[204,74138,74139],{"class":5303},"ele",[204,74141,12522],{"class":214},[204,74143,74144],{"class":5303},"index",[204,74146,12529],{"class":214},[204,74148,74149,74151],{"class":206,"line":33768},[204,74150,14839],{"class":210},[204,74152,70254],{"class":319},[204,74154,74155],{"class":206,"line":33774},[204,74156,74157],{"class":319},"      \u003Ctr>\n",[204,74159,74160,74162,74164,74166,74169],{"class":206,"line":33791},[204,74161,70259],{"class":319},[204,74163,74139],{"class":214},[204,74165,771],{"class":319},[204,74167,74168],{"class":214},"unameId",[204,74170,70274],{"class":319},[204,74172,74173,74175,74177,74179,74181],{"class":206,"line":33814},[204,74174,70259],{"class":319},[204,74176,74139],{"class":214},[204,74178,771],{"class":319},[204,74180,70290],{"class":214},[204,74182,70274],{"class":319},[204,74184,74185,74187,74189,74191,74193],{"class":206,"line":33837},[204,74186,70259],{"class":319},[204,74188,74139],{"class":214},[204,74190,771],{"class":319},[204,74192,70307],{"class":214},[204,74194,70274],{"class":319},[204,74196,74197,74199,74201,74203,74205],{"class":206,"line":33843},[204,74198,70259],{"class":319},[204,74200,74139],{"class":214},[204,74202,771],{"class":319},[204,74204,70324],{"class":214},[204,74206,70274],{"class":319},[204,74208,74209,74211,74213,74215,74217],{"class":206,"line":33848},[204,74210,70259],{"class":319},[204,74212,74139],{"class":214},[204,74214,771],{"class":319},[204,74216,70341],{"class":214},[204,74218,70274],{"class":319},[204,74220,74221,74223,74225,74227,74229],{"class":206,"line":33857},[204,74222,70259],{"class":319},[204,74224,74139],{"class":214},[204,74226,771],{"class":319},[204,74228,70358],{"class":214},[204,74230,70274],{"class":319},[204,74232,74233,74235,74237,74239,74241],{"class":206,"line":33867},[204,74234,70259],{"class":319},[204,74236,74139],{"class":214},[204,74238,771],{"class":319},[204,74240,2473],{"class":214},[204,74242,70274],{"class":319},[204,74244,74245],{"class":206,"line":33873},[204,74246,73701],{"class":319},[204,74248,74249,74252,74254],{"class":206,"line":33878},[204,74250,74251],{"class":319},"          \u003Ca href=\"#\" data-id=\"${",[204,74253,74144],{"class":214},[204,74255,74256],{"class":319},"}\">删除\u003C\u002Fa>\n",[204,74258,74259],{"class":206,"line":33884},[204,74260,73711],{"class":319},[204,74262,74263],{"class":206,"line":33897},[204,74264,74265],{"class":319},"      \u003C\u002Ftr>\n",[204,74267,74268],{"class":206,"line":33903},[204,74269,74270],{"class":319},"  `\n",[204,74272,74273],{"class":206,"line":33914},[204,74274,64901],{"class":214},[204,74276,74277,74279,74281],{"class":206,"line":33925},[204,74278,58330],{"class":214},[204,74280,58333],{"class":2049},[204,74282,74283],{"class":214},"(trArr)\n",[204,74285,74286],{"class":206,"line":33944},[204,74287,2486],{"emptyLinePlaceholder":135},[204,74289,74290],{"class":206,"line":49604},[204,74291,74292],{"class":273},"      \u002F\u002F (2) 把数组转换为字符串join\n",[204,74294,74295],{"class":206,"line":49609},[204,74296,74297],{"class":273},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[204,74299,74300,74302,74304,74307,74310,74312,74315],{"class":206,"line":49618},[204,74301,70185],{"class":214},[204,74303,260],{"class":210},[204,74305,74306],{"class":214}," trArr.",[204,74308,74309],{"class":2049},"join",[204,74311,215],{"class":214},[204,74313,74314],{"class":319},"''",[204,74316,221],{"class":214},[204,74318,74319],{"class":206,"line":49627},[204,74320,74321],{"class":273},"      \u002F\u002F 显示共有几条\n",[204,74323,74324,74326,74328,74330,74333,74336,74338,74340],{"class":206,"line":49632},[204,74325,55857],{"class":214},[204,74327,54485],{"class":2049},[204,74329,215],{"class":214},[204,74331,74332],{"class":319},"'.total span'",[204,74334,74335],{"class":214},").innerHTML ",[204,74337,260],{"class":210},[204,74339,52051],{"class":214},[204,74341,55917],{"class":263},[204,74343,74344],{"class":206,"line":49637},[204,74345,2273],{"class":214},[204,74347,74348],{"class":206,"line":49642},[204,74349,74350],{"class":273},"    \u002F\u002F render()\n",[204,74352,74353],{"class":206,"line":49655},[204,74354,2486],{"emptyLinePlaceholder":135},[204,74356,74357],{"class":206,"line":49660},[204,74358,74359],{"class":273},"    \u002F\u002F 获取DOM对象\n",[204,74361,74362,74364,74366,74368,74370,74372,74374,74376],{"class":206,"line":49669},[204,74363,11308],{"class":210},[204,74365,69907],{"class":263},[204,74367,13651],{"class":210},[204,74369,54482],{"class":214},[204,74371,54485],{"class":2049},[204,74373,215],{"class":214},[204,74375,69918],{"class":319},[204,74377,221],{"class":214},[204,74379,74380,74382,74384,74386,74388,74390,74392,74394],{"class":206,"line":49678},[204,74381,11308],{"class":210},[204,74383,69734],{"class":263},[204,74385,13651],{"class":210},[204,74387,54482],{"class":214},[204,74389,54485],{"class":2049},[204,74391,215],{"class":214},[204,74393,69745],{"class":319},[204,74395,221],{"class":214},[204,74397,74398,74400,74402,74404,74406,74408,74410,74412],{"class":206,"line":49695},[204,74399,11308],{"class":210},[204,74401,15776],{"class":263},[204,74403,13651],{"class":210},[204,74405,54482],{"class":214},[204,74407,54485],{"class":2049},[204,74409,215],{"class":214},[204,74411,69764],{"class":319},[204,74413,221],{"class":214},[204,74415,74417,74419,74421,74423,74425,74427,74429,74431],{"class":206,"line":74416},231,[204,74418,11308],{"class":210},[204,74420,69793],{"class":263},[204,74422,13651],{"class":210},[204,74424,54482],{"class":214},[204,74426,54485],{"class":2049},[204,74428,215],{"class":214},[204,74430,69804],{"class":319},[204,74432,221],{"class":214},[204,74434,74436,74438,74440,74442,74444,74446,74448,74450],{"class":206,"line":74435},232,[204,74437,11308],{"class":210},[204,74439,69773],{"class":263},[204,74441,13651],{"class":210},[204,74443,54482],{"class":214},[204,74445,54485],{"class":2049},[204,74447,215],{"class":214},[204,74449,69784],{"class":319},[204,74451,221],{"class":214},[204,74453,74455,74457,74459,74461,74463,74465,74467,74469],{"class":206,"line":74454},233,[204,74456,11308],{"class":210},[204,74458,69813],{"class":263},[204,74460,13651],{"class":210},[204,74462,54482],{"class":214},[204,74464,54485],{"class":2049},[204,74466,215],{"class":214},[204,74468,69824],{"class":319},[204,74470,221],{"class":214},[204,74472,74474],{"class":206,"line":74473},234,[204,74475,2486],{"emptyLinePlaceholder":135},[204,74477,74479],{"class":206,"line":74478},235,[204,74480,74481],{"class":273},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[204,74483,74485,74487,74489,74491,74493,74495,74497,74499,74501],{"class":206,"line":74484},236,[204,74486,69925],{"class":214},[204,74488,57899],{"class":2049},[204,74490,215],{"class":214},[204,74492,69932],{"class":319},[204,74494,12522],{"class":214},[204,74496,54535],{"class":210},[204,74498,1744],{"class":214},[204,74500,289],{"class":5303},[204,74502,12529],{"class":214},[204,74504,74506],{"class":206,"line":74505},237,[204,74507,74508],{"class":273},"      \u002F\u002F 禁止浏览器跳转\n",[204,74510,74512,74514,74516],{"class":206,"line":74511},238,[204,74513,69952],{"class":214},[204,74515,69955],{"class":2049},[204,74517,2062],{"class":214},[204,74519,74521],{"class":206,"line":74520},239,[204,74522,74523],{"class":273},"      \u002F\u002F 非空判断\n",[204,74525,74527],{"class":206,"line":74526},240,[204,74528,74529],{"class":273},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[204,74531,74533],{"class":206,"line":74532},241,[204,74534,74535],{"class":273},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[204,74537,74539,74541,74543,74545,74548,74550,74553,74556,74558,74560],{"class":206,"line":74538},242,[204,74540,54566],{"class":210},[204,74542,1744],{"class":214},[204,74544,440],{"class":210},[204,74546,74547],{"class":214},"uname.value ",[204,74549,71443],{"class":210},[204,74551,74552],{"class":210}," !",[204,74554,74555],{"class":214},"age.value ",[204,74557,71443],{"class":210},[204,74559,74552],{"class":210},[204,74561,74562],{"class":214},"salary.value) {\n",[204,74564,74566,74568,74570,74572,74574],{"class":206,"line":74565},243,[204,74567,14839],{"class":210},[204,74569,70026],{"class":2049},[204,74571,215],{"class":214},[204,74573,70031],{"class":319},[204,74575,221],{"class":214},[204,74577,74579],{"class":206,"line":74578},244,[204,74580,52484],{"class":214},[204,74582,74584,74586,74588],{"class":206,"line":74583},245,[204,74585,58093],{"class":214},[204,74587,51970],{"class":2049},[204,74589,74590],{"class":214},"({\n",[204,74592,74594],{"class":206,"line":74593},246,[204,74595,74596],{"class":273},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[204,74598,74600],{"class":206,"line":74599},247,[204,74601,74602],{"class":273},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[204,74604,74606],{"class":206,"line":74605},248,[204,74607,74608],{"class":273},"        \u002F\u002F 对象的序号应为数组长度+1\n",[204,74610,74612],{"class":206,"line":74611},249,[204,74613,74614],{"class":273},"        \u002F\u002F unameId: arr.length + 1,\n",[204,74616,74618],{"class":206,"line":74617},250,[204,74619,2486],{"emptyLinePlaceholder":135},[204,74621,74623],{"class":206,"line":74622},251,[204,74624,74625],{"class":273},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[204,74627,74629],{"class":206,"line":74628},252,[204,74630,74631],{"class":273},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[204,74633,74635],{"class":206,"line":74634},253,[204,74636,74637],{"class":273},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[204,74639,74641],{"class":206,"line":74640},254,[204,74642,74643],{"class":273},"        \u002F\u002F 0当假看\n",[204,74645,74647,74650,74652,74654,74657,74659,74661,74663,74666,74668,74670,74673,74675],{"class":206,"line":74646},255,[204,74648,74649],{"class":214},"        unameId: arr.",[204,74651,52054],{"class":263},[204,74653,73900],{"class":210},[204,74655,74656],{"class":214}," arr[arr.",[204,74658,52054],{"class":263},[204,74660,52357],{"class":210},[204,74662,25205],{"class":263},[204,74664,74665],{"class":214},"].unameId ",[204,74667,694],{"class":210},[204,74669,25205],{"class":263},[204,74671,74672],{"class":210}," :",[204,74674,25205],{"class":263},[204,74676,31552],{"class":214},[204,74678,74680],{"class":206,"line":74679},256,[204,74681,70079],{"class":214},[204,74683,74685],{"class":206,"line":74684},257,[204,74686,70084],{"class":214},[204,74688,74690],{"class":206,"line":74689},258,[204,74691,70094],{"class":214},[204,74693,74695],{"class":206,"line":74694},259,[204,74696,70089],{"class":214},[204,74698,74700],{"class":206,"line":74699},260,[204,74701,74702],{"class":214},"        city: city.value,\n",[204,74704,74706],{"class":206,"line":74705},261,[204,74707,74708],{"class":273},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[204,74710,74712],{"class":206,"line":74711},262,[204,74713,74714],{"class":273},"        \u002F\u002F time: new Date().toDateString()\n",[204,74716,74718,74721,74724],{"class":206,"line":74717},263,[204,74719,74720],{"class":214},"        time: ",[204,74722,74723],{"class":2049},"getTime",[204,74725,2062],{"class":214},[204,74727,74729],{"class":206,"line":74728},264,[204,74730,64901],{"class":214},[204,74732,74734],{"class":206,"line":74733},265,[204,74735,74736],{"class":273},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[204,74738,74740,74742],{"class":206,"line":74739},266,[204,74741,70154],{"class":2049},[204,74743,2062],{"class":214},[204,74745,74747,74749,74751,74753,74755],{"class":206,"line":74746},267,[204,74748,70137],{"class":263},[204,74750,771],{"class":214},[204,74752,70142],{"class":2049},[204,74754,13137],{"class":214},[204,74756,74757],{"class":273},"\u002F\u002F重置表单\n",[204,74759,74761],{"class":206,"line":74760},268,[204,74762,74763],{"class":273},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[204,74765,74767,74770,74772,74774,74777,74779,74781,74783,74785],{"class":206,"line":74766},269,[204,74768,74769],{"class":214},"      localStorage.",[204,74771,71740],{"class":2049},[204,74773,215],{"class":214},[204,74775,74776],{"class":319},"'data'",[204,74778,12522],{"class":214},[204,74780,71750],{"class":263},[204,74782,771],{"class":214},[204,74784,71755],{"class":2049},[204,74786,74787],{"class":214},"(arr))\n",[204,74789,74791],{"class":206,"line":74790},270,[204,74792,33547],{"class":214},[204,74794,74796],{"class":206,"line":74795},271,[204,74797,2486],{"emptyLinePlaceholder":135},[204,74799,74801],{"class":206,"line":74800},272,[204,74802,74803],{"class":273},"    \u002F\u002F 3.删除业务\n",[204,74805,74807],{"class":206,"line":74806},273,[204,74808,74809],{"class":273},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[204,74811,74813,74815,74817,74819,74821,74823,74825,74827,74829],{"class":206,"line":74812},274,[204,74814,70427],{"class":214},[204,74816,57899],{"class":2049},[204,74818,215],{"class":214},[204,74820,57904],{"class":319},[204,74822,12522],{"class":214},[204,74824,54535],{"class":210},[204,74826,1744],{"class":214},[204,74828,289],{"class":5303},[204,74830,12529],{"class":214},[204,74832,74834],{"class":206,"line":74833},275,[204,74835,74836],{"class":273},"      \u002F\u002F 判断是否点击的是删除按钮\n",[204,74838,74840,74842,74844,74846,74848],{"class":206,"line":74839},276,[204,74841,54566],{"class":210},[204,74843,67120],{"class":214},[204,74845,54572],{"class":210},[204,74847,68342],{"class":319},[204,74849,12529],{"class":214},[204,74851,74853],{"class":206,"line":74852},277,[204,74854,74855],{"class":273},"        \u002F\u002F alert(1)\n",[204,74857,74859],{"class":206,"line":74858},278,[204,74860,74861],{"class":273},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[204,74863,74865],{"class":206,"line":74864},279,[204,74866,74867],{"class":273},"        \u002F\u002F console.log(e.target)\n",[204,74869,74871],{"class":206,"line":74870},280,[204,74872,74873],{"class":273},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[204,74875,74877],{"class":206,"line":74876},281,[204,74878,2486],{"emptyLinePlaceholder":135},[204,74880,74882],{"class":206,"line":74881},282,[204,74883,74884],{"class":273},"        \u002F\u002F 确认框，确然是否真的要删除\n",[204,74886,74888],{"class":206,"line":74887},283,[204,74889,74890],{"class":273},"        \u002F\u002F confirm()为确认框\n",[204,74892,74894],{"class":206,"line":74893},284,[204,74895,74896],{"class":273},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[204,74898,74900,74902,74904,74907,74909,74912],{"class":206,"line":74899},285,[204,74901,2583],{"class":210},[204,74903,1744],{"class":214},[204,74905,74906],{"class":2049},"confirm",[204,74908,215],{"class":214},[204,74910,74911],{"class":319},"'您确定要删除这条数据吗？'",[204,74913,74914],{"class":214},")) {\n",[204,74916,74918,74921,74923,74925,74927],{"class":206,"line":74917},286,[204,74919,74920],{"class":214},"          arr.",[204,74922,58096],{"class":2049},[204,74924,70480],{"class":214},[204,74926,431],{"class":263},[204,74928,221],{"class":214},[204,74930,74932],{"class":206,"line":74931},287,[204,74933,74934],{"class":273},"          \u002F\u002F 3.4 重新渲染页面\n",[204,74936,74938,74941],{"class":206,"line":74937},288,[204,74939,74940],{"class":2049},"          render",[204,74942,2062],{"class":214},[204,74944,74946],{"class":206,"line":74945},289,[204,74947,74948],{"class":273},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[204,74950,74952,74955,74957,74959,74961,74963,74965,74967,74969],{"class":206,"line":74951},290,[204,74953,74954],{"class":214},"          localStorage.",[204,74956,71740],{"class":2049},[204,74958,215],{"class":214},[204,74960,74776],{"class":319},[204,74962,12522],{"class":214},[204,74964,71750],{"class":263},[204,74966,771],{"class":214},[204,74968,71755],{"class":2049},[204,74970,74787],{"class":214},[204,74972,74974],{"class":206,"line":74973},291,[204,74975,2615],{"class":214},[204,74977,74979],{"class":206,"line":74978},292,[204,74980,52484],{"class":214},[204,74982,74984],{"class":206,"line":74983},293,[204,74985,2486],{"emptyLinePlaceholder":135},[204,74987,74989],{"class":206,"line":74988},294,[204,74990,33547],{"class":214},[204,74992,74994],{"class":206,"line":74993},295,[204,74995,2486],{"emptyLinePlaceholder":135},[204,74997,74999,75001,75003],{"class":206,"line":74998},296,[204,75000,52503],{"class":214},[204,75002,51899],{"class":51386},[204,75004,51393],{"class":214},[204,75006,75008,75010,75012],{"class":206,"line":75007},297,[204,75009,51871],{"class":214},[204,75011,51886],{"class":51386},[204,75013,51393],{"class":214},[204,75015,75017],{"class":206,"line":75016},298,[204,75018,2486],{"emptyLinePlaceholder":135},[204,75020,75022,75024,75026],{"class":206,"line":75021},299,[204,75023,51871],{"class":214},[204,75025,50721],{"class":51386},[204,75027,51393],{"class":214},[14,75029,75031],{"id":75030},"_36-正则表达式","3.6 正则表达式",[19,75033,75034],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75036,75037],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75039,75040],{},"正则表达式的作用：",[68,75042,75043,75050,75056],{},[71,75044,75045,75046,75049],{},"表单验证（ ",[30,75047,75048],{},"匹配"," ）",[71,75051,75052,75053,75049],{},"过滤敏感词（ ",[30,75054,75055],{},"替换",[71,75057,75058,75059,75049],{},"字符串中提取我们想要的部分（ ",[30,75060,75061],{},"提取",[49,75063,75065],{"id":75064},"_361-语法","3.6.1 语法",[19,75067,75068],{},"正则表达式使用步骤：",[161,75070,75071,75074],{},[71,75072,75073],{},"定义规则",[71,75075,75076],{},"查找是否匹配",[19,75078,75079],{},"正则表达式里边不需要写引号",[19,75081,75082],{},[23,75083],{"alt":125,"src":75084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75086,75087],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75089,75090],{},"reg.test(str)",[19,75092,75093],{},[23,75094],{"alt":125,"src":75095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75097,75098],{},[23,75099],{"alt":125,"src":75100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[49,75102,75104],{"id":75103},"_362-元字符","3.6.2 元字符",[161,75106,75107,75110,75113,75116,75123],{},[71,75108,75109],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[71,75111,75112],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[71,75114,75115],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[71,75117,75118,75119],{},"正则验证工具：",[62,75120,75121],{"href":75121,"rel":75122},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[66],[71,75124,75125],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22085,75127,75129],{"id":75128},"_3621-边界符","3.6.2.1 边界符",[19,75131,75132],{},[23,75133],{"alt":125,"src":75134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75136,75137],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75139,75140],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75142,75143],{},"只匹配一次",[19,75145,75146],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22085,75148,75150],{"id":75149},"_3622-量词","3.6.2.2 量词",[19,75152,75153],{},[23,75154],{"alt":125,"src":75155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75157,75158],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22085,75160,75162],{"id":75161},"_3623-元字符","3.6.2.3 元字符",[19,75164,75165],{},[23,75166],{"alt":125,"src":75167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75169,75170],{},"匹配的是a或b或c []只选一个",[19,75172,75173],{},[23,75174],{"alt":125,"src":75175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75177,75178],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75180,75181],{},[23,75182],{"alt":125,"src":75183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75185,75186],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75188,75189],{},[23,75190],{"alt":125,"src":75191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[196,75193,75195],{"className":50719,"code":75194,"language":50721,"meta":125,"style":125},"\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",[81,75196,75197,75207,75221,75225,75233,75247,75267,75279,75287,75291,75299,75307,75312,75343,75370,75398,75402,75407,75435,75466,75471,75476,75507,75539,75571,75575,75580,75611,75641,75671,75675,75680,75711,75742,75772,75802,75806,75811,75844,75848,75853,75884,75915,75919,75924,75955,75985,76016,76020,76025,76057,76088,76119,76146,76177,76209,76242,76273,76304,76336,76367,76375,76383,76387],{"__ignoreMap":125},[204,75198,75199,75201,75203,75205],{"class":206,"line":207},[204,75200,51383],{"class":214},[204,75202,51387],{"class":51386},[204,75204,51390],{"class":2049},[204,75206,51393],{"class":214},[204,75208,75209,75211,75213,75215,75217,75219],{"class":206,"line":126},[204,75210,1123],{"class":214},[204,75212,50721],{"class":51386},[204,75214,51402],{"class":2049},[204,75216,260],{"class":214},[204,75218,51407],{"class":319},[204,75220,51393],{"class":214},[204,75222,75223],{"class":206,"line":131},[204,75224,2486],{"emptyLinePlaceholder":135},[204,75226,75227,75229,75231],{"class":206,"line":1281},[204,75228,1123],{"class":214},[204,75230,51420],{"class":51386},[204,75232,51393],{"class":214},[204,75234,75235,75237,75239,75241,75243,75245],{"class":206,"line":1287},[204,75236,52230],{"class":214},[204,75238,51430],{"class":51386},[204,75240,51433],{"class":2049},[204,75242,260],{"class":214},[204,75244,51438],{"class":319},[204,75246,51393],{"class":214},[204,75248,75249,75251,75253,75255,75257,75259,75261,75263,75265],{"class":206,"line":1301},[204,75250,52230],{"class":214},[204,75252,51430],{"class":51386},[204,75254,15007],{"class":2049},[204,75256,260],{"class":214},[204,75258,51477],{"class":319},[204,75260,51457],{"class":2049},[204,75262,260],{"class":214},[204,75264,51484],{"class":319},[204,75266,51393],{"class":214},[204,75268,75269,75271,75273,75275,75277],{"class":206,"line":1307},[204,75270,52230],{"class":214},[204,75272,51493],{"class":51386},[204,75274,51496],{"class":214},[204,75276,51493],{"class":51386},[204,75278,51393],{"class":214},[204,75280,75281,75283,75285],{"class":206,"line":1398},[204,75282,51871],{"class":214},[204,75284,51420],{"class":51386},[204,75286,51393],{"class":214},[204,75288,75289],{"class":206,"line":1404},[204,75290,2486],{"emptyLinePlaceholder":135},[204,75292,75293,75295,75297],{"class":206,"line":1416},[204,75294,1123],{"class":214},[204,75296,51886],{"class":51386},[204,75298,51393],{"class":214},[204,75300,75301,75303,75305],{"class":206,"line":1698},[204,75302,52230],{"class":214},[204,75304,51899],{"class":51386},[204,75306,51393],{"class":214},[204,75308,75309],{"class":206,"line":1703},[204,75310,75311],{"class":273},"    \u002F\u002F 元字符中\n",[204,75313,75314,75316,75318,75320,75322,75325,75327,75329,75332,75334,75337,75340],{"class":206,"line":1709},[204,75315,73839],{"class":214},[204,75317,58333],{"class":2049},[204,75319,215],{"class":214},[204,75321,797],{"class":319},[204,75323,75324],{"class":48063},"哈",[204,75326,797],{"class":319},[204,75328,771],{"class":214},[204,75330,75331],{"class":2049},"test",[204,75333,215],{"class":214},[204,75335,75336],{"class":319},"'哈'",[204,75338,75339],{"class":214},"))  ",[204,75341,75342],{"class":273},"\u002F\u002Ftrue\n",[204,75344,75345,75347,75349,75351,75353,75355,75357,75359,75361,75363,75366,75368],{"class":206,"line":1714},[204,75346,73839],{"class":214},[204,75348,58333],{"class":2049},[204,75350,215],{"class":214},[204,75352,797],{"class":319},[204,75354,75324],{"class":48063},[204,75356,797],{"class":319},[204,75358,771],{"class":214},[204,75360,75331],{"class":2049},[204,75362,215],{"class":214},[204,75364,75365],{"class":319},"'哈哈'",[204,75367,75339],{"class":214},[204,75369,75342],{"class":273},[204,75371,75372,75374,75376,75378,75380,75382,75384,75386,75388,75390,75393,75396],{"class":206,"line":1728},[204,75373,73839],{"class":214},[204,75375,58333],{"class":2049},[204,75377,215],{"class":214},[204,75379,797],{"class":319},[204,75381,75324],{"class":48063},[204,75383,797],{"class":319},[204,75385,771],{"class":214},[204,75387,75331],{"class":2049},[204,75389,215],{"class":214},[204,75391,75392],{"class":319},"'二哈'",[204,75394,75395],{"class":214},"))   ",[204,75397,75342],{"class":273},[204,75399,75400],{"class":206,"line":1733},[204,75401,2486],{"emptyLinePlaceholder":135},[204,75403,75404],{"class":206,"line":1739},[204,75405,75406],{"class":273},"    \u002F\u002F 1.边界符\n",[204,75408,75409,75411,75413,75415,75417,75419,75421,75423,75425,75427,75429,75431,75433],{"class":206,"line":1760},[204,75410,73839],{"class":214},[204,75412,58333],{"class":2049},[204,75414,215],{"class":214},[204,75416,797],{"class":319},[204,75418,1179],{"class":210},[204,75420,75324],{"class":48063},[204,75422,797],{"class":319},[204,75424,771],{"class":214},[204,75426,75331],{"class":2049},[204,75428,215],{"class":214},[204,75430,75336],{"class":319},[204,75432,75339],{"class":214},[204,75434,75342],{"class":273},[204,75436,75437,75439,75441,75443,75445,75447,75449,75451,75453,75455,75457,75459,75461,75463],{"class":206,"line":1765},[204,75438,73839],{"class":214},[204,75440,58333],{"class":2049},[204,75442,215],{"class":214},[204,75444,797],{"class":319},[204,75446,1179],{"class":210},[204,75448,75324],{"class":48063},[204,75450,515],{"class":210},[204,75452,797],{"class":319},[204,75454,771],{"class":214},[204,75456,75331],{"class":2049},[204,75458,215],{"class":214},[204,75460,75365],{"class":319},[204,75462,75339],{"class":214},[204,75464,75465],{"class":273},"\u002F\u002Ffalse\n",[204,75467,75468],{"class":206,"line":1779},[204,75469,75470],{"class":273},"    \u002F\u002F 2.量词\n",[204,75472,75473],{"class":206,"line":1784},[204,75474,75475],{"class":273},"    \u002F\u002F 量词 * 类似于 >= 0\n",[204,75477,75478,75480,75482,75484,75486,75488,75490,75493,75495,75497,75499,75501,75503,75505],{"class":206,"line":1813},[204,75479,73839],{"class":214},[204,75481,58333],{"class":2049},[204,75483,215],{"class":214},[204,75485,797],{"class":319},[204,75487,1179],{"class":210},[204,75489,75324],{"class":48063},[204,75491,75492],{"class":210},"*$",[204,75494,797],{"class":319},[204,75496,771],{"class":214},[204,75498,75331],{"class":2049},[204,75500,215],{"class":214},[204,75502,75365],{"class":319},[204,75504,75339],{"class":214},[204,75506,75342],{"class":273},[204,75508,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531,75534,75536],{"class":206,"line":1818},[204,75510,73839],{"class":214},[204,75512,58333],{"class":2049},[204,75514,215],{"class":214},[204,75516,797],{"class":319},[204,75518,1179],{"class":210},[204,75520,75324],{"class":48063},[204,75522,75492],{"class":210},[204,75524,797],{"class":319},[204,75526,771],{"class":214},[204,75528,75331],{"class":2049},[204,75530,215],{"class":214},[204,75532,75533],{"class":319},"'二哈好傻'",[204,75535,75339],{"class":214},[204,75537,75538],{"class":273},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[204,75540,75541,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561,75563,75566,75568],{"class":206,"line":1835},[204,75542,73839],{"class":214},[204,75544,58333],{"class":2049},[204,75546,215],{"class":214},[204,75548,797],{"class":319},[204,75550,1179],{"class":210},[204,75552,75324],{"class":48063},[204,75554,75492],{"class":210},[204,75556,797],{"class":319},[204,75558,771],{"class":214},[204,75560,75331],{"class":2049},[204,75562,215],{"class":214},[204,75564,75565],{"class":319},"'哈好哈'",[204,75567,75395],{"class":214},[204,75569,75570],{"class":273},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[204,75572,75573],{"class":206,"line":1840},[204,75574,2486],{"emptyLinePlaceholder":135},[204,75576,75577],{"class":206,"line":1845},[204,75578,75579],{"class":273},"    \u002F\u002F +类似于>=1\n",[204,75581,75582,75584,75586,75588,75590,75592,75594,75597,75599,75601,75603,75605,75607,75609],{"class":206,"line":1850},[204,75583,73839],{"class":214},[204,75585,58333],{"class":2049},[204,75587,215],{"class":214},[204,75589,797],{"class":319},[204,75591,1179],{"class":210},[204,75593,75324],{"class":48063},[204,75595,75596],{"class":210},"+$",[204,75598,797],{"class":319},[204,75600,771],{"class":214},[204,75602,75331],{"class":2049},[204,75604,215],{"class":214},[204,75606,75365],{"class":319},[204,75608,75339],{"class":214},[204,75610,75342],{"class":273},[204,75612,75613,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633,75635,75637,75639],{"class":206,"line":1864},[204,75614,73839],{"class":214},[204,75616,58333],{"class":2049},[204,75618,215],{"class":214},[204,75620,797],{"class":319},[204,75622,1179],{"class":210},[204,75624,75324],{"class":48063},[204,75626,75596],{"class":210},[204,75628,797],{"class":319},[204,75630,771],{"class":214},[204,75632,75331],{"class":2049},[204,75634,215],{"class":214},[204,75636,75533],{"class":319},[204,75638,75339],{"class":214},[204,75640,75538],{"class":273},[204,75642,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669],{"class":206,"line":1869},[204,75644,73839],{"class":214},[204,75646,58333],{"class":2049},[204,75648,215],{"class":214},[204,75650,797],{"class":319},[204,75652,1179],{"class":210},[204,75654,75324],{"class":48063},[204,75656,75596],{"class":210},[204,75658,797],{"class":319},[204,75660,771],{"class":214},[204,75662,75331],{"class":2049},[204,75664,215],{"class":214},[204,75666,75565],{"class":319},[204,75668,75395],{"class":214},[204,75670,75465],{"class":273},[204,75672,75673],{"class":206,"line":2663},[204,75674,2486],{"emptyLinePlaceholder":135},[204,75676,75677],{"class":206,"line":2677},[204,75678,75679],{"class":273},"    \u002F\u002F ?类似于0次或一次\n",[204,75681,75682,75684,75686,75688,75690,75692,75695,75697,75699,75701,75703,75705,75707,75709],{"class":206,"line":2685},[204,75683,73839],{"class":214},[204,75685,58333],{"class":2049},[204,75687,215],{"class":214},[204,75689,797],{"class":319},[204,75691,1179],{"class":210},[204,75693,75694],{"class":48063},"哈？",[204,75696,515],{"class":210},[204,75698,797],{"class":319},[204,75700,771],{"class":214},[204,75702,75331],{"class":2049},[204,75704,215],{"class":214},[204,75706,74314],{"class":319},[204,75708,75395],{"class":214},[204,75710,75342],{"class":273},[204,75712,75713,75715,75717,75719,75721,75723,75725,75728,75730,75732,75734,75736,75738,75740],{"class":206,"line":2690},[204,75714,73839],{"class":214},[204,75716,58333],{"class":2049},[204,75718,215],{"class":214},[204,75720,797],{"class":319},[204,75722,1179],{"class":210},[204,75724,75324],{"class":48063},[204,75726,75727],{"class":210},"?$",[204,75729,797],{"class":319},[204,75731,771],{"class":214},[204,75733,75331],{"class":2049},[204,75735,215],{"class":214},[204,75737,75365],{"class":319},[204,75739,75339],{"class":214},[204,75741,75465],{"class":273},[204,75743,75744,75746,75748,75750,75752,75754,75756,75758,75760,75762,75764,75766,75768,75770],{"class":206,"line":2696},[204,75745,73839],{"class":214},[204,75747,58333],{"class":2049},[204,75749,215],{"class":214},[204,75751,797],{"class":319},[204,75753,1179],{"class":210},[204,75755,75324],{"class":48063},[204,75757,75727],{"class":210},[204,75759,797],{"class":319},[204,75761,771],{"class":214},[204,75763,75331],{"class":2049},[204,75765,215],{"class":214},[204,75767,75533],{"class":319},[204,75769,75339],{"class":214},[204,75771,75538],{"class":273},[204,75773,75774,75776,75778,75780,75782,75784,75786,75788,75790,75792,75794,75796,75798,75800],{"class":206,"line":2702},[204,75775,73839],{"class":214},[204,75777,58333],{"class":2049},[204,75779,215],{"class":214},[204,75781,797],{"class":319},[204,75783,1179],{"class":210},[204,75785,75324],{"class":48063},[204,75787,75727],{"class":210},[204,75789,797],{"class":319},[204,75791,771],{"class":214},[204,75793,75331],{"class":2049},[204,75795,215],{"class":214},[204,75797,75565],{"class":319},[204,75799,75339],{"class":214},[204,75801,75465],{"class":273},[204,75803,75804],{"class":206,"line":2707},[204,75805,2486],{"emptyLinePlaceholder":135},[204,75807,75808],{"class":206,"line":8035},[204,75809,75810],{"class":273},"    \u002F\u002F {n}写几，就必须出现几次\n",[204,75812,75813,75815,75817,75819,75821,75823,75825,75828,75830,75832,75834,75836,75839,75842],{"class":206,"line":8059},[204,75814,73839],{"class":214},[204,75816,58333],{"class":2049},[204,75818,215],{"class":214},[204,75820,797],{"class":319},[204,75822,1179],{"class":210},[204,75824,75324],{"class":48063},[204,75826,75827],{"class":210},"{4}$",[204,75829,797],{"class":319},[204,75831,771],{"class":214},[204,75833,75331],{"class":2049},[204,75835,215],{"class":214},[204,75837,75838],{"class":319},"'哈哈哈哈'",[204,75840,75841],{"class":214},")) ",[204,75843,75342],{"class":273},[204,75845,75846],{"class":206,"line":8064},[204,75847,2486],{"emptyLinePlaceholder":135},[204,75849,75850],{"class":206,"line":8070},[204,75851,75852],{"class":273},"    \u002F\u002F {n,}大于等于n次\n",[204,75854,75855,75857,75859,75861,75863,75865,75867,75870,75872,75874,75876,75878,75880,75882],{"class":206,"line":8097},[204,75856,73839],{"class":214},[204,75858,58333],{"class":2049},[204,75860,215],{"class":214},[204,75862,797],{"class":319},[204,75864,1179],{"class":210},[204,75866,75324],{"class":48063},[204,75868,75869],{"class":210},"{4,}$",[204,75871,797],{"class":319},[204,75873,771],{"class":214},[204,75875,75331],{"class":2049},[204,75877,215],{"class":214},[204,75879,75838],{"class":319},[204,75881,75841],{"class":214},[204,75883,75342],{"class":273},[204,75885,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75911,75913],{"class":206,"line":8102},[204,75887,73839],{"class":214},[204,75889,58333],{"class":2049},[204,75891,215],{"class":214},[204,75893,797],{"class":319},[204,75895,1179],{"class":210},[204,75897,75324],{"class":48063},[204,75899,75869],{"class":210},[204,75901,797],{"class":319},[204,75903,771],{"class":214},[204,75905,75331],{"class":2049},[204,75907,215],{"class":214},[204,75909,75910],{"class":319},"'哈哈哈哈哈'",[204,75912,75841],{"class":214},[204,75914,75342],{"class":273},[204,75916,75917],{"class":206,"line":8108},[204,75918,2486],{"emptyLinePlaceholder":135},[204,75920,75921],{"class":206,"line":8120},[204,75922,75923],{"class":273},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[204,75925,75926,75928,75930,75932,75934,75936,75938,75941,75943,75945,75947,75949,75951,75953],{"class":206,"line":8132},[204,75927,73839],{"class":214},[204,75929,58333],{"class":2049},[204,75931,215],{"class":214},[204,75933,797],{"class":319},[204,75935,1179],{"class":210},[204,75937,75324],{"class":48063},[204,75939,75940],{"class":210},"{4,6}$",[204,75942,797],{"class":319},[204,75944,771],{"class":214},[204,75946,75331],{"class":2049},[204,75948,215],{"class":214},[204,75950,75838],{"class":319},[204,75952,75841],{"class":214},[204,75954,75342],{"class":273},[204,75956,75957,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983],{"class":206,"line":8144},[204,75958,73839],{"class":214},[204,75960,58333],{"class":2049},[204,75962,215],{"class":214},[204,75964,797],{"class":319},[204,75966,1179],{"class":210},[204,75968,75324],{"class":48063},[204,75970,75940],{"class":210},[204,75972,797],{"class":319},[204,75974,771],{"class":214},[204,75976,75331],{"class":2049},[204,75978,215],{"class":214},[204,75980,75910],{"class":319},[204,75982,75841],{"class":214},[204,75984,75342],{"class":273},[204,75986,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76009,76012,76014],{"class":206,"line":9803},[204,75988,73839],{"class":214},[204,75990,58333],{"class":2049},[204,75992,215],{"class":214},[204,75994,797],{"class":319},[204,75996,1179],{"class":210},[204,75998,75324],{"class":48063},[204,76000,75940],{"class":210},[204,76002,797],{"class":319},[204,76004,771],{"class":214},[204,76006,75331],{"class":2049},[204,76008,215],{"class":214},[204,76010,76011],{"class":319},"'哈哈哈哈哈哈哈'",[204,76013,75841],{"class":214},[204,76015,75465],{"class":273},[204,76017,76018],{"class":206,"line":9828},[204,76019,2486],{"emptyLinePlaceholder":135},[204,76021,76022],{"class":206,"line":9851},[204,76023,76024],{"class":273},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[204,76026,76027,76029,76031,76033,76035,76037,76040,76042,76044,76046,76048,76050,76053,76055],{"class":206,"line":9875},[204,76028,73839],{"class":214},[204,76030,58333],{"class":2049},[204,76032,215],{"class":214},[204,76034,797],{"class":319},[204,76036,1179],{"class":210},[204,76038,76039],{"class":263},"[abc]",[204,76041,515],{"class":210},[204,76043,797],{"class":319},[204,76045,771],{"class":214},[204,76047,75331],{"class":2049},[204,76049,215],{"class":214},[204,76051,76052],{"class":319},"'a'",[204,76054,75339],{"class":214},[204,76056,75342],{"class":273},[204,76058,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081,76084,76086],{"class":206,"line":9880},[204,76060,73839],{"class":214},[204,76062,58333],{"class":2049},[204,76064,215],{"class":214},[204,76066,797],{"class":319},[204,76068,1179],{"class":210},[204,76070,76039],{"class":263},[204,76072,515],{"class":210},[204,76074,797],{"class":319},[204,76076,771],{"class":214},[204,76078,75331],{"class":2049},[204,76080,215],{"class":214},[204,76082,76083],{"class":319},"'b'",[204,76085,75339],{"class":214},[204,76087,75342],{"class":273},[204,76089,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112,76115,76117],{"class":206,"line":9885},[204,76091,73839],{"class":214},[204,76093,58333],{"class":2049},[204,76095,215],{"class":214},[204,76097,797],{"class":319},[204,76099,1179],{"class":210},[204,76101,76039],{"class":263},[204,76103,515],{"class":210},[204,76105,797],{"class":319},[204,76107,771],{"class":214},[204,76109,75331],{"class":2049},[204,76111,215],{"class":214},[204,76113,76114],{"class":319},"'c'",[204,76116,75339],{"class":214},[204,76118,75342],{"class":273},[204,76120,76121,76123,76125,76127,76129,76131,76133,76135,76137,76139,76142,76144],{"class":206,"line":9890},[204,76122,73839],{"class":214},[204,76124,58333],{"class":2049},[204,76126,215],{"class":214},[204,76128,797],{"class":319},[204,76130,76039],{"class":263},[204,76132,797],{"class":319},[204,76134,771],{"class":214},[204,76136,75331],{"class":2049},[204,76138,215],{"class":214},[204,76140,76141],{"class":319},"'ab'",[204,76143,75339],{"class":214},[204,76145,75342],{"class":273},[204,76147,76148,76150,76152,76154,76156,76158,76160,76162,76164,76166,76168,76170,76172,76174],{"class":206,"line":9899},[204,76149,73839],{"class":214},[204,76151,58333],{"class":2049},[204,76153,215],{"class":214},[204,76155,797],{"class":319},[204,76157,1179],{"class":210},[204,76159,76039],{"class":263},[204,76161,515],{"class":210},[204,76163,797],{"class":319},[204,76165,771],{"class":214},[204,76167,75331],{"class":2049},[204,76169,215],{"class":214},[204,76171,76141],{"class":319},[204,76173,75339],{"class":214},[204,76175,76176],{"class":273},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[204,76178,76179,76181,76183,76185,76187,76189,76191,76194,76196,76198,76200,76202,76204,76206],{"class":206,"line":9904},[204,76180,73839],{"class":214},[204,76182,58333],{"class":2049},[204,76184,215],{"class":214},[204,76186,797],{"class":319},[204,76188,1179],{"class":210},[204,76190,76039],{"class":263},[204,76192,76193],{"class":210},"{2}$",[204,76195,797],{"class":319},[204,76197,771],{"class":214},[204,76199,75331],{"class":2049},[204,76201,215],{"class":214},[204,76203,76141],{"class":319},[204,76205,75339],{"class":214},[204,76207,76208],{"class":273},"\u002F\u002Ftrue   可以选两个\n",[204,76210,76211,76213,76215,76217,76219,76221,76224,76226,76228,76230,76232,76234,76237,76239],{"class":206,"line":9910},[204,76212,73839],{"class":214},[204,76214,58333],{"class":2049},[204,76216,215],{"class":214},[204,76218,797],{"class":319},[204,76220,1179],{"class":210},[204,76222,76223],{"class":263},"[a-z]",[204,76225,515],{"class":210},[204,76227,797],{"class":319},[204,76229,771],{"class":214},[204,76231,75331],{"class":2049},[204,76233,215],{"class":214},[204,76235,76236],{"class":319},"'p'",[204,76238,75395],{"class":214},[204,76240,76241],{"class":273},"\u002F\u002Ftrue   依然只能选一个\n",[204,76243,76244,76246,76248,76250,76252,76254,76257,76259,76261,76263,76265,76267,76269,76271],{"class":206,"line":9931},[204,76245,73839],{"class":214},[204,76247,58333],{"class":2049},[204,76249,215],{"class":214},[204,76251,797],{"class":319},[204,76253,1179],{"class":210},[204,76255,76256],{"class":263},"[A-Z]",[204,76258,515],{"class":210},[204,76260,797],{"class":319},[204,76262,771],{"class":214},[204,76264,75331],{"class":2049},[204,76266,215],{"class":214},[204,76268,76236],{"class":319},[204,76270,75395],{"class":214},[204,76272,75465],{"class":273},[204,76274,76275,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76300,76302],{"class":206,"line":9937},[204,76276,73839],{"class":214},[204,76278,58333],{"class":2049},[204,76280,215],{"class":214},[204,76282,797],{"class":319},[204,76284,1179],{"class":210},[204,76286,76256],{"class":263},[204,76288,515],{"class":210},[204,76290,797],{"class":319},[204,76292,771],{"class":214},[204,76294,75331],{"class":2049},[204,76296,215],{"class":214},[204,76298,76299],{"class":319},"'P'",[204,76301,75395],{"class":214},[204,76303,75342],{"class":273},[204,76305,76306,76308,76310,76312,76314,76316,76319,76321,76323,76325,76327,76329,76332,76334],{"class":206,"line":9951},[204,76307,73839],{"class":214},[204,76309,58333],{"class":2049},[204,76311,215],{"class":214},[204,76313,797],{"class":319},[204,76315,1179],{"class":210},[204,76317,76318],{"class":263},"[0-9]",[204,76320,515],{"class":210},[204,76322,797],{"class":319},[204,76324,771],{"class":214},[204,76326,75331],{"class":2049},[204,76328,215],{"class":214},[204,76330,76331],{"class":319},"'0'",[204,76333,75395],{"class":214},[204,76335,75342],{"class":273},[204,76337,76338,76340,76342,76344,76346,76348,76351,76353,76355,76357,76359,76361,76363,76365],{"class":206,"line":9957},[204,76339,73839],{"class":214},[204,76341,58333],{"class":2049},[204,76343,215],{"class":214},[204,76345,797],{"class":319},[204,76347,1179],{"class":210},[204,76349,76350],{"class":263},"[a-zA-Z0-9]",[204,76352,515],{"class":210},[204,76354,797],{"class":319},[204,76356,771],{"class":214},[204,76358,75331],{"class":2049},[204,76360,215],{"class":214},[204,76362,76236],{"class":319},[204,76364,75339],{"class":214},[204,76366,75342],{"class":273},[204,76368,76369,76371,76373],{"class":206,"line":9984},[204,76370,52503],{"class":214},[204,76372,51899],{"class":51386},[204,76374,51393],{"class":214},[204,76376,76377,76379,76381],{"class":206,"line":9993},[204,76378,51871],{"class":214},[204,76380,51886],{"class":51386},[204,76382,51393],{"class":214},[204,76384,76385],{"class":206,"line":9999},[204,76386,2486],{"emptyLinePlaceholder":135},[204,76388,76389,76391,76393],{"class":206,"line":10007},[204,76390,51871],{"class":214},[204,76392,50721],{"class":51386},[204,76394,51393],{"class":214},[22085,76396,76398],{"id":76397},"_3624-修饰符","3.6.2.4 修饰符",[19,76400,76401],{},[23,76402],{"alt":125,"src":76403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76405,76406],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76408,76409],{},[23,76410],{"alt":125,"src":76411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[196,76413,76415],{"className":50719,"code":76414,"language":50721,"meta":125,"style":125},"\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",[81,76416,76417,76427,76441,76449,76463,76483,76495,76503,76511,76519,76551,76582,76587,76619,76630,76663,76672,76680,76688],{"__ignoreMap":125},[204,76418,76419,76421,76423,76425],{"class":206,"line":207},[204,76420,51383],{"class":214},[204,76422,51387],{"class":51386},[204,76424,51390],{"class":2049},[204,76426,51393],{"class":214},[204,76428,76429,76431,76433,76435,76437,76439],{"class":206,"line":126},[204,76430,1123],{"class":214},[204,76432,50721],{"class":51386},[204,76434,51402],{"class":2049},[204,76436,260],{"class":214},[204,76438,51407],{"class":319},[204,76440,51393],{"class":214},[204,76442,76443,76445,76447],{"class":206,"line":131},[204,76444,1123],{"class":214},[204,76446,51420],{"class":51386},[204,76448,51393],{"class":214},[204,76450,76451,76453,76455,76457,76459,76461],{"class":206,"line":1281},[204,76452,52230],{"class":214},[204,76454,51430],{"class":51386},[204,76456,51433],{"class":2049},[204,76458,260],{"class":214},[204,76460,51438],{"class":319},[204,76462,51393],{"class":214},[204,76464,76465,76467,76469,76471,76473,76475,76477,76479,76481],{"class":206,"line":1287},[204,76466,52230],{"class":214},[204,76468,51430],{"class":51386},[204,76470,15007],{"class":2049},[204,76472,260],{"class":214},[204,76474,51477],{"class":319},[204,76476,51457],{"class":2049},[204,76478,260],{"class":214},[204,76480,51484],{"class":319},[204,76482,51393],{"class":214},[204,76484,76485,76487,76489,76491,76493],{"class":206,"line":1301},[204,76486,52230],{"class":214},[204,76488,51493],{"class":51386},[204,76490,51496],{"class":214},[204,76492,51493],{"class":51386},[204,76494,51393],{"class":214},[204,76496,76497,76499,76501],{"class":206,"line":1307},[204,76498,51871],{"class":214},[204,76500,51420],{"class":51386},[204,76502,51393],{"class":214},[204,76504,76505,76507,76509],{"class":206,"line":1398},[204,76506,1123],{"class":214},[204,76508,51886],{"class":51386},[204,76510,51393],{"class":214},[204,76512,76513,76515,76517],{"class":206,"line":1404},[204,76514,52230],{"class":214},[204,76516,51899],{"class":51386},[204,76518,51393],{"class":214},[204,76520,76521,76523,76525,76527,76529,76531,76534,76536,76538,76540,76542,76544,76547,76549],{"class":206,"line":1416},[204,76522,73839],{"class":214},[204,76524,58333],{"class":2049},[204,76526,215],{"class":214},[204,76528,797],{"class":319},[204,76530,1179],{"class":210},[204,76532,76533],{"class":48063},"java",[204,76535,515],{"class":210},[204,76537,797],{"class":319},[204,76539,771],{"class":214},[204,76541,75331],{"class":2049},[204,76543,215],{"class":214},[204,76545,76546],{"class":319},"'java'",[204,76548,75841],{"class":214},[204,76550,75342],{"class":273},[204,76552,76553,76555,76557,76559,76561,76563,76565,76567,76569,76571,76573,76575,76578,76580],{"class":206,"line":1698},[204,76554,73839],{"class":214},[204,76556,58333],{"class":2049},[204,76558,215],{"class":214},[204,76560,797],{"class":319},[204,76562,1179],{"class":210},[204,76564,76533],{"class":48063},[204,76566,515],{"class":210},[204,76568,797],{"class":319},[204,76570,771],{"class":214},[204,76572,75331],{"class":2049},[204,76574,215],{"class":214},[204,76576,76577],{"class":319},"'Java'",[204,76579,75841],{"class":214},[204,76581,75465],{"class":273},[204,76583,76584],{"class":206,"line":1703},[204,76585,76586],{"class":273},"    \u002F\u002F 不区分大小写、\n",[204,76588,76589,76591,76593,76595,76597,76599,76601,76603,76605,76607,76609,76611,76613,76615,76617],{"class":206,"line":1709},[204,76590,73839],{"class":214},[204,76592,58333],{"class":2049},[204,76594,215],{"class":214},[204,76596,797],{"class":319},[204,76598,1179],{"class":210},[204,76600,76533],{"class":48063},[204,76602,515],{"class":210},[204,76604,797],{"class":319},[204,76606,654],{"class":210},[204,76608,771],{"class":214},[204,76610,75331],{"class":2049},[204,76612,215],{"class":214},[204,76614,76577],{"class":319},[204,76616,75841],{"class":214},[204,76618,75342],{"class":273},[204,76620,76621,76623,76625,76627],{"class":206,"line":1714},[204,76622,11308],{"class":210},[204,76624,74005],{"class":263},[204,76626,13651],{"class":210},[204,76628,76629],{"class":319}," 'java是一门编程语言，学完java工资很高'\n",[204,76631,76632,76634,76637,76639,76642,76645,76647,76649,76651,76653,76656,76658,76661],{"class":206,"line":1728},[204,76633,11308],{"class":210},[204,76635,76636],{"class":263}," result",[204,76638,13651],{"class":210},[204,76640,76641],{"class":214}," str.",[204,76643,76644],{"class":2049},"replace",[204,76646,215],{"class":214},[204,76648,797],{"class":319},[204,76650,76533],{"class":48063},[204,76652,797],{"class":319},[204,76654,76655],{"class":210},"ig",[204,76657,12522],{"class":214},[204,76659,76660],{"class":319},"'前端'",[204,76662,221],{"class":214},[204,76664,76665,76667,76669],{"class":206,"line":1733},[204,76666,73839],{"class":214},[204,76668,58333],{"class":2049},[204,76670,76671],{"class":214},"(result)\n",[204,76673,76674,76676,76678],{"class":206,"line":1739},[204,76675,52503],{"class":214},[204,76677,51899],{"class":51386},[204,76679,51393],{"class":214},[204,76681,76682,76684,76686],{"class":206,"line":1760},[204,76683,51871],{"class":214},[204,76685,51886],{"class":51386},[204,76687,51393],{"class":214},[204,76689,76690,76692,76694],{"class":206,"line":1765},[204,76691,51871],{"class":214},[204,76693,50721],{"class":51386},[204,76695,51393],{"class":214},[5213,76697,76698],{},"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":125,"searchDepth":126,"depth":126,"links":76700},[76701,76711,76723,76740,76747,76755],{"id":53446,"depth":126,"text":53447,"children":76702},[76703,76704,76705,76706,76707,76708,76709,76710],{"id":53450,"depth":131,"text":53451},{"id":53483,"depth":131,"text":53484},{"id":53522,"depth":131,"text":53523},{"id":53680,"depth":131,"text":53681},{"id":53728,"depth":131,"text":53729},{"id":53865,"depth":131,"text":53866},{"id":54187,"depth":131,"text":54188},{"id":57175,"depth":131,"text":57176},{"id":57203,"depth":126,"text":57204,"children":76712},[76713,76714,76715,76716,76717,76718,76719,76720,76721,76722],{"id":57207,"depth":131,"text":57208},{"id":57230,"depth":131,"text":57231},{"id":58145,"depth":131,"text":58146},{"id":58835,"depth":131,"text":58836},{"id":59117,"depth":131,"text":59118},{"id":63278,"depth":131,"text":63279},{"id":63448,"depth":131,"text":63449},{"id":63576,"depth":131,"text":63577},{"id":63601,"depth":131,"text":63602},{"id":64990,"depth":131,"text":64991},{"id":66143,"depth":126,"text":66144,"children":76724},[76725,76726,76727,76728,76729,76730,76731,76732,76733,76734,76735,76736,76737,76738,76739],{"id":66147,"depth":131,"text":66148},{"id":66801,"depth":131,"text":66802},{"id":68496,"depth":131,"text":68497},{"id":68537,"depth":131,"text":68538},{"id":68579,"depth":131,"text":68580},{"id":68593,"depth":131,"text":68594},{"id":68642,"depth":131,"text":68643},{"id":68654,"depth":131,"text":68655},{"id":68669,"depth":131,"text":68670},{"id":68705,"depth":131,"text":68706},{"id":68786,"depth":131,"text":68787},{"id":68914,"depth":131,"text":68915},{"id":68926,"depth":131,"text":68927},{"id":68945,"depth":131,"text":68946},{"id":71056,"depth":131,"text":71057},{"id":71075,"depth":126,"text":71076,"children":76741},[76742,76743,76744,76745,76746],{"id":71096,"depth":131,"text":71097},{"id":71116,"depth":131,"text":71117},{"id":71165,"depth":131,"text":71166},{"id":71290,"depth":131,"text":71291},{"id":71471,"depth":131,"text":71472},{"id":71489,"depth":126,"text":71490,"children":76748},[76749,76750,76751,76752,76753,76754],{"id":71504,"depth":131,"text":71505},{"id":71563,"depth":131,"text":71564},{"id":71587,"depth":131,"text":71588},{"id":71907,"depth":131,"text":71908},{"id":71939,"depth":131,"text":71940},{"id":71962,"depth":131,"text":71963},{"id":75030,"depth":126,"text":75031,"children":76756},[76757,76758],{"id":75064,"depth":131,"text":75065},{"id":75103,"depth":131,"text":75104},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53418,"description":132},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76765,"title":76766,"body":76767,"description":132,"extension":133,"meta":92904,"navigation":135,"path":92905,"seo":92906,"stem":92907,"__hash__":92908},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76768,"toc":92840},[76769,76772,76775,76779,76783,76788,76793,76804,76808,76813,76816,76820,76823,76828,76832,76836,76839,76844,76847,76851,76854,76862,76865,76869,76874,76879,76882,76886,76891,76896,76899,76903,76908,76911,76916,76919,76924,76927,76932,76937,76940,76943,76947,76952,76957,76960,76964,76968,76971,76974,76977,76981,76985,76990,76995,76998,77002,77007,77012,77015,77018,77021,77024,77027,77030,77033,77036,77039,77044,77048,77053,77058,77061,77064,77067,77070,77073,77076,77079,77082,77086,77090,77093,77096,77099,77104,77106,77109,77112,77115,77118,77121,77124,77127,77130,77133,77136,77139,77142,77145,77150,77155,77160,77163,77167,77170,77175,77179,77181,77192,77197,77298,77301,77304,77307,77310,77313,77316,77319,77322,77324,77327,77330,77333,77336,77339,77341,77344,77347,77350,77353,77356,77359,77361,77364,77366,77368,77371,77375,77379,77382,77385,77388,77391,77394,77397,77400,77403,77406,77411,77531,77534,77537,77542,77545,77548,77551,77554,77559,77562,77565,77568,77571,77576,77579,77679,77744,77818,77822,77825,77828,77832,77835,77849,77878,77881,77884,77887,77890,77893,77896,77899,77901,77904,77907,77910,77913,77917,77922,77926,77931,78006,78009,78192,78195,78198,78201,78204,78207,78209,78212,78215,78218,78221,78224,78227,78229,78233,78236,78241,78244,78247,78250,78253,78255,78260,78263,78266,78269,78272,78274,78279,78282,78285,78287,78289,78292,78296,78299,78302,78307,78310,78313,78316,78366,78371,78375,78380,78383,78452,78455,78464,78468,78473,78476,78479,78487,78490,78507,80309,80313,80317,80322,80325,80329,80335,80341,80493,80498,80503,80506,80509,80512,80515,80518,80521,80524,80527,80530,80533,80536,80539,80544,80548,80551,80562,80566,80571,80574,80577,80580,80583,80586,80588,80591,80594,80597,80600,80602,80619,80622,80626,80629,80634,80639,80642,80645,80649,80652,80655,80664,80667,80671,80674,80679,80684,80751,80755,80758,80761,80766,80771,80857,80862,80866,80869,80872,80887,80890,80895,80899,80904,81013,81016,81027,81177,81181,81186,81295,81299,81304,81309,81314,81317,81324,81344,81380,81544,81549,81552,81557,81564,81567,81570,81573,81632,81688,81744,81748,81753,82068,82071,82075,82078,82083,82192,82197,82201,82206,82210,82281,82285,82287,82290,82293,82331,82607,82611,82628,82694,82728,82732,82735,82740,82769,82776,82785,82790,82805,82810,82819,82822,82959,82963,83025,83029,83034,83279,83283,83288,83291,83294,83297,83300,83304,83309,84890,84894,84898,84904,84907,84912,84916,84919,84924,84927,84938,84942,84947,84951,84956,84961,84964,84969,84973,84977,84980,84985,84990,84993,84996,84999,85121,85126,85228,85231,85234,85238,85243,85415,85420,85424,85427,85432,85498,85503,85506,85637,85640,85645,85648,85651,85742,85747,85750,85753,85756,85759,85764,85769,85772,85777,85782,85787,85791,85794,85797,85802,85807,85812,85817,85871,85874,85877,85882,85885,85888,85893,85898,85903,85907,85912,85926,85931,85934,85939,85943,85948,85953,85958,85963,85968,85973,85978,85983,85986,85990,85995,85998,86001,86004,86009,86014,86017,86020,86024,86027,86030,86035,86040,86045,86050,86053,86058,86063,86124,86129,86132,86137,87378,87383,87387,87391,87396,87399,87404,87409,87412,87417,87419,87424,87428,87431,87434,87445,87449,87454,87459,87514,87519,87524,87529,87740,87745,87749,87754,87757,87759,87762,87765,88212,88217,88224,88230,88233,88236,88500,88505,88509,88774,88779,88783,88788,88793,88798,88803,89134,89137,89142,89147,89150,89154,89158,89163,89168,89173,89178,89183,89188,89192,89195,89200,89205,89208,89282,89287,89292,89297,89299,89302,89672,89677,89682,89687,89690,89693,89795,89800,89805,89908,89912,89917,89921,89925,89930,89935,89938,89943,89946,89949,90342,90347,90350,90353,90356,90359,90879,90883,90888,90893,90898,90901,90906,90909,90912,91294,91299,91301,91303,91306,91309,91821,91825,91886,91889,91892,91895,91899,91902,91907,91912,92837],[10,76770,76766],{"id":76771},"_4js进阶",[19,76773,76774],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76776,76778],{"id":76777},"_41-作用域","4.1 作用域",[49,76780,76782],{"id":76781},"_411-局部作用域","4.1.1 局部作用域",[19,76784,76785],{},[23,76786],{"alt":125,"src":76787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76789,76790],{},[23,76791],{"alt":125,"src":76792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[68,76794,76795,76798,76801],{},[71,76796,76797],{},"函数作用域在函数内部",[71,76799,76800],{},"块级作用域在{}",[71,76802,76803],{},"对象的那个{}不是作用域，不是块作用域",[49,76805,76807],{"id":76806},"_412-全局作用域","4.1.2 全局作用域",[19,76809,76810],{},[23,76811],{"alt":125,"src":76812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76814,76815],{},"window.a=10不要这样写",[49,76817,76819],{"id":76818},"_413-作用域链","4.1.3 作用域链",[19,76821,76822],{},"变量查找机制",[19,76824,76825],{},[23,76826],{"alt":125,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76829,76831],{"id":76830},"_42-垃圾回收机制","4.2 垃圾回收机制",[49,76833,76835],{"id":76834},"_421-大体介绍","4.2.1 大体介绍",[19,76837,76838],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76840,76841],{},[23,76842],{"alt":125,"src":76843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76845,76846],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[49,76848,76850],{"id":76849},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76852,76853],{},"堆栈空间分配区别：",[161,76855,76856,76859],{},[71,76857,76858],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[71,76860,76861],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76863,76864],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22085,76866,76868],{"id":76867},"_4221-引用计数","4.2.2.1 引用计数",[19,76870,76871],{},[23,76872],{"alt":125,"src":76873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76875,76876],{},[23,76877],{"alt":125,"src":76878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76880,76881],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22085,76883,76885],{"id":76884},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76887,76888],{},[23,76889],{"alt":125,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76892,76893],{},[23,76894],{"alt":125,"src":76895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76897,76898],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76900,76902],{"id":76901},"_43-闭包","4.3 闭包",[19,76904,76905],{},[23,76906],{"alt":125,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76909,76910],{},"闭包：内层函数+外层函数的变量",[19,76912,76913],{},[23,76914],{"alt":125,"src":76915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76917,76918],{},"closure就是闭包",[19,76920,76921],{},[23,76922],{"alt":125,"src":76923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76925,76926],{},"内层函数必须包含外层函数的变量才是闭包",[19,76928,76929],{},[23,76930],{"alt":125,"src":76931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76933,76934],{},[23,76935],{"alt":125,"src":76936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76938,76939],{},"闭包可能会引起内存泄漏",[19,76941,76942],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,76944,76946],{"id":76945},"_44-变量提升","4.4 变量提升",[19,76948,76949],{},[23,76950],{"alt":125,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,76953,76954],{},[23,76955],{"alt":125,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,76958,76959],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,76961,76963],{"id":76962},"_45-函数进阶","4.5 函数进阶",[49,76965,76967],{"id":76966},"_451-函数提升","4.5.1 函数提升",[19,76969,76970],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,76972,76973],{},"只提升函数声明，不提升函数调用",[51899,76975,76976],{},"\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",[49,76978,76980],{"id":76979},"_452-函数参数","4.5.2 函数参数",[22085,76982,76984],{"id":76983},"_4521-动态参数","4.5.2.1 动态参数",[19,76986,76987],{},[23,76988],{"alt":125,"src":76989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,76991,76992],{},[23,76993],{"alt":125,"src":76994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,76996,76997],{},"箭头函数里边没有arguments",[22085,76999,77001],{"id":77000},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77003,77004],{},[23,77005],{"alt":125,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77008,77009],{},[23,77010],{"alt":125,"src":77011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77013,77014],{},"剩余参数使用的时候不需要写...",[19,77016,77017],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77019,77020],{},"  function getSum(a,b,...arr) {",[19,77022,77023],{},"  console.log(11)",[19,77025,77026],{},"  }",[19,77028,77029],{},"  getSum(1,2,3,4)",[19,77031,77032],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77034,77035],{},"  getSum(1,2)",[19,77037,77038],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77040,77041],{},[23,77042],{"alt":125,"src":77043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22085,77045,77047],{"id":77046},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77049,77050],{},[23,77051],{"alt":125,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77054,77055],{},[23,77056],{"alt":125,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77059,77060],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77062,77063],{},"展开运算符可以用于数组之间的合并：",[19,77065,77066],{},"const arr1 = [1, 2, 3]",[19,77068,77069],{},"const arr2 = [3, 4, 5]",[19,77071,77072],{},"const arr = [...arr1, ...arr2]",[19,77074,77075],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77077,77078],{},"剩余参数：函数参数使用，得到真数组",[19,77080,77081],{},"展开运算符：数组中使用，数组展开",[49,77083,77085],{"id":77084},"_453-箭头函数","4.5.3 箭头函数",[22085,77087,77089],{"id":77088},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77091,77092],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77094,77095],{},"它不是万能的！！！",[19,77097,77098],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77100,77101],{},[23,77102],{"alt":125,"src":77103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77105,244],{},[19,77107,77108],{},"① 只有一个形参的时候，可以省略小括号：",[19,77110,77111],{},"const fn=x=>{console.log(x)}",[19,77113,77114],{},"② 只有一行代码时可以省略大括号：",[19,77116,77117],{},"const fn=x=>console.log(11)",[19,77119,77120],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77122,77123],{},"const fn=x=>x+x",[19,77125,77126],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77128,77129],{},"⑤ 阻止表单默认提交：",[19,77131,77132],{},"const form = document.querySelector('form')",[19,77134,77135],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77137,77138],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77140,77141],{},"const fn=uname=>({uname:uname})",[19,77143,77144],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77146,77147],{},[23,77148],{"alt":125,"src":77149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77151,77152],{},[23,77153],{"alt":125,"src":77154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77156,77157],{},[23,77158],{"alt":125,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77161,77162],{},"一定不要忘记用()，有()就理解为自带return",[22085,77164,77166],{"id":77165},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77168,77169],{},"箭头函数是没有动态参数的arguments",[19,77171,77172],{},[23,77173],{"alt":125,"src":77174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22085,77176,77178],{"id":77177},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77180,11419],{},[161,77182,77183,77186,77189],{},[71,77184,77185],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[71,77187,77188],{},"事件回调函数使用箭头函数时，this 为全局的 window",[71,77190,77191],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77193,77194],{},[23,77195],{"alt":125,"src":77196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[196,77198,77200],{"className":53153,"code":77199,"language":53155,"meta":125,"style":125},"  \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",[81,77201,77202,77210,77215,77220,77225,77230,77235,77239,77244,77248,77252,77257,77262,77267,77271,77275,77280,77285,77290],{"__ignoreMap":125},[204,77203,77204,77206,77208],{"class":206,"line":207},[204,77205,52230],{"class":214},[204,77207,51899],{"class":51386},[204,77209,51393],{"class":214},[204,77211,77212],{"class":206,"line":126},[204,77213,77214],{"class":214},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[204,77216,77217],{"class":206,"line":131},[204,77218,77219],{"class":214},"    console.log(this) \u002F\u002F指向window\n",[204,77221,77222],{"class":206,"line":1281},[204,77223,77224],{"class":214},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[204,77226,77227],{"class":206,"line":1287},[204,77228,77229],{"class":214},"    function fn() {\n",[204,77231,77232],{"class":206,"line":1301},[204,77233,77234],{"class":214},"      console.log(this)  \u002F\u002F指向window\n",[204,77236,77237],{"class":206,"line":1307},[204,77238,2273],{"class":214},[204,77240,77241],{"class":206,"line":1398},[204,77242,77243],{"class":214},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[204,77245,77246],{"class":206,"line":1404},[204,77247,2486],{"emptyLinePlaceholder":135},[204,77249,77250],{"class":206,"line":1416},[204,77251,71609],{"class":214},[204,77253,77254],{"class":206,"line":1698},[204,77255,77256],{"class":214},"      name: 'andy',\n",[204,77258,77259],{"class":206,"line":1703},[204,77260,77261],{"class":214},"      sayHai: function () {\n",[204,77263,77264],{"class":206,"line":1709},[204,77265,77266],{"class":214},"        console.log(this)\n",[204,77268,77269],{"class":206,"line":1714},[204,77270,52484],{"class":214},[204,77272,77273],{"class":206,"line":1728},[204,77274,2273],{"class":214},[204,77276,77277],{"class":206,"line":1733},[204,77278,77279],{"class":214},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[204,77281,77282],{"class":206,"line":1739},[204,77283,77284],{"class":214},"    \u002F\u002F 2.箭头函数的this\n",[204,77286,77287],{"class":206,"line":1760},[204,77288,77289],{"class":214},"    const fn = () => console.log(this)\n",[204,77291,77292,77294,77296],{"class":206,"line":1765},[204,77293,52503],{"class":214},[204,77295,51899],{"class":51386},[204,77297,51393],{"class":214},[19,77299,77300],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77302,77303],{},"const fn = () => console.log(this)",[19,77305,77306],{},"fn() \u002F\u002F指向window",[19,77308,77309],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77311,77312],{},"①",[19,77314,77315],{},"const obj = {",[19,77317,77318],{},"uname: 'pink老师',",[19,77320,77321],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77323,1159],{},[19,77325,77326],{},"调用对象里边的函数",[19,77328,77329],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77331,77332],{},"obj.sayHai()",[19,77334,77335],{},"②",[19,77337,77338],{},"const obj1 = {",[19,77340,77318],{},[19,77342,77343],{},"sayHai: function () {",[19,77345,77346],{},"let i = 10",[19,77348,77349],{},"const count = () => {",[19,77351,77352],{},"console.log(this)",[19,77354,77355],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77357,77358],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77360,1159],{},[19,77362,77363],{},"count()",[19,77365,1159],{},[19,77367,1159],{},[19,77369,77370],{},"obj1.sayHai()",[14,77372,77374],{"id":77373},"_46-解构赋值","4.6 解构赋值",[49,77376,77378],{"id":77377},"_461-数组解构","4.6.1 数组解构",[19,77380,77381],{},"以前要是使用数组中的值的话：",[19,77383,77384],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77386,77387],{},"const arr=[100,60,80]",[19,77389,77390],{},"const max=arr[0]",[19,77392,77393],{},"const min=arr[1]",[19,77395,77396],{},"const avg=arr[2]",[19,77398,77399],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77401,77402],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77404,77405],{},"这个写法就类似于上边的那种用很多const的方法",[19,77407,77408],{},[23,77409],{"alt":125,"src":77410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[196,77412,77414],{"className":50719,"code":77413,"language":50721,"meta":125,"style":125},"①变量之间交换值:\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",[81,77415,77416,77421,77426,77431,77436,77441,77445,77449,77454,77458,77463,77468,77472,77477,77482,77493,77503,77508,77513,77518,77522,77526],{"__ignoreMap":125},[204,77417,77418],{"class":206,"line":207},[204,77419,77420],{"class":214},"①变量之间交换值:\n",[204,77422,77423],{"class":206,"line":126},[204,77424,77425],{"class":214},"let a=1\n",[204,77427,77428],{"class":206,"line":131},[204,77429,77430],{"class":214},"let b=2;\n",[204,77432,77433],{"class":206,"line":1281},[204,77434,77435],{"class":214},"必须加这行代码，不然就会报错\n",[204,77437,77438],{"class":206,"line":1287},[204,77439,77440],{"class":214},"[b,a]=[a,b]\n",[204,77442,77443],{"class":206,"line":1301},[204,77444,2486],{"emptyLinePlaceholder":135},[204,77446,77447],{"class":206,"line":1307},[204,77448,2486],{"emptyLinePlaceholder":135},[204,77450,77451],{"class":206,"line":1398},[204,77452,77453],{"class":214},"可以写成下面的方式：\n",[204,77455,77456],{"class":206,"line":1404},[204,77457,77425],{"class":214},[204,77459,77460],{"class":206,"line":1416},[204,77461,77462],{"class":214},"let b=2\n",[204,77464,77465],{"class":206,"line":1698},[204,77466,77467],{"class":214},";[b,a]=[a,b]\n",[204,77469,77470],{"class":206,"line":1703},[204,77471,2486],{"emptyLinePlaceholder":135},[204,77473,77474],{"class":206,"line":1709},[204,77475,77476],{"class":214},"②排序\n",[204,77478,77479],{"class":206,"line":1714},[204,77480,77481],{"class":214},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[204,77483,77484,77487,77490],{"class":206,"line":1728},[204,77485,77486],{"class":214},"for (let i = 0; i ",[204,77488,1123],{"class":77489},"s7hpK",[204,77491,77492],{"class":214}," arr1.length; i++) {\n",[204,77494,77495,77498,77500],{"class":206,"line":1733},[204,77496,77497],{"class":214},"   for (let j = 0; j ",[204,77499,1123],{"class":77489},[204,77501,77502],{"class":214}," arr1.length - 1; j++) {\n",[204,77504,77505],{"class":206,"line":1739},[204,77506,77507],{"class":214},"      if (arr1[j] > arr1[j + 1]) {\n",[204,77509,77510],{"class":206,"line":1760},[204,77511,77512],{"class":214},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[204,77514,77515],{"class":206,"line":1765},[204,77516,77517],{"class":214},"       }\n",[204,77519,77520],{"class":206,"line":1779},[204,77521,4395],{"class":214},[204,77523,77524],{"class":206,"line":1784},[204,77525,1651],{"class":214},[204,77527,77528],{"class":206,"line":1813},[204,77529,77530],{"class":214},"console.log(arr1)\n",[19,77532,77533],{},"数组解构的细节：",[19,77535,77536],{},"①变量多，单元值少",[19,77538,77539],{},[23,77540],{"alt":125,"src":77541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77543,77544],{},"防止出现undefined的方法：",[19,77546,77547],{},"const [a=0,b=0] =[1]",[19,77549,77550],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77552,77553],{},"②变量少，单元值多",[19,77555,77556],{},[23,77557],{"alt":125,"src":77558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77560,77561],{},"此时可以使用剩余参数来接收多余的值",[19,77563,77564],{},"const [a,b,...c]=[1,2,3,4]",[19,77566,77567],{},"console.log(c) 输出[3,4]",[19,77569,77570],{},"③可以按需导入，忽略某些返回值",[19,77572,77573],{},[23,77574],{"alt":125,"src":77575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77577,77578],{},"④支持多维数组的结构",[196,77580,77584],{"className":77581,"code":77582,"language":77583,"meta":125,"style":125},"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",[81,77585,77586,77614,77630,77645,77660],{"__ignoreMap":125},[204,77587,77588,77590,77592,77594,77596,77598,77600,77602,77605,77607,77609,77611],{"class":206,"line":207},[204,77589,6879],{"class":210},[204,77591,51919],{"class":214},[204,77593,260],{"class":210},[204,77595,52312],{"class":214},[204,77597,431],{"class":263},[204,77599,12522],{"class":214},[204,77601,292],{"class":263},[204,77603,77604],{"class":214},", [",[204,77606,286],{"class":263},[204,77608,12522],{"class":214},[204,77610,506],{"class":263},[204,77612,77613],{"class":214},"]]\n",[204,77615,77616,77619,77621,77623,77625,77627],{"class":206,"line":126},[204,77617,77618],{"class":214},"console.",[204,77620,58333],{"class":2049},[204,77622,3937],{"class":214},[204,77624,405],{"class":263},[204,77626,4302],{"class":214},[204,77628,77629],{"class":273},"  \u002F\u002F1\n",[204,77631,77632,77634,77636,77638,77640,77642],{"class":206,"line":131},[204,77633,77618],{"class":214},[204,77635,58333],{"class":2049},[204,77637,3937],{"class":214},[204,77639,431],{"class":263},[204,77641,4302],{"class":214},[204,77643,77644],{"class":273},"  \u002F\u002F2\n",[204,77646,77647,77649,77651,77653,77655,77657],{"class":206,"line":1281},[204,77648,77618],{"class":214},[204,77650,58333],{"class":2049},[204,77652,3937],{"class":214},[204,77654,292],{"class":263},[204,77656,4302],{"class":214},[204,77658,77659],{"class":273},"  \u002F\u002F[3,4]\n",[204,77661,77662,77664,77666,77668,77670,77672,77674,77676],{"class":206,"line":1287},[204,77663,77618],{"class":214},[204,77665,58333],{"class":2049},[204,77667,3937],{"class":214},[204,77669,292],{"class":263},[204,77671,4987],{"class":214},[204,77673,405],{"class":263},[204,77675,4302],{"class":214},[204,77677,77678],{"class":273},"  \u002F\u002F3\n",[196,77680,77682],{"className":77581,"code":77681,"language":77583,"meta":125,"style":125},"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",[81,77683,77684,77711,77722,77733],{"__ignoreMap":125},[204,77685,77686,77688,77691,77693,77695,77697,77699,77701,77703,77705,77707,77709],{"class":206,"line":207},[204,77687,6879],{"class":210},[204,77689,77690],{"class":214}," [a, b, c] ",[204,77692,260],{"class":210},[204,77694,52312],{"class":214},[204,77696,431],{"class":263},[204,77698,12522],{"class":214},[204,77700,292],{"class":263},[204,77702,77604],{"class":214},[204,77704,286],{"class":263},[204,77706,12522],{"class":214},[204,77708,506],{"class":263},[204,77710,77613],{"class":214},[204,77712,77713,77715,77717,77720],{"class":206,"line":126},[204,77714,77618],{"class":214},[204,77716,58333],{"class":2049},[204,77718,77719],{"class":214},"(a)",[204,77721,77629],{"class":273},[204,77723,77724,77726,77728,77731],{"class":206,"line":131},[204,77725,77618],{"class":214},[204,77727,58333],{"class":2049},[204,77729,77730],{"class":214},"(b)",[204,77732,77644],{"class":273},[204,77734,77735,77737,77739,77742],{"class":206,"line":1281},[204,77736,77618],{"class":214},[204,77738,58333],{"class":2049},[204,77740,77741],{"class":214},"(c)",[204,77743,77659],{"class":273},[196,77745,77747],{"className":77581,"code":77746,"language":77583,"meta":125,"style":125},"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",[81,77748,77749,77776,77786,77796,77806],{"__ignoreMap":125},[204,77750,77751,77753,77756,77758,77760,77762,77764,77766,77768,77770,77772,77774],{"class":206,"line":207},[204,77752,6879],{"class":210},[204,77754,77755],{"class":214}," [a, b, [c, d]] ",[204,77757,260],{"class":210},[204,77759,52312],{"class":214},[204,77761,431],{"class":263},[204,77763,12522],{"class":214},[204,77765,292],{"class":263},[204,77767,77604],{"class":214},[204,77769,286],{"class":263},[204,77771,12522],{"class":214},[204,77773,506],{"class":263},[204,77775,77613],{"class":214},[204,77777,77778,77780,77782,77784],{"class":206,"line":126},[204,77779,77618],{"class":214},[204,77781,58333],{"class":2049},[204,77783,77719],{"class":214},[204,77785,77629],{"class":273},[204,77787,77788,77790,77792,77794],{"class":206,"line":131},[204,77789,77618],{"class":214},[204,77791,58333],{"class":2049},[204,77793,77730],{"class":214},[204,77795,77644],{"class":273},[204,77797,77798,77800,77802,77804],{"class":206,"line":1281},[204,77799,77618],{"class":214},[204,77801,58333],{"class":2049},[204,77803,77741],{"class":214},[204,77805,77678],{"class":273},[204,77807,77808,77810,77812,77815],{"class":206,"line":1287},[204,77809,77618],{"class":214},[204,77811,58333],{"class":2049},[204,77813,77814],{"class":214},"(d)",[204,77816,77817],{"class":273},"  \u002F\u002F4\n",[49,77819,77821],{"id":77820},"_462-对象解构","4.6.2 对象解构",[19,77823,77824],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77826,77827],{},"用的非常非常多！！！！！！",[22085,77829,77831],{"id":77830},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77833,77834],{},"基本语法：",[161,77836,77837,77840,77843,77846],{},[71,77838,77839],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[71,77841,77842],{},"对象属性的值将被赋值给与属性名相同的变量",[71,77844,77845],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[71,77847,77848],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[196,77850,77852],{"className":50719,"code":77851,"language":50721,"meta":125,"style":125},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[81,77853,77854,77859,77864,77869,77873],{"__ignoreMap":125},[204,77855,77856],{"class":206,"line":207},[204,77857,77858],{"class":214},"const obj = {\n",[204,77860,77861],{"class":206,"line":126},[204,77862,77863],{"class":214},"   uname: 'pink老师',\n",[204,77865,77866],{"class":206,"line":131},[204,77867,77868],{"class":214},"   age: 18,\n",[204,77870,77871],{"class":206,"line":1281},[204,77872,1651],{"class":214},[204,77874,77875],{"class":206,"line":1287},[204,77876,77877],{"class":214},"const { uname, age } = obj\n",[19,77879,77880],{},"上方代码这样写等价于：",[19,77882,77883],{},"const uname等价于obj.uname",[19,77885,77886],{},"变量名可以重新改名：",[19,77888,77889],{},"const uname='red老师'",[19,77891,77892],{},"const user={",[19,77894,77895],{},"  uname:'pink老师',",[19,77897,77898],{},"  age:18",[19,77900,1159],{},[19,77902,77903],{},"const {uname,age}=user",[19,77905,77906],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77908,77909],{},"const {旧变量名：新变量名}=对象",[19,77911,77912],{},"const {uname:username,age}=user",[22085,77914,77916],{"id":77915},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77918,77919],{},[23,77920],{"alt":125,"src":77921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22085,77923,77925],{"id":77924},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77927,77928],{},[23,77929],{"alt":125,"src":77930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[196,77932,77934],{"className":53153,"code":77933,"language":53155,"meta":125,"style":125},"  \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",[81,77935,77936,77944,77949,77954,77959,77964,77969,77974,77979,77984,77988,77993,77998],{"__ignoreMap":125},[204,77937,77938,77940,77942],{"class":206,"line":207},[204,77939,52230],{"class":214},[204,77941,51899],{"class":51386},[204,77943,51393],{"class":214},[204,77945,77946],{"class":206,"line":126},[204,77947,77948],{"class":214},"    const pig = {\n",[204,77950,77951],{"class":206,"line":131},[204,77952,77953],{"class":214},"      name: '佩奇',\n",[204,77955,77956],{"class":206,"line":1281},[204,77957,77958],{"class":214},"      family: {\n",[204,77960,77961],{"class":206,"line":1287},[204,77962,77963],{"class":214},"        mother: '猪妈妈',\n",[204,77965,77966],{"class":206,"line":1301},[204,77967,77968],{"class":214},"        father: '猪爸爸',\n",[204,77970,77971],{"class":206,"line":1307},[204,77972,77973],{"class":214},"        sister: '乔治'\n",[204,77975,77976],{"class":206,"line":1398},[204,77977,77978],{"class":214},"      },\n",[204,77980,77981],{"class":206,"line":1404},[204,77982,77983],{"class":214},"      age: 6\n",[204,77985,77986],{"class":206,"line":1416},[204,77987,2273],{"class":214},[204,77989,77990],{"class":206,"line":1698},[204,77991,77992],{"class":214},"    \u002F\u002F 多级对象解构\n",[204,77994,77995],{"class":206,"line":1703},[204,77996,77997],{"class":214},"    const { name, family: { mother, father, sister }, age } = pig\n",[204,77999,78000,78002,78004],{"class":206,"line":1709},[204,78001,52503],{"class":214},[204,78003,51899],{"class":51386},[204,78005,51393],{"class":214},[19,78007,78008],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[196,78010,78013],{"className":78011,"code":78012,"language":76533,"meta":125,"style":125},"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",[81,78014,78015,78020,78031,78043,78055,78064,78068,78079,78091,78101,78106,78110,78120,78131,78140,78144,78148,78159,78170,78179,78183,78188],{"__ignoreMap":125},[204,78016,78017],{"class":206,"line":207},[204,78018,78019],{"class":273},"    \u002F\u002F 这是后台传递过来的数据\n",[204,78021,78022,78024,78027,78029],{"class":206,"line":126},[204,78023,11308],{"class":210},[204,78025,78026],{"class":214}," msg ",[204,78028,260],{"class":210},[204,78030,15659],{"class":214},[204,78032,78033,78036,78038,78041],{"class":206,"line":131},[204,78034,78035],{"class":319},"      \"code\"",[204,78037,1072],{"class":210},[204,78039,78040],{"class":263}," 200",[204,78042,31552],{"class":214},[204,78044,78045,78048,78050,78053],{"class":206,"line":1281},[204,78046,78047],{"class":319},"      \"msg\"",[204,78049,1072],{"class":210},[204,78051,78052],{"class":319}," \"获取新闻列表成功\"",[204,78054,31552],{"class":214},[204,78056,78057,78060,78062],{"class":206,"line":1287},[204,78058,78059],{"class":319},"      \"data\"",[204,78061,1072],{"class":210},[204,78063,55533],{"class":214},[204,78065,78066],{"class":206,"line":1301},[204,78067,2596],{"class":214},[204,78069,78070,78073,78075,78077],{"class":206,"line":1307},[204,78071,78072],{"class":319},"          \"id\"",[204,78074,1072],{"class":210},[204,78076,25205],{"class":263},[204,78078,31552],{"class":214},[204,78080,78081,78084,78086,78089],{"class":206,"line":1398},[204,78082,78083],{"class":319},"          \"title\"",[204,78085,1072],{"class":210},[204,78087,78088],{"class":319}," \"5G商用自己，三大运用商收入下降\"",[204,78090,31552],{"class":214},[204,78092,78093,78096,78098],{"class":206,"line":1404},[204,78094,78095],{"class":319},"          \"count\"",[204,78097,1072],{"class":210},[204,78099,78100],{"class":263}," 58\n",[204,78102,78103],{"class":206,"line":1416},[204,78104,78105],{"class":214},"        },\n",[204,78107,78108],{"class":206,"line":1698},[204,78109,2596],{"class":214},[204,78111,78112,78114,78116,78118],{"class":206,"line":1703},[204,78113,78072],{"class":319},[204,78115,1072],{"class":210},[204,78117,14842],{"class":263},[204,78119,31552],{"class":214},[204,78121,78122,78124,78126,78129],{"class":206,"line":1709},[204,78123,78083],{"class":319},[204,78125,1072],{"class":210},[204,78127,78128],{"class":319}," \"国际媒体头条速览\"",[204,78130,31552],{"class":214},[204,78132,78133,78135,78137],{"class":206,"line":1714},[204,78134,78095],{"class":319},[204,78136,1072],{"class":210},[204,78138,78139],{"class":263}," 56\n",[204,78141,78142],{"class":206,"line":1728},[204,78143,78105],{"class":214},[204,78145,78146],{"class":206,"line":1733},[204,78147,2596],{"class":214},[204,78149,78150,78152,78154,78157],{"class":206,"line":1739},[204,78151,78072],{"class":319},[204,78153,1072],{"class":210},[204,78155,78156],{"class":263}," 3",[204,78158,31552],{"class":214},[204,78160,78161,78163,78165,78168],{"class":206,"line":1760},[204,78162,78083],{"class":319},[204,78164,1072],{"class":210},[204,78166,78167],{"class":319}," \"乌克兰和俄罗斯持续冲突\"",[204,78169,31552],{"class":214},[204,78171,78172,78174,78176],{"class":206,"line":1765},[204,78173,78095],{"class":319},[204,78175,1072],{"class":210},[204,78177,78178],{"class":263}," 1669\n",[204,78180,78181],{"class":206,"line":1779},[204,78182,78105],{"class":214},[204,78184,78185],{"class":206,"line":1784},[204,78186,78187],{"class":214},"      ]\n",[204,78189,78190],{"class":206,"line":1813},[204,78191,2273],{"class":214},[19,78193,78194],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78196,78197],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78199,78200],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78202,78203],{},"function({data}) {",[19,78205,78206],{},"console.log(data)",[19,78208,1159],{},[19,78210,78211],{},"render(msg)",[19,78213,78214],{},"实参传递给形参的时候解构了",[19,78216,78217],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78219,78220],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78222,78223],{},"function render({data:mydata}) {",[19,78225,78226],{},"  console.log(data)",[19,78228,1159],{},[49,78230,78232],{"id":78231},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78234,78235],{},"有两种情况：一个是数组结构，一个是立即执行函数",[161,78237,78238],{},[71,78239,78240],{},"如果对一个数组进行遍历，有两种方式：",[19,78242,78243],{},"①法1",[19,78245,78246],{},"const arr=[1,2,3]",[19,78248,78249],{},"arr.map(function(item,index) {",[19,78251,78252],{},"  console.log(item)",[19,78254,52550],{},[19,78256,78257],{},[23,78258],{"alt":125,"src":78259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78261,78262],{},"②法2",[19,78264,78265],{},"const str='pink'",[19,78267,78268],{},"[1,2,3].map(function(item,index) {",[19,78270,78271],{},"console.log(item)",[19,78273,52550],{},[19,78275,78276],{},[23,78277],{"alt":125,"src":78278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78280,78281],{},"此时会报错",[19,78283,78284],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78286,78271],{},[19,78288,52550],{},[19,78290,78291],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78293,78295],{"id":78294},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78297,78298],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78300,78301],{},"可以理解为加强版的for循环",[19,78303,78304],{},[23,78305],{"alt":125,"src":78306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78308,78309],{},"里边不写return，不返回数组，只遍历不返回",[19,78311,78312],{},"map是返回数组",[19,78314,78315],{},"forEach主要用于遍历数组对象",[196,78317,78319],{"className":53153,"code":78318,"language":53155,"meta":125,"style":125},"  \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",[81,78320,78321,78329,78334,78339,78344,78349,78353,78358],{"__ignoreMap":125},[204,78322,78323,78325,78327],{"class":206,"line":207},[204,78324,52230],{"class":214},[204,78326,51899],{"class":51386},[204,78328,51393],{"class":214},[204,78330,78331],{"class":206,"line":126},[204,78332,78333],{"class":214},"    const arr = ['red', 'green', 'pink']\n",[204,78335,78336],{"class":206,"line":131},[204,78337,78338],{"class":214},"    const result = arr.forEach(function (item, index) {\n",[204,78340,78341],{"class":206,"line":1281},[204,78342,78343],{"class":214},"      console.log(item)\n",[204,78345,78346],{"class":206,"line":1287},[204,78347,78348],{"class":214},"      console.log(index)\n",[204,78350,78351],{"class":206,"line":1301},[204,78352,33547],{"class":214},[204,78354,78355],{"class":206,"line":1307},[204,78356,78357],{"class":214},"    console.log(result)\n",[204,78359,78360,78362,78364],{"class":206,"line":1398},[204,78361,52503],{"class":214},[204,78363,51899],{"class":51386},[204,78365,51393],{"class":214},[19,78367,78368],{},[23,78369],{"alt":125,"src":78370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78372,78374],{"id":78373},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78376,78377],{},[23,78378],{"alt":125,"src":78379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78381,78382],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[196,78384,78386],{"className":53153,"code":78385,"language":53155,"meta":125,"style":125},"\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",[81,78387,78388,78396,78404,78409,78414,78418,78422,78427,78431,78436,78444],{"__ignoreMap":125},[204,78389,78390,78392,78394],{"class":206,"line":207},[204,78391,1123],{"class":214},[204,78393,51886],{"class":51386},[204,78395,51393],{"class":214},[204,78397,78398,78400,78402],{"class":206,"line":126},[204,78399,52230],{"class":214},[204,78401,51899],{"class":51386},[204,78403,51393],{"class":214},[204,78405,78406],{"class":206,"line":131},[204,78407,78408],{"class":214},"    const arr = [10, 20, 30]\n",[204,78410,78411],{"class":206,"line":1281},[204,78412,78413],{"class":214},"    const newArr = arr.filter(function (item, index) {\n",[204,78415,78416],{"class":206,"line":1287},[204,78417,78343],{"class":214},[204,78419,78420],{"class":206,"line":1301},[204,78421,78348],{"class":214},[204,78423,78424],{"class":206,"line":1307},[204,78425,78426],{"class":214},"      return item >= 20\n",[204,78428,78429],{"class":206,"line":1398},[204,78430,33547],{"class":214},[204,78432,78433],{"class":206,"line":1404},[204,78434,78435],{"class":214},"    console.log(newArr)\n",[204,78437,78438,78440,78442],{"class":206,"line":1416},[204,78439,52503],{"class":214},[204,78441,51899],{"class":51386},[204,78443,51393],{"class":214},[204,78445,78446,78448,78450],{"class":206,"line":1698},[204,78447,51871],{"class":214},[204,78449,51886],{"class":51386},[204,78451,51393],{"class":214},[19,78453,78454],{},"这个也可以写成箭头函数：",[196,78456,78458],{"className":50719,"code":78457,"language":50721,"meta":125,"style":125},"const newArr = arr.filter(item => item >= 20)\n",[81,78459,78460],{"__ignoreMap":125},[204,78461,78462],{"class":206,"line":207},[204,78463,78457],{"class":214},[14,78465,78467],{"id":78466},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78469,78470],{},[23,78471],{"alt":125,"src":78472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78474,78475],{},"步骤：",[19,78477,78478],{},"①：渲染页面模块",[68,78480,78481,78484],{},[71,78482,78483],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[71,78485,78486],{},"用forEach+字符串的形式",[19,78488,78489],{},"②：点击不同需求，显示不同页面内容",[68,78491,78492,78495,78498,78501,78504],{},[71,78493,78494],{},"点击采取事件委托方式 .filter",[71,78496,78497],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[71,78499,78500],{},"筛选条件是根据点击的 data-index 来判断",[71,78502,78503],{},"可以使用对象解构，把事件对象解构",[71,78505,78506],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[196,78508,78510],{"className":50719,"code":78509,"language":50721,"meta":125,"style":125},"\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",[81,78511,78512,78522,78536,78540,78548,78562,78582,78594,78602,78608,78618,78628,78638,78642,78646,78652,78665,78677,78687,78699,78703,78707,78714,78727,78739,78756,78774,78787,78791,78795,78807,78817,78821,78825,78832,78873,78900,78910,78914,78918,78926,78938,78942,78946,78954,78966,78978,78989,78993,78997,79006,79018,79029,79033,79037,79046,79058,79070,79074,79078,79085,79095,79107,79119,79134,79138,79142,79150,79166,79176,79186,79196,79208,79212,79216,79226,79237,79247,79251,79259,79267,79271,79279,79294,79320,79345,79370,79389,79397,79411,79416,79421,79426,79431,79436,79444,79452,79457,79468,79473,79483,79493,79503,79513,79517,79521,79530,79539,79548,79557,79561,79565,79574,79583,79592,79601,79605,79609,79618,79627,79636,79645,79649,79653,79662,79671,79680,79689,79693,79697,79706,79715,79724,79733,79737,79741,79750,79759,79768,79777,79781,79785,79794,79803,79811,79820,79824,79828,79832,79837,79849,79854,79866,79870,79887,79915,79924,79929,79939,79949,79958,79963,79968,79972,79977,79994,79998,80003,80011,80016,80043,80048,80068,80073,80085,80090,80095,80100,80111,80125,80162,80180,80213,80230,80254,80258,80263,80269,80273,80277,80281,80289,80297,80301],{"__ignoreMap":125},[204,78513,78514,78516,78518,78520],{"class":206,"line":207},[204,78515,51383],{"class":214},[204,78517,51387],{"class":51386},[204,78519,51390],{"class":2049},[204,78521,51393],{"class":214},[204,78523,78524,78526,78528,78530,78532,78534],{"class":206,"line":126},[204,78525,1123],{"class":214},[204,78527,50721],{"class":51386},[204,78529,51402],{"class":2049},[204,78531,260],{"class":214},[204,78533,51407],{"class":319},[204,78535,51393],{"class":214},[204,78537,78538],{"class":206,"line":131},[204,78539,2486],{"emptyLinePlaceholder":135},[204,78541,78542,78544,78546],{"class":206,"line":1281},[204,78543,1123],{"class":214},[204,78545,51420],{"class":51386},[204,78547,51393],{"class":214},[204,78549,78550,78552,78554,78556,78558,78560],{"class":206,"line":1287},[204,78551,52230],{"class":214},[204,78553,51430],{"class":51386},[204,78555,51433],{"class":2049},[204,78557,260],{"class":214},[204,78559,51438],{"class":319},[204,78561,51393],{"class":214},[204,78563,78564,78566,78568,78570,78572,78574,78576,78578,78580],{"class":206,"line":1301},[204,78565,52230],{"class":214},[204,78567,51430],{"class":51386},[204,78569,15007],{"class":2049},[204,78571,260],{"class":214},[204,78573,51477],{"class":319},[204,78575,51457],{"class":2049},[204,78577,260],{"class":214},[204,78579,51484],{"class":319},[204,78581,51393],{"class":214},[204,78583,78584,78586,78588,78590,78592],{"class":206,"line":1307},[204,78585,52230],{"class":214},[204,78587,51493],{"class":51386},[204,78589,51496],{"class":214},[204,78591,51493],{"class":51386},[204,78593,51393],{"class":214},[204,78595,78596,78598,78600],{"class":206,"line":1398},[204,78597,52230],{"class":214},[204,78599,5213],{"class":51386},[204,78601,51393],{"class":214},[204,78603,78604,78606],{"class":206,"line":1404},[204,78605,6490],{"class":51386},[204,78607,15659],{"class":214},[204,78609,78610,78612,78614,78616],{"class":206,"line":1416},[204,78611,54781],{"class":263},[204,78613,51523],{"class":214},[204,78615,405],{"class":263},[204,78617,1377],{"class":214},[204,78619,78620,78622,78624,78626],{"class":206,"line":1698},[204,78621,54792],{"class":263},[204,78623,51523],{"class":214},[204,78625,405],{"class":263},[204,78627,1377],{"class":214},[204,78629,78630,78632,78634,78636],{"class":206,"line":1703},[204,78631,72682],{"class":263},[204,78633,51523],{"class":214},[204,78635,60591],{"class":263},[204,78637,1377],{"class":214},[204,78639,78640],{"class":206,"line":1709},[204,78641,2273],{"class":214},[204,78643,78644],{"class":206,"line":1714},[204,78645,2486],{"emptyLinePlaceholder":135},[204,78647,78648,78650],{"class":206,"line":1728},[204,78649,62209],{"class":2049},[204,78651,15659],{"class":214},[204,78653,78654,78656,78658,78661,78663],{"class":206,"line":1733},[204,78655,54857],{"class":263},[204,78657,51523],{"class":214},[204,78659,78660],{"class":263},"990",[204,78662,51578],{"class":210},[204,78664,1377],{"class":214},[204,78666,78667,78669,78671,78673,78675],{"class":206,"line":1739},[204,78668,54792],{"class":263},[204,78670,51523],{"class":214},[204,78672,405],{"class":263},[204,78674,51642],{"class":263},[204,78676,1377],{"class":214},[204,78678,78679,78681,78683,78685],{"class":206,"line":1760},[204,78680,55095],{"class":263},[204,78682,51523],{"class":214},[204,78684,51563],{"class":263},[204,78686,1377],{"class":214},[204,78688,78689,78692,78694,78697],{"class":206,"line":1765},[204,78690,78691],{"class":263},"      flex-wrap",[204,78693,51523],{"class":214},[204,78695,78696],{"class":263},"wrap",[204,78698,1377],{"class":214},[204,78700,78701],{"class":206,"line":1779},[204,78702,2273],{"class":214},[204,78704,78705],{"class":206,"line":1784},[204,78706,2486],{"emptyLinePlaceholder":135},[204,78708,78709,78712],{"class":206,"line":1813},[204,78710,78711],{"class":2049},"    .item",[204,78713,15659],{"class":214},[204,78715,78716,78718,78720,78723,78725],{"class":206,"line":1818},[204,78717,54857],{"class":263},[204,78719,51523],{"class":214},[204,78721,78722],{"class":263},"240",[204,78724,51578],{"class":210},[204,78726,1377],{"class":214},[204,78728,78729,78731,78733,78735,78737],{"class":206,"line":1835},[204,78730,62086],{"class":263},[204,78732,51523],{"class":214},[204,78734,659],{"class":263},[204,78736,51578],{"class":210},[204,78738,1377],{"class":214},[204,78740,78741,78743,78745,78747,78749,78752,78754],{"class":206,"line":1840},[204,78742,54781],{"class":263},[204,78744,51523],{"class":214},[204,78746,913],{"class":263},[204,78748,51578],{"class":210},[204,78750,78751],{"class":263}," 30",[204,78753,51578],{"class":210},[204,78755,1377],{"class":214},[204,78757,78758,78760,78762,78764,78767,78770,78772],{"class":206,"line":1845},[204,78759,61946],{"class":263},[204,78761,51523],{"class":214},[204,78763,28207],{"class":263},[204,78765,78766],{"class":263}," ease",[204,78768,78769],{"class":263}," .5",[204,78771,908],{"class":210},[204,78773,1377],{"class":214},[204,78775,78776,78779,78781,78783,78785],{"class":206,"line":1850},[204,78777,78778],{"class":263},"      margin-bottom",[204,78780,51523],{"class":214},[204,78782,913],{"class":263},[204,78784,51578],{"class":210},[204,78786,1377],{"class":214},[204,78788,78789],{"class":206,"line":1864},[204,78790,2273],{"class":214},[204,78792,78793],{"class":206,"line":1869},[204,78794,2486],{"emptyLinePlaceholder":135},[204,78796,78797,78800,78802,78805],{"class":206,"line":2663},[204,78798,78799],{"class":2049},"    .item:nth-child",[204,78801,215],{"class":214},[204,78803,78804],{"class":263},"4n",[204,78806,12529],{"class":214},[204,78808,78809,78811,78813,78815],{"class":206,"line":2677},[204,78810,62086],{"class":263},[204,78812,51523],{"class":214},[204,78814,405],{"class":263},[204,78816,1377],{"class":214},[204,78818,78819],{"class":206,"line":2685},[204,78820,2273],{"class":214},[204,78822,78823],{"class":206,"line":2690},[204,78824,2486],{"emptyLinePlaceholder":135},[204,78826,78827,78830],{"class":206,"line":2696},[204,78828,78829],{"class":2049},"    .item:hover",[204,78831,15659],{"class":214},[204,78833,78834,78837,78839,78841,78843,78845,78847,78849,78851,78854,78856,78858,78860,78862,78864,78866,78868,78871],{"class":206,"line":2702},[204,78835,78836],{"class":263},"      box-shadow",[204,78838,51523],{"class":214},[204,78840,405],{"class":263},[204,78842,51578],{"class":210},[204,78844,4179],{"class":263},[204,78846,51578],{"class":210},[204,78848,2234],{"class":263},[204,78850,51578],{"class":210},[204,78852,78853],{"class":263}," rgba",[204,78855,215],{"class":214},[204,78857,405],{"class":263},[204,78859,12522],{"class":214},[204,78861,405],{"class":263},[204,78863,12522],{"class":214},[204,78865,405],{"class":263},[204,78867,12522],{"class":214},[204,78869,78870],{"class":263},".2",[204,78872,2805],{"class":214},[204,78874,78875,78878,78880,78883,78885,78887,78889,78892,78894,78896,78898],{"class":206,"line":2707},[204,78876,78877],{"class":263},"      transform",[204,78879,51523],{"class":214},[204,78881,78882],{"class":263},"translate3d",[204,78884,215],{"class":214},[204,78886,405],{"class":263},[204,78888,12522],{"class":214},[204,78890,78891],{"class":263},"-4",[204,78893,51578],{"class":210},[204,78895,12522],{"class":214},[204,78897,405],{"class":263},[204,78899,2805],{"class":214},[204,78901,78902,78904,78906,78908],{"class":206,"line":8035},[204,78903,62111],{"class":263},[204,78905,51523],{"class":214},[204,78907,62116],{"class":263},[204,78909,1377],{"class":214},[204,78911,78912],{"class":206,"line":8059},[204,78913,2273],{"class":214},[204,78915,78916],{"class":206,"line":8064},[204,78917,2486],{"emptyLinePlaceholder":135},[204,78919,78920,78922,78924],{"class":206,"line":8070},[204,78921,78711],{"class":2049},[204,78923,55701],{"class":51386},[204,78925,15659],{"class":214},[204,78927,78928,78930,78932,78934,78936],{"class":206,"line":8097},[204,78929,54857],{"class":263},[204,78931,51523],{"class":214},[204,78933,524],{"class":263},[204,78935,541],{"class":210},[204,78937,1377],{"class":214},[204,78939,78940],{"class":206,"line":8102},[204,78941,2273],{"class":214},[204,78943,78944],{"class":206,"line":8108},[204,78945,2486],{"emptyLinePlaceholder":135},[204,78947,78948,78950,78952],{"class":206,"line":8120},[204,78949,78711],{"class":2049},[204,78951,62390],{"class":2049},[204,78953,15659],{"class":214},[204,78955,78956,78958,78960,78962,78964],{"class":206,"line":8132},[204,78957,55008],{"class":263},[204,78959,51523],{"class":214},[204,78961,863],{"class":263},[204,78963,51578],{"class":210},[204,78965,1377],{"class":214},[204,78967,78968,78970,78972,78974,78976],{"class":206,"line":8144},[204,78969,78778],{"class":263},[204,78971,51523],{"class":214},[204,78973,659],{"class":263},[204,78975,51578],{"class":210},[204,78977,1377],{"class":214},[204,78979,78980,78982,78984,78987],{"class":206,"line":9803},[204,78981,57502],{"class":263},[204,78983,51523],{"class":214},[204,78985,78986],{"class":263},"#666",[204,78988,1377],{"class":214},[204,78990,78991],{"class":206,"line":9828},[204,78992,2273],{"class":214},[204,78994,78995],{"class":206,"line":9851},[204,78996,2486],{"emptyLinePlaceholder":135},[204,78998,78999,79001,79004],{"class":206,"line":9875},[204,79000,78711],{"class":2049},[204,79002,79003],{"class":2049}," .price",[204,79005,15659],{"class":214},[204,79007,79008,79010,79012,79014,79016],{"class":206,"line":9880},[204,79009,55008],{"class":263},[204,79011,51523],{"class":214},[204,79013,963],{"class":263},[204,79015,51578],{"class":210},[204,79017,1377],{"class":214},[204,79019,79020,79022,79024,79027],{"class":206,"line":9885},[204,79021,57502],{"class":263},[204,79023,51523],{"class":214},[204,79025,79026],{"class":263},"firebrick",[204,79028,1377],{"class":214},[204,79030,79031],{"class":206,"line":9890},[204,79032,2273],{"class":214},[204,79034,79035],{"class":206,"line":9899},[204,79036,2486],{"emptyLinePlaceholder":135},[204,79038,79039,79041,79044],{"class":206,"line":9904},[204,79040,78711],{"class":2049},[204,79042,79043],{"class":2049}," .price::before",[204,79045,15659],{"class":214},[204,79047,79048,79051,79053,79056],{"class":206,"line":9910},[204,79049,79050],{"class":263},"      content",[204,79052,51523],{"class":214},[204,79054,79055],{"class":319},"'￥'",[204,79057,1377],{"class":214},[204,79059,79060,79062,79064,79066,79068],{"class":206,"line":9931},[204,79061,55008],{"class":263},[204,79063,51523],{"class":214},[204,79065,762],{"class":263},[204,79067,51578],{"class":210},[204,79069,1377],{"class":214},[204,79071,79072],{"class":206,"line":9937},[204,79073,2273],{"class":214},[204,79075,79076],{"class":206,"line":9951},[204,79077,2486],{"emptyLinePlaceholder":135},[204,79079,79080,79083],{"class":206,"line":9957},[204,79081,79082],{"class":2049},"    .filter",[204,79084,15659],{"class":214},[204,79086,79087,79089,79091,79093],{"class":206,"line":9984},[204,79088,55095],{"class":263},[204,79090,51523],{"class":214},[204,79092,51563],{"class":263},[204,79094,1377],{"class":214},[204,79096,79097,79099,79101,79103,79105],{"class":206,"line":9993},[204,79098,54857],{"class":263},[204,79100,51523],{"class":214},[204,79102,78660],{"class":263},[204,79104,51578],{"class":210},[204,79106,1377],{"class":214},[204,79108,79109,79111,79113,79115,79117],{"class":206,"line":9999},[204,79110,54792],{"class":263},[204,79112,51523],{"class":214},[204,79114,405],{"class":263},[204,79116,51642],{"class":263},[204,79118,1377],{"class":214},[204,79120,79121,79123,79125,79127,79129,79131],{"class":206,"line":10007},[204,79122,54781],{"class":263},[204,79124,51523],{"class":214},[204,79126,869],{"class":263},[204,79128,51578],{"class":210},[204,79130,78751],{"class":263},[204,79132,79133],{"class":210},"px\n",[204,79135,79136],{"class":206,"line":10012},[204,79137,2273],{"class":214},[204,79139,79140],{"class":206,"line":16691},[204,79141,2486],{"emptyLinePlaceholder":135},[204,79143,79144,79146,79148],{"class":206,"line":16697},[204,79145,79082],{"class":2049},[204,79147,1485],{"class":51386},[204,79149,15659],{"class":214},[204,79151,79152,79154,79156,79158,79160,79162,79164],{"class":206,"line":16720},[204,79153,54781],{"class":263},[204,79155,51523],{"class":214},[204,79157,659],{"class":263},[204,79159,51578],{"class":210},[204,79161,9037],{"class":263},[204,79163,51578],{"class":210},[204,79165,1377],{"class":214},[204,79167,79168,79170,79172,79174],{"class":206,"line":16726},[204,79169,61807],{"class":263},[204,79171,51523],{"class":214},[204,79173,61904],{"class":263},[204,79175,1377],{"class":214},[204,79177,79178,79180,79182,79184],{"class":206,"line":16749},[204,79179,57502],{"class":263},[204,79181,51523],{"class":214},[204,79183,78986],{"class":263},[204,79185,1377],{"class":214},[204,79187,79188,79190,79192,79194],{"class":206,"line":16763},[204,79189,64056],{"class":263},[204,79191,51523],{"class":214},[204,79193,54823],{"class":263},[204,79195,1377],{"class":214},[204,79197,79198,79200,79202,79204,79206],{"class":206,"line":16783},[204,79199,61836],{"class":263},[204,79201,51523],{"class":214},[204,79203,913],{"class":263},[204,79205,51578],{"class":210},[204,79207,1377],{"class":214},[204,79209,79210],{"class":206,"line":16789},[204,79211,2273],{"class":214},[204,79213,79214],{"class":206,"line":16800},[204,79215,2486],{"emptyLinePlaceholder":135},[204,79217,79218,79220,79222,79224],{"class":206,"line":16823},[204,79219,79082],{"class":2049},[204,79221,1485],{"class":51386},[204,79223,61986],{"class":2049},[204,79225,15659],{"class":214},[204,79227,79228,79230,79232,79235],{"class":206,"line":16845},[204,79229,54970],{"class":263},[204,79231,51523],{"class":214},[204,79233,79234],{"class":263},"#05943c",[204,79236,1377],{"class":214},[204,79238,79239,79241,79243,79245],{"class":206,"line":16850},[204,79240,57502],{"class":263},[204,79242,51523],{"class":214},[204,79244,60928],{"class":263},[204,79246,1377],{"class":214},[204,79248,79249],{"class":206,"line":16856},[204,79250,2273],{"class":214},[204,79252,79253,79255,79257],{"class":206,"line":16870},[204,79254,52503],{"class":214},[204,79256,5213],{"class":51386},[204,79258,51393],{"class":214},[204,79260,79261,79263,79265],{"class":206,"line":16883},[204,79262,51871],{"class":214},[204,79264,51420],{"class":51386},[204,79266,51393],{"class":214},[204,79268,79269],{"class":206,"line":16888},[204,79270,2486],{"emptyLinePlaceholder":135},[204,79272,79273,79275,79277],{"class":206,"line":16902},[204,79274,1123],{"class":214},[204,79276,51886],{"class":51386},[204,79278,51393],{"class":214},[204,79280,79281,79283,79285,79287,79289,79292],{"class":206,"line":16907},[204,79282,52230],{"class":214},[204,79284,51697],{"class":51386},[204,79286,53572],{"class":2049},[204,79288,260],{"class":214},[204,79290,79291],{"class":319},"\"filter\"",[204,79293,51393],{"class":214},[204,79295,79296,79298,79300,79302,79304,79306,79309,79311,79313,79316,79318],{"class":206,"line":16913},[204,79297,51427],{"class":214},[204,79299,62],{"class":51386},[204,79301,61143],{"class":2049},[204,79303,260],{"class":214},[204,79305,61148],{"class":319},[204,79307,79308],{"class":2049}," data-index",[204,79310,260],{"class":214},[204,79312,3764],{"class":319},[204,79314,79315],{"class":214},">0-100元\u003C\u002F",[204,79317,62],{"class":51386},[204,79319,51393],{"class":214},[204,79321,79322,79324,79326,79328,79330,79332,79334,79336,79338,79341,79343],{"class":206,"line":16918},[204,79323,51427],{"class":214},[204,79325,62],{"class":51386},[204,79327,61143],{"class":2049},[204,79329,260],{"class":214},[204,79331,61148],{"class":319},[204,79333,79308],{"class":2049},[204,79335,260],{"class":214},[204,79337,3787],{"class":319},[204,79339,79340],{"class":214},">100-300元\u003C\u002F",[204,79342,62],{"class":51386},[204,79344,51393],{"class":214},[204,79346,79347,79349,79351,79353,79355,79357,79359,79361,79363,79366,79368],{"class":206,"line":16932},[204,79348,51427],{"class":214},[204,79350,62],{"class":51386},[204,79352,61143],{"class":2049},[204,79354,260],{"class":214},[204,79356,61148],{"class":319},[204,79358,79308],{"class":2049},[204,79360,260],{"class":214},[204,79362,3800],{"class":319},[204,79364,79365],{"class":214},">300元以上\u003C\u002F",[204,79367,62],{"class":51386},[204,79369,51393],{"class":214},[204,79371,79372,79374,79376,79378,79380,79382,79385,79387],{"class":206,"line":16937},[204,79373,51427],{"class":214},[204,79375,62],{"class":51386},[204,79377,61143],{"class":2049},[204,79379,260],{"class":214},[204,79381,61148],{"class":319},[204,79383,79384],{"class":214},">全部区间\u003C\u002F",[204,79386,62],{"class":51386},[204,79388,51393],{"class":214},[204,79390,79391,79393,79395],{"class":206,"line":16942},[204,79392,52503],{"class":214},[204,79394,51697],{"class":51386},[204,79396,51393],{"class":214},[204,79398,79399,79401,79403,79405,79407,79409],{"class":206,"line":16956},[204,79400,52230],{"class":214},[204,79402,51697],{"class":51386},[204,79404,53572],{"class":2049},[204,79406,260],{"class":214},[204,79408,62694],{"class":319},[204,79410,51393],{"class":214},[204,79412,79413],{"class":206,"line":16968},[204,79414,79415],{"class":273},"    \u003C!-- \u003Cdiv class=\"item\">\n",[204,79417,79418],{"class":206,"line":16973},[204,79419,79420],{"class":273},"      \u003Cimg src=\"\" alt=\"\">\n",[204,79422,79423],{"class":206,"line":16986},[204,79424,79425],{"class":273},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[204,79427,79428],{"class":206,"line":16991},[204,79429,79430],{"class":273},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[204,79432,79433],{"class":206,"line":16996},[204,79434,79435],{"class":273},"    \u003C\u002Fdiv> -->\n",[204,79437,79438,79440,79442],{"class":206,"line":17001},[204,79439,52503],{"class":214},[204,79441,51697],{"class":51386},[204,79443,51393],{"class":214},[204,79445,79446,79448,79450],{"class":206,"line":17014},[204,79447,52230],{"class":214},[204,79449,51899],{"class":51386},[204,79451,51393],{"class":214},[204,79453,79454],{"class":206,"line":17019},[204,79455,79456],{"class":273},"    \u002F\u002F 2. 初始化数据\n",[204,79458,79459,79461,79464,79466],{"class":206,"line":32719},[204,79460,11308],{"class":210},[204,79462,79463],{"class":263}," goodsList",[204,79465,13651],{"class":210},[204,79467,55533],{"class":214},[204,79469,79470],{"class":206,"line":32725},[204,79471,79472],{"class":214},"      {\n",[204,79474,79475,79478,79481],{"class":206,"line":32731},[204,79476,79477],{"class":214},"        id: ",[204,79479,79480],{"class":319},"'4001172'",[204,79482,31552],{"class":214},[204,79484,79485,79488,79491],{"class":206,"line":32737},[204,79486,79487],{"class":214},"        name: ",[204,79489,79490],{"class":319},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[204,79492,31552],{"class":214},[204,79494,79495,79498,79501],{"class":206,"line":32743},[204,79496,79497],{"class":214},"        price: ",[204,79499,79500],{"class":319},"'289.00'",[204,79502,31552],{"class":214},[204,79504,79505,79508,79511],{"class":206,"line":32754},[204,79506,79507],{"class":214},"        picture: ",[204,79509,79510],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[204,79512,31552],{"class":214},[204,79514,79515],{"class":206,"line":32760},[204,79516,77978],{"class":214},[204,79518,79519],{"class":206,"line":32780},[204,79520,79472],{"class":214},[204,79522,79523,79525,79528],{"class":206,"line":32786},[204,79524,79477],{"class":214},[204,79526,79527],{"class":319},"'4001594'",[204,79529,31552],{"class":214},[204,79531,79532,79534,79537],{"class":206,"line":32797},[204,79533,79487],{"class":214},[204,79535,79536],{"class":319},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[204,79538,31552],{"class":214},[204,79540,79541,79543,79546],{"class":206,"line":32803},[204,79542,79497],{"class":214},[204,79544,79545],{"class":319},"'288.00'",[204,79547,31552],{"class":214},[204,79549,79550,79552,79555],{"class":206,"line":32809},[204,79551,79507],{"class":214},[204,79553,79554],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[204,79556,31552],{"class":214},[204,79558,79559],{"class":206,"line":32815},[204,79560,77978],{"class":214},[204,79562,79563],{"class":206,"line":32821},[204,79564,79472],{"class":214},[204,79566,79567,79569,79572],{"class":206,"line":32827},[204,79568,79477],{"class":214},[204,79570,79571],{"class":319},"'4001009'",[204,79573,31552],{"class":214},[204,79575,79576,79578,79581],{"class":206,"line":32833},[204,79577,79487],{"class":214},[204,79579,79580],{"class":319},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[204,79582,31552],{"class":214},[204,79584,79585,79587,79590],{"class":206,"line":32839},[204,79586,79497],{"class":214},[204,79588,79589],{"class":319},"'109.00'",[204,79591,31552],{"class":214},[204,79593,79594,79596,79599],{"class":206,"line":32859},[204,79595,79507],{"class":214},[204,79597,79598],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[204,79600,31552],{"class":214},[204,79602,79603],{"class":206,"line":32865},[204,79604,77978],{"class":214},[204,79606,79607],{"class":206,"line":32881},[204,79608,79472],{"class":214},[204,79610,79611,79613,79616],{"class":206,"line":32887},[204,79612,79477],{"class":214},[204,79614,79615],{"class":319},"'4001874'",[204,79617,31552],{"class":214},[204,79619,79620,79622,79625],{"class":206,"line":32901},[204,79621,79487],{"class":214},[204,79623,79624],{"class":319},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[204,79626,31552],{"class":214},[204,79628,79629,79631,79634],{"class":206,"line":32907},[204,79630,79497],{"class":214},[204,79632,79633],{"class":319},"'488.00'",[204,79635,31552],{"class":214},[204,79637,79638,79640,79643],{"class":206,"line":32922},[204,79639,79507],{"class":214},[204,79641,79642],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[204,79644,31552],{"class":214},[204,79646,79647],{"class":206,"line":32928},[204,79648,77978],{"class":214},[204,79650,79651],{"class":206,"line":32937},[204,79652,79472],{"class":214},[204,79654,79655,79657,79660],{"class":206,"line":32943},[204,79656,79477],{"class":214},[204,79658,79659],{"class":319},"'4001649'",[204,79661,31552],{"class":214},[204,79663,79664,79666,79669],{"class":206,"line":32952},[204,79665,79487],{"class":214},[204,79667,79668],{"class":319},"'大师监制龙泉青瓷茶叶罐'",[204,79670,31552],{"class":214},[204,79672,79673,79675,79678],{"class":206,"line":32958},[204,79674,79497],{"class":214},[204,79676,79677],{"class":319},"'139.00'",[204,79679,31552],{"class":214},[204,79681,79682,79684,79687],{"class":206,"line":32964},[204,79683,79507],{"class":214},[204,79685,79686],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[204,79688,31552],{"class":214},[204,79690,79691],{"class":206,"line":32973},[204,79692,77978],{"class":214},[204,79694,79695],{"class":206,"line":32979},[204,79696,79472],{"class":214},[204,79698,79699,79701,79704],{"class":206,"line":32990},[204,79700,79477],{"class":214},[204,79702,79703],{"class":319},"'3997185'",[204,79705,31552],{"class":214},[204,79707,79708,79710,79713],{"class":206,"line":32996},[204,79709,79487],{"class":214},[204,79711,79712],{"class":319},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[204,79714,31552],{"class":214},[204,79716,79717,79719,79722],{"class":206,"line":33015},[204,79718,79497],{"class":214},[204,79720,79721],{"class":319},"'108.00'",[204,79723,31552],{"class":214},[204,79725,79726,79728,79731],{"class":206,"line":33021},[204,79727,79507],{"class":214},[204,79729,79730],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[204,79732,31552],{"class":214},[204,79734,79735],{"class":206,"line":33032},[204,79736,77978],{"class":214},[204,79738,79739],{"class":206,"line":33038},[204,79740,79472],{"class":214},[204,79742,79743,79745,79748],{"class":206,"line":33058},[204,79744,79477],{"class":214},[204,79746,79747],{"class":319},"'3997403'",[204,79749,31552],{"class":214},[204,79751,79752,79754,79757],{"class":206,"line":33074},[204,79753,79487],{"class":214},[204,79755,79756],{"class":319},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[204,79758,31552],{"class":214},[204,79760,79761,79763,79766],{"class":206,"line":33080},[204,79762,79497],{"class":214},[204,79764,79765],{"class":319},"'100.00'",[204,79767,31552],{"class":214},[204,79769,79770,79772,79775],{"class":206,"line":33094},[204,79771,79507],{"class":214},[204,79773,79774],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[204,79776,31552],{"class":214},[204,79778,79779],{"class":206,"line":33100},[204,79780,77978],{"class":214},[204,79782,79783],{"class":206,"line":33106},[204,79784,79472],{"class":214},[204,79786,79787,79789,79792],{"class":206,"line":33117},[204,79788,79477],{"class":214},[204,79790,79791],{"class":319},"'3998274'",[204,79793,31552],{"class":214},[204,79795,79796,79798,79801],{"class":206,"line":33123},[204,79797,79487],{"class":214},[204,79799,79800],{"class":319},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[204,79802,31552],{"class":214},[204,79804,79805,79807,79809],{"class":206,"line":33129},[204,79806,79497],{"class":214},[204,79808,79677],{"class":319},[204,79810,31552],{"class":214},[204,79812,79813,79815,79818],{"class":206,"line":33139},[204,79814,79507],{"class":214},[204,79816,79817],{"class":319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[204,79819,31552],{"class":214},[204,79821,79822],{"class":206,"line":33145},[204,79823,77978],{"class":214},[204,79825,79826],{"class":206,"line":33156},[204,79827,53195],{"class":214},[204,79829,79830],{"class":206,"line":33162},[204,79831,2486],{"emptyLinePlaceholder":135},[204,79833,79834],{"class":206,"line":33172},[204,79835,79836],{"class":273},"    \u002F\u002F 1.渲染函数\n",[204,79838,79839,79841,79843,79845,79847],{"class":206,"line":33177},[204,79840,70170],{"class":210},[204,79842,70173],{"class":2049},[204,79844,215],{"class":214},[204,79846,3966],{"class":5303},[204,79848,12529],{"class":214},[204,79850,79851],{"class":206,"line":33183},[204,79852,79853],{"class":273},"      \u002F\u002F 声明空字符串\n",[204,79855,79856,79859,79862,79864],{"class":206,"line":33232},[204,79857,79858],{"class":210},"      let",[204,79860,79861],{"class":214}," str ",[204,79863,260],{"class":210},[204,79865,70190],{"class":319},[204,79867,79868],{"class":206,"line":33279},[204,79869,70195],{"class":273},[204,79871,79872,79874,79877,79879,79882,79885],{"class":206,"line":33284},[204,79873,58093],{"class":214},[204,79875,79876],{"class":2049},"forEach",[204,79878,215],{"class":214},[204,79880,79881],{"class":5303},"item",[204,79883,79884],{"class":210}," =>",[204,79886,15659],{"class":214},[204,79888,79889,79891,79894,79897,79899,79902,79904,79907,79910,79912],{"class":206,"line":33290},[204,79890,61356],{"class":210},[204,79892,79893],{"class":214}," { ",[204,79895,79896],{"class":263},"name",[204,79898,12522],{"class":214},[204,79900,79901],{"class":263},"price",[204,79903,12522],{"class":214},[204,79905,79906],{"class":263},"picture",[204,79908,79909],{"class":214}," } ",[204,79911,260],{"class":210},[204,79913,79914],{"class":214}," item\n",[204,79916,79917,79920,79922],{"class":206,"line":33309},[204,79918,79919],{"class":214},"        str ",[204,79921,9564],{"class":210},[204,79923,70254],{"class":319},[204,79925,79926],{"class":206,"line":33315},[204,79927,79928],{"class":319},"          \u003Cdiv class=\"item\">\n",[204,79930,79931,79934,79936],{"class":206,"line":33335},[204,79932,79933],{"class":319},"            \u003Cimg src=\"${",[204,79935,79906],{"class":214},[204,79937,79938],{"class":319},"}\" alt=\"\">\n",[204,79940,79941,79944,79946],{"class":206,"line":33341},[204,79942,79943],{"class":319},"            \u003Cp class=\"name\">${",[204,79945,79896],{"class":214},[204,79947,79948],{"class":319},"}\u003C\u002Fp>\n",[204,79950,79951,79954,79956],{"class":206,"line":33347},[204,79952,79953],{"class":319},"            \u003Cp class=\"price\">${",[204,79955,79901],{"class":214},[204,79957,79948],{"class":319},[204,79959,79960],{"class":206,"line":33357},[204,79961,79962],{"class":319},"          \u003C\u002Fdiv>\n",[204,79964,79965],{"class":206,"line":33362},[204,79966,79967],{"class":319},"        `\n",[204,79969,79970],{"class":206,"line":33368},[204,79971,64901],{"class":214},[204,79973,79974],{"class":206,"line":33384},[204,79975,79976],{"class":273},"      \u002F\u002F 追加给List\n",[204,79978,79979,79981,79983,79985,79988,79990,79992],{"class":206,"line":33429},[204,79980,55857],{"class":214},[204,79982,54485],{"class":2049},[204,79984,215],{"class":214},[204,79986,79987],{"class":319},"'.list'",[204,79989,74335],{"class":214},[204,79991,260],{"class":210},[204,79993,74071],{"class":214},[204,79995,79996],{"class":206,"line":33435},[204,79997,2273],{"class":214},[204,79999,80000],{"class":206,"line":33441},[204,80001,80002],{"class":273},"    \u002F\u002F 页面一打开就需要渲染\n",[204,80004,80005,80008],{"class":206,"line":33447},[204,80006,80007],{"class":2049},"    render",[204,80009,80010],{"class":214},"(goodsList)\n",[204,80012,80013],{"class":206,"line":33458},[204,80014,80015],{"class":273},"    \u002F\u002F 2.过滤筛选\n",[204,80017,80018,80020,80022,80024,80027,80029,80031,80033,80035,80037,80039,80041],{"class":206,"line":33464},[204,80019,52493],{"class":214},[204,80021,54485],{"class":2049},[204,80023,215],{"class":214},[204,80025,80026],{"class":319},"'.filter'",[204,80028,30912],{"class":214},[204,80030,57899],{"class":2049},[204,80032,215],{"class":214},[204,80034,57904],{"class":319},[204,80036,12522],{"class":214},[204,80038,289],{"class":5303},[204,80040,79884],{"class":210},[204,80042,15659],{"class":214},[204,80044,80045],{"class":206,"line":33470},[204,80046,80047],{"class":273},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[204,80049,80050,80052,80054,80057,80059,80061,80063,80065],{"class":206,"line":33476},[204,80051,58314],{"class":210},[204,80053,79893],{"class":214},[204,80055,80056],{"class":263},"tagName",[204,80058,12522],{"class":214},[204,80060,31623],{"class":263},[204,80062,79909],{"class":214},[204,80064,260],{"class":210},[204,80066,80067],{"class":214}," e.target\n",[204,80069,80070],{"class":206,"line":33494},[204,80071,80072],{"class":273},"      \u002F\u002F 判断\n",[204,80074,80075,80077,80079,80081,80083],{"class":206,"line":33508},[204,80076,54566],{"class":210},[204,80078,67120],{"class":214},[204,80080,54572],{"class":210},[204,80082,68342],{"class":319},[204,80084,12529],{"class":214},[204,80086,80087],{"class":206,"line":33517},[204,80088,80089],{"class":273},"        \u002F\u002F console.log(11)\n",[204,80091,80092],{"class":206,"line":33526},[204,80093,80094],{"class":273},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[204,80096,80097],{"class":206,"line":33535},[204,80098,80099],{"class":273},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[204,80101,80102,80104,80106,80108],{"class":206,"line":33544},[204,80103,51916],{"class":210},[204,80105,51919],{"class":214},[204,80107,260],{"class":210},[204,80109,80110],{"class":214}," goodsList\n",[204,80112,80113,80115,80118,80120,80123],{"class":206,"line":33550},[204,80114,2583],{"class":210},[204,80116,80117],{"class":214}," (dataset.index ",[204,80119,54572],{"class":210},[204,80121,80122],{"class":319}," '1'",[204,80124,12529],{"class":214},[204,80126,80127,80130,80132,80135,80138,80140,80142,80144,80147,80149,80151,80154,80156,80158,80160],{"class":206,"line":33556},[204,80128,80129],{"class":214},"          arr ",[204,80131,260],{"class":210},[204,80133,80134],{"class":214}," goodsList.",[204,80136,80137],{"class":2049},"filter",[204,80139,215],{"class":214},[204,80141,79881],{"class":5303},[204,80143,79884],{"class":210},[204,80145,80146],{"class":214}," item.price ",[204,80148,1796],{"class":210},[204,80150,4179],{"class":263},[204,80152,80153],{"class":210}," &&",[204,80155,80146],{"class":214},[204,80157,1674],{"class":210},[204,80159,5841],{"class":263},[204,80161,221],{"class":214},[204,80163,80164,80167,80169,80171,80173,80175,80178],{"class":206,"line":33564},[204,80165,80166],{"class":214},"        } ",[204,80168,1787],{"class":210},[204,80170,1790],{"class":210},[204,80172,80117],{"class":214},[204,80174,54572],{"class":210},[204,80176,80177],{"class":319}," '2'",[204,80179,12529],{"class":214},[204,80181,80182,80184,80186,80188,80190,80192,80194,80196,80198,80200,80202,80204,80206,80208,80211],{"class":206,"line":33569},[204,80183,80129],{"class":214},[204,80185,260],{"class":210},[204,80187,80134],{"class":214},[204,80189,80137],{"class":2049},[204,80191,215],{"class":214},[204,80193,79881],{"class":5303},[204,80195,79884],{"class":210},[204,80197,80146],{"class":214},[204,80199,1796],{"class":210},[204,80201,5841],{"class":263},[204,80203,80153],{"class":210},[204,80205,80146],{"class":214},[204,80207,1674],{"class":210},[204,80209,80210],{"class":263}," 300",[204,80212,221],{"class":214},[204,80214,80215,80217,80219,80221,80223,80225,80228],{"class":206,"line":33575},[204,80216,80166],{"class":214},[204,80218,1787],{"class":210},[204,80220,1790],{"class":210},[204,80222,80117],{"class":214},[204,80224,54572],{"class":210},[204,80226,80227],{"class":319}," '3'",[204,80229,12529],{"class":214},[204,80231,80232,80234,80236,80238,80240,80242,80244,80246,80248,80250,80252],{"class":206,"line":33586},[204,80233,80129],{"class":214},[204,80235,260],{"class":210},[204,80237,80134],{"class":214},[204,80239,80137],{"class":2049},[204,80241,215],{"class":214},[204,80243,79881],{"class":5303},[204,80245,79884],{"class":210},[204,80247,80146],{"class":214},[204,80249,1796],{"class":210},[204,80251,80210],{"class":263},[204,80253,221],{"class":214},[204,80255,80256],{"class":206,"line":33592},[204,80257,2615],{"class":214},[204,80259,80260],{"class":206,"line":33612},[204,80261,80262],{"class":273},"        \u002F\u002F 渲染函数\n",[204,80264,80265,80267],{"class":206,"line":33618},[204,80266,70494],{"class":2049},[204,80268,52498],{"class":214},[204,80270,80271],{"class":206,"line":33624},[204,80272,52484],{"class":214},[204,80274,80275],{"class":206,"line":33630},[204,80276,2486],{"emptyLinePlaceholder":135},[204,80278,80279],{"class":206,"line":33647},[204,80280,33547],{"class":214},[204,80282,80283,80285,80287],{"class":206,"line":33653},[204,80284,52503],{"class":214},[204,80286,51899],{"class":51386},[204,80288,51393],{"class":214},[204,80290,80291,80293,80295],{"class":206,"line":33659},[204,80292,51871],{"class":214},[204,80294,51886],{"class":51386},[204,80296,51393],{"class":214},[204,80298,80299],{"class":206,"line":33665},[204,80300,2486],{"emptyLinePlaceholder":135},[204,80302,80303,80305,80307],{"class":206,"line":33671},[204,80304,51871],{"class":214},[204,80306,50721],{"class":51386},[204,80308,51393],{"class":214},[14,80310,80312],{"id":80311},"_410-深入了解对象","4.10 深入了解对象",[49,80314,80316],{"id":80315},"_4101-创建对象","4.10.1 创建对象",[19,80318,80319],{},[23,80320],{"alt":125,"src":80321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80323,80324],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[49,80326,80328],{"id":80327},"_4102-构造函数","4.10.2 构造函数",[19,80330,80331,80334],{},[30,80332,80333],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80336,80337,80340],{},[30,80338,80339],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[196,80342,80344],{"className":50719,"code":80343,"language":50721,"meta":125,"style":125},"\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",[81,80345,80346,80354,80359,80380,80393,80405,80417,80421,80426,80453,80458,80485],{"__ignoreMap":125},[204,80347,80348,80350,80352],{"class":206,"line":207},[204,80349,1123],{"class":214},[204,80351,51899],{"class":51386},[204,80353,51393],{"class":214},[204,80355,80356],{"class":206,"line":126},[204,80357,80358],{"class":273},"\u002F\u002F例：\n",[204,80360,80361,80363,80366,80368,80370,80372,80374,80376,80378],{"class":206,"line":131},[204,80362,54535],{"class":210},[204,80364,80365],{"class":2049}," Pig",[204,80367,215],{"class":214},[204,80369,79896],{"class":5303},[204,80371,591],{"class":214},[204,80373,70307],{"class":5303},[204,80375,591],{"class":214},[204,80377,70324],{"class":5303},[204,80379,12529],{"class":214},[204,80381,80382,80385,80388,80390],{"class":206,"line":1281},[204,80383,80384],{"class":263},"    this",[204,80386,80387],{"class":214},".name",[204,80389,260],{"class":210},[204,80391,80392],{"class":214},"name\n",[204,80394,80395,80397,80400,80402],{"class":206,"line":1287},[204,80396,80384],{"class":263},[204,80398,80399],{"class":214},".age",[204,80401,260],{"class":210},[204,80403,80404],{"class":214},"age\n",[204,80406,80407,80409,80412,80414],{"class":206,"line":1301},[204,80408,80384],{"class":263},[204,80410,80411],{"class":214},".gender",[204,80413,260],{"class":210},[204,80415,80416],{"class":214},"gender    \n",[204,80418,80419],{"class":206,"line":1307},[204,80420,1651],{"class":214},[204,80422,80423],{"class":206,"line":1398},[204,80424,80425],{"class":273},"\u002F\u002F创建佩奇对象\n",[204,80427,80428,80430,80433,80435,80437,80439,80442,80444,80446,80448,80451],{"class":206,"line":1404},[204,80429,6879],{"class":210},[204,80431,80432],{"class":263}," Peppa",[204,80434,11804],{"class":210},[204,80436,80365],{"class":2049},[204,80438,215],{"class":214},[204,80440,80441],{"class":319},"'佩奇'",[204,80443,591],{"class":214},[204,80445,557],{"class":263},[204,80447,591],{"class":214},[204,80449,80450],{"class":319},"'女'",[204,80452,221],{"class":214},[204,80454,80455],{"class":206,"line":1416},[204,80456,80457],{"class":273},"\u002F\u002F创建乔治对象\n",[204,80459,80460,80462,80465,80467,80469,80471,80474,80476,80478,80480,80483],{"class":206,"line":1698},[204,80461,6879],{"class":210},[204,80463,80464],{"class":263}," George",[204,80466,11804],{"class":210},[204,80468,80365],{"class":2049},[204,80470,215],{"class":214},[204,80472,80473],{"class":319},"'乔治'",[204,80475,591],{"class":214},[204,80477,286],{"class":263},[204,80479,591],{"class":214},[204,80481,80482],{"class":319},"'男'",[204,80484,221],{"class":214},[204,80486,80487,80489,80491],{"class":206,"line":1703},[204,80488,51871],{"class":214},[204,80490,51899],{"class":51386},[204,80492,51393],{"class":214},[19,80494,80495],{},[23,80496],{"alt":125,"src":80497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80499,80500],{},[23,80501],{"alt":125,"src":80502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80504,80505],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80507,80508],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80510,80511],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80513,80514],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80516,80517],{},"这里用等号是因为：对象.属性=值",[19,80519,80520],{},"①利用对象字面量创建对象",[19,80522,80523],{},"const o={",[19,80525,80526],{},"name:'pink'",[19,80528,80529],{},"} ②利用new Object创建对象",[19,80531,80532],{},"const o=new Object({name:'pink'})",[19,80534,80535],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80537,80538],{},"构造函数创建对象的执行过程：",[19,80540,80541],{},[23,80542],{"alt":125,"src":80543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[49,80545,80547],{"id":80546},"_4103-实例成员","4.10.3 实例成员",[19,80549,80550],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[161,80552,80553,80556,80559],{},[71,80554,80555],{},"实例对象的属性和方法即为实例成员",[71,80557,80558],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[71,80560,80561],{},"构造函数创建的实例对象彼此独立互不影响",[49,80563,80565],{"id":80564},"_4104-静态成员","4.10.4 静态成员",[19,80567,80568],{},[23,80569],{"alt":125,"src":80570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80572,80573],{},"静态成员有Date.now() Math.PI Math.random()",[19,80575,80576],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80578,80579],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80581,80582],{},"function Pig(name) n {",[19,80584,80585],{},"this.name=name",[19,80587,1159],{},[19,80589,80590],{},"Pig.eyes=2",[19,80592,80593],{},"Pig.sayHai=function () { console.log(this) }",[19,80595,80596],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80598,80599],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80601,11419],{},[161,80603,80604,80607,80610,80613,80616],{},[71,80605,80606],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[71,80608,80609],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[71,80611,80612],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[71,80614,80615],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[71,80617,80618],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80620,80621],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[49,80623,80625],{"id":80624},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80627,80628],{},"内置构造函数包含：",[19,80630,80631],{},[23,80632],{"alt":125,"src":80633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80635,80636],{},[23,80637],{"alt":125,"src":80638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80640,80641],{},"这些基本数据类型，js对他们进行了包装",[51899,80643,80644],{},"\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",[22085,80646,80648],{"id":80647},"_41051-object","4.10.5.1 Object",[19,80650,80651],{},"Object 是内置的构造函数，用于创建普通对象",[19,80653,80654],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[196,80656,80658],{"className":50719,"code":80657,"language":50721,"meta":125,"style":125},"const user=new Object({name:'小明',age:15})\n",[81,80659,80660],{"__ignoreMap":125},[204,80661,80662],{"class":206,"line":207},[204,80663,80657],{"class":214},[19,80665,80666],{},"三个常用的静态方法：",[22997,80668,80670],{"id":80669},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80672,80673],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80675,80676],{},[23,80677],{"alt":125,"src":80678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80680,80681],{},[23,80682],{"alt":125,"src":80683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[196,80685,80687],{"className":53153,"code":80686,"language":53155,"meta":125,"style":125},"\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",[81,80688,80689,80697,80705,80710,80715,80720,80725,80730,80735,80743],{"__ignoreMap":125},[204,80690,80691,80693,80695],{"class":206,"line":207},[204,80692,1123],{"class":214},[204,80694,51886],{"class":51386},[204,80696,51393],{"class":214},[204,80698,80699,80701,80703],{"class":206,"line":126},[204,80700,52230],{"class":214},[204,80702,51899],{"class":51386},[204,80704,51393],{"class":214},[204,80706,80707],{"class":206,"line":131},[204,80708,80709],{"class":214},"    const o = { name: 'pink', age: 6 }\n",[204,80711,80712],{"class":206,"line":1281},[204,80713,80714],{"class":214},"    \u002F\u002F 获得所有属性名\n",[204,80716,80717],{"class":206,"line":1287},[204,80718,80719],{"class":214},"    const arr = Object.keys(o)\n",[204,80721,80722],{"class":206,"line":1301},[204,80723,80724],{"class":214},"    console.log(arr)\n",[204,80726,80727],{"class":206,"line":1307},[204,80728,80729],{"class":214},"    \u002F\u002F 获得所有属性值\n",[204,80731,80732],{"class":206,"line":1398},[204,80733,80734],{"class":214},"    console.log(Object.values(o))\n",[204,80736,80737,80739,80741],{"class":206,"line":1404},[204,80738,52503],{"class":214},[204,80740,51899],{"class":51386},[204,80742,51393],{"class":214},[204,80744,80745,80747,80749],{"class":206,"line":1416},[204,80746,51871],{"class":214},[204,80748,51886],{"class":51386},[204,80750,51393],{"class":214},[22997,80752,80754],{"id":80753},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80756,80757],{},"Object.assign(oo,o)",[19,80759,80760],{},"后的东西添加给前 是追加",[19,80762,80763],{},[23,80764],{"alt":125,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80767,80768],{},[23,80769],{"alt":125,"src":80770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[196,80772,80774],{"className":53153,"code":80773,"language":53155,"meta":125,"style":125},"\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",[81,80775,80776,80784,80792,80796,80800,80804,80808,80812,80816,80821,80826,80831,80836,80841,80849],{"__ignoreMap":125},[204,80777,80778,80780,80782],{"class":206,"line":207},[204,80779,1123],{"class":214},[204,80781,51886],{"class":51386},[204,80783,51393],{"class":214},[204,80785,80786,80788,80790],{"class":206,"line":126},[204,80787,52230],{"class":214},[204,80789,51899],{"class":51386},[204,80791,51393],{"class":214},[204,80793,80794],{"class":206,"line":131},[204,80795,80709],{"class":214},[204,80797,80798],{"class":206,"line":1281},[204,80799,80714],{"class":214},[204,80801,80802],{"class":206,"line":1287},[204,80803,80719],{"class":214},[204,80805,80806],{"class":206,"line":1301},[204,80807,80724],{"class":214},[204,80809,80810],{"class":206,"line":1307},[204,80811,80729],{"class":214},[204,80813,80814],{"class":206,"line":1398},[204,80815,80734],{"class":214},[204,80817,80818],{"class":206,"line":1404},[204,80819,80820],{"class":214},"    const oo = {}\n",[204,80822,80823],{"class":206,"line":1416},[204,80824,80825],{"class":214},"    Object.assign(oo, o)\n",[204,80827,80828],{"class":206,"line":1698},[204,80829,80830],{"class":214},"    console.log(oo)\n",[204,80832,80833],{"class":206,"line":1703},[204,80834,80835],{"class":214},"    Object.assign(o, { gender: '女' })\n",[204,80837,80838],{"class":206,"line":1709},[204,80839,80840],{"class":214},"    console.log(o)\n",[204,80842,80843,80845,80847],{"class":206,"line":1714},[204,80844,52503],{"class":214},[204,80846,51899],{"class":51386},[204,80848,51393],{"class":214},[204,80850,80851,80853,80855],{"class":206,"line":1728},[204,80852,51871],{"class":214},[204,80854,51886],{"class":51386},[204,80856,51393],{"class":214},[19,80858,80859],{},[23,80860],{"alt":125,"src":80861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22085,80863,80865],{"id":80864},"_41052-array","4.10.5.2 Array",[19,80867,80868],{},"Array 是内置的构造函数，用于创建数组",[19,80870,80871],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[196,80873,80875],{"className":50719,"code":80874,"language":50721,"meta":125,"style":125},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[81,80876,80877,80882],{"__ignoreMap":125},[204,80878,80879],{"class":206,"line":207},[204,80880,80881],{"class":214},"const arr=new Array(3,5)\n",[204,80883,80884],{"class":206,"line":126},[204,80885,80886],{"class":214},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80888,80889],{},"Array的实例方法，这个方法是实例成员",[19,80891,80892],{},[23,80893],{"alt":125,"src":80894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22997,80896,80898],{"id":80897},"_410521-reduce","4.10.5.2.1 reduce",[19,80900,80901],{},[23,80902],{"alt":125,"src":80903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[196,80905,80907],{"className":53153,"code":80906,"language":53155,"meta":125,"style":125},"\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",[81,80908,80909,80917,80925,80930,80935,80940,80945,80949,80954,80959,80964,80968,80973,80978,80982,80987,80992,80997,81005],{"__ignoreMap":125},[204,80910,80911,80913,80915],{"class":206,"line":207},[204,80912,1123],{"class":214},[204,80914,51886],{"class":51386},[204,80916,51393],{"class":214},[204,80918,80919,80921,80923],{"class":206,"line":126},[204,80920,52230],{"class":214},[204,80922,51899],{"class":51386},[204,80924,51393],{"class":214},[204,80926,80927],{"class":206,"line":131},[204,80928,80929],{"class":214},"    const arr = [1, 5, 8]\n",[204,80931,80932],{"class":206,"line":1281},[204,80933,80934],{"class":214},"    \u002F\u002F 1.没有初始值\n",[204,80936,80937],{"class":206,"line":1287},[204,80938,80939],{"class":214},"    const total = arr.reduce(function (prev, current) {\n",[204,80941,80942],{"class":206,"line":1301},[204,80943,80944],{"class":214},"      return prev + current\n",[204,80946,80947],{"class":206,"line":1307},[204,80948,33547],{"class":214},[204,80950,80951],{"class":206,"line":1398},[204,80952,80953],{"class":214},"    console.log(total)   \u002F\u002F14\n",[204,80955,80956],{"class":206,"line":1404},[204,80957,80958],{"class":214},"    \u002F\u002F 2.有初始值\n",[204,80960,80961],{"class":206,"line":1416},[204,80962,80963],{"class":214},"    const total1 = arr.reduce(function (prev, current) {\n",[204,80965,80966],{"class":206,"line":1698},[204,80967,80944],{"class":214},[204,80969,80970],{"class":206,"line":1703},[204,80971,80972],{"class":214},"    }, 10)\n",[204,80974,80975],{"class":206,"line":1709},[204,80976,80977],{"class":214},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[204,80979,80980],{"class":206,"line":1714},[204,80981,2486],{"emptyLinePlaceholder":135},[204,80983,80984],{"class":206,"line":1728},[204,80985,80986],{"class":214},"    \u002F\u002F 3.箭头函数写法\n",[204,80988,80989],{"class":206,"line":1733},[204,80990,80991],{"class":214},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[204,80993,80994],{"class":206,"line":1739},[204,80995,80996],{"class":214},"    console.log(total2)   \u002F\u002F24\n",[204,80998,80999,81001,81003],{"class":206,"line":1760},[204,81000,52503],{"class":214},[204,81002,51899],{"class":51386},[204,81004,51393],{"class":214},[204,81006,81007,81009,81011],{"class":206,"line":1765},[204,81008,51871],{"class":214},[204,81010,51886],{"class":51386},[204,81012,51393],{"class":214},[19,81014,81015],{},"执行过程：",[161,81017,81018,81021,81024],{},[71,81019,81020],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[71,81022,81023],{},"每一次循环，把返回值给作为下一次循环的上一次值",[71,81025,81026],{},"如果有起始值，则起始值作为上一次值",[196,81028,81030],{"className":53153,"code":81029,"language":53155,"meta":125,"style":125},"\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",[81,81031,81032,81040,81048,81052,81056,81060,81064,81068,81072,81077,81082,81087,81092,81097,81101,81105,81109,81113,81117,81121,81126,81130,81135,81139,81144,81149,81153,81157,81161,81169],{"__ignoreMap":125},[204,81033,81034,81036,81038],{"class":206,"line":207},[204,81035,1123],{"class":214},[204,81037,51886],{"class":51386},[204,81039,51393],{"class":214},[204,81041,81042,81044,81046],{"class":206,"line":126},[204,81043,52230],{"class":214},[204,81045,51899],{"class":51386},[204,81047,51393],{"class":214},[204,81049,81050],{"class":206,"line":131},[204,81051,80929],{"class":214},[204,81053,81054],{"class":206,"line":1281},[204,81055,80934],{"class":214},[204,81057,81058],{"class":206,"line":1287},[204,81059,80939],{"class":214},[204,81061,81062],{"class":206,"line":1301},[204,81063,80944],{"class":214},[204,81065,81066],{"class":206,"line":1307},[204,81067,33547],{"class":214},[204,81069,81070],{"class":206,"line":1398},[204,81071,80953],{"class":214},[204,81073,81074],{"class":206,"line":1404},[204,81075,81076],{"class":214},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[204,81078,81079],{"class":206,"line":1416},[204,81080,81081],{"class":214},"    \u002F\u002F     1              5                    6\n",[204,81083,81084],{"class":206,"line":1698},[204,81085,81086],{"class":214},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[204,81088,81089],{"class":206,"line":1703},[204,81090,81091],{"class":214},"    \u002F\u002F     6              8                    14\n",[204,81093,81094],{"class":206,"line":1709},[204,81095,81096],{"class":214},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[204,81098,81099],{"class":206,"line":1714},[204,81100,80958],{"class":214},[204,81102,81103],{"class":206,"line":1728},[204,81104,80963],{"class":214},[204,81106,81107],{"class":206,"line":1733},[204,81108,80944],{"class":214},[204,81110,81111],{"class":206,"line":1739},[204,81112,80972],{"class":214},[204,81114,81115],{"class":206,"line":1760},[204,81116,80977],{"class":214},[204,81118,81119],{"class":206,"line":1765},[204,81120,81076],{"class":214},[204,81122,81123],{"class":206,"line":1779},[204,81124,81125],{"class":214},"    \u002F\u002F     10             1                     11\n",[204,81127,81128],{"class":206,"line":1784},[204,81129,81086],{"class":214},[204,81131,81132],{"class":206,"line":1813},[204,81133,81134],{"class":214},"    \u002F\u002F     11             5                    16\n",[204,81136,81137],{"class":206,"line":1818},[204,81138,81086],{"class":214},[204,81140,81141],{"class":206,"line":1835},[204,81142,81143],{"class":214},"    \u002F\u002F     16             8                    24\n",[204,81145,81146],{"class":206,"line":1840},[204,81147,81148],{"class":214},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[204,81150,81151],{"class":206,"line":1845},[204,81152,80986],{"class":214},[204,81154,81155],{"class":206,"line":1850},[204,81156,80991],{"class":214},[204,81158,81159],{"class":206,"line":1864},[204,81160,80996],{"class":214},[204,81162,81163,81165,81167],{"class":206,"line":1869},[204,81164,52503],{"class":214},[204,81166,51899],{"class":51386},[204,81168,51393],{"class":214},[204,81170,81171,81173,81175],{"class":206,"line":2663},[204,81172,51871],{"class":214},[204,81174,51886],{"class":51386},[204,81176,51393],{"class":214},[22997,81178,81180],{"id":81179},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81182,81183],{},[23,81184],{"alt":125,"src":81185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[196,81187,81189],{"className":53153,"code":81188,"language":53155,"meta":125,"style":125},"\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",[81,81190,81191,81199,81207,81212,81217,81222,81227,81231,81236,81241,81246,81251,81256,81261,81265,81270,81274,81279,81287],{"__ignoreMap":125},[204,81192,81193,81195,81197],{"class":206,"line":207},[204,81194,1123],{"class":214},[204,81196,51886],{"class":51386},[204,81198,51393],{"class":214},[204,81200,81201,81203,81205],{"class":206,"line":126},[204,81202,52230],{"class":214},[204,81204,51899],{"class":51386},[204,81206,51393],{"class":214},[204,81208,81209],{"class":206,"line":131},[204,81210,81211],{"class":214},"    const arr = [\n",[204,81213,81214],{"class":206,"line":1281},[204,81215,81216],{"class":214},"      { name: '张三', salary: 10000 },\n",[204,81218,81219],{"class":206,"line":1287},[204,81220,81221],{"class":214},"      { name: '李四', salary: 10000 },\n",[204,81223,81224],{"class":206,"line":1301},[204,81225,81226],{"class":214},"      { name: '王五', salary: 10000 }\n",[204,81228,81229],{"class":206,"line":1307},[204,81230,53195],{"class":214},[204,81232,81233],{"class":206,"line":1398},[204,81234,81235],{"class":214},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[204,81237,81238],{"class":206,"line":1404},[204,81239,81240],{"class":214},"    \u002F\u002F prev是累计值\n",[204,81242,81243],{"class":206,"line":1416},[204,81244,81245],{"class":214},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[204,81247,81248],{"class":206,"line":1698},[204,81249,81250],{"class":214},"    console.log(total)\n",[204,81252,81253],{"class":206,"line":1703},[204,81254,81255],{"class":214},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[204,81257,81258],{"class":206,"line":1709},[204,81259,81260],{"class":214},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[204,81262,81263],{"class":206,"line":1714},[204,81264,81255],{"class":214},[204,81266,81267],{"class":206,"line":1728},[204,81268,81269],{"class":214},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[204,81271,81272],{"class":206,"line":1733},[204,81273,81255],{"class":214},[204,81275,81276],{"class":206,"line":1739},[204,81277,81278],{"class":214},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[204,81280,81281,81283,81285],{"class":206,"line":1760},[204,81282,52503],{"class":214},[204,81284,51899],{"class":51386},[204,81286,51393],{"class":214},[204,81288,81289,81291,81293],{"class":206,"line":1765},[204,81290,51871],{"class":214},[204,81292,51886],{"class":51386},[204,81294,51393],{"class":214},[22997,81296,81298],{"id":81297},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81300,81301],{},[23,81302],{"alt":125,"src":81303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81305,81306],{},[23,81307],{"alt":125,"src":81308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[161,81310,81311],{},[71,81312,81313],{},"find()",[19,81315,81316],{},"循环查找，找到第一个就ok",[19,81318,81319],{},[62,81320,81323],{"href":81321,"rel":81322},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[66],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[196,81325,81327],{"className":50719,"code":81326,"language":50721,"meta":125,"style":125},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[81,81328,81329,81334,81339],{"__ignoreMap":125},[204,81330,81331],{"class":206,"line":207},[204,81332,81333],{"class":214},"const array1 = [5, 12, 8, 130, 44]\n",[204,81335,81336],{"class":206,"line":126},[204,81337,81338],{"class":214},"const found = array1.find((element) => element > 10)\n",[204,81340,81341],{"class":206,"line":131},[204,81342,81343],{"class":214},"console.log(found)  \u002F\u002F12\n",[19,81345,81346,81348,81349,81354,81355,81358,81359,81361,81362,81367,81368,81370,81371,81373,81374,81376,81377],{},[81,81347,81313],{}," 方法是一个",[62,81350,81353],{"href":81351,"rel":81352},"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",[66],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[81,81356,81357],{},"callbackFn"," 函数，直到 ",[81,81360,81357],{}," 返回一个",[62,81363,81366],{"href":81364,"rel":81365},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[66],"真值","。然后 ",[81,81369,81313],{}," 返回该元素并停止迭代数组。如果 ",[81,81372,81357],{}," 从未返回真值，则 ",[81,81375,81313],{}," 返回 ",[81,81378,81379],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[196,81381,81383],{"className":53153,"code":81382,"language":53155,"meta":125,"style":125},"\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",[81,81384,81385,81393,81401,81406,81411,81416,81420,81425,81430,81434,81439,81444,81448,81452,81457,81462,81466,81470,81475,81480,81485,81490,81495,81499,81504,81509,81514,81519,81523,81528,81536],{"__ignoreMap":125},[204,81386,81387,81389,81391],{"class":206,"line":207},[204,81388,1123],{"class":214},[204,81390,51886],{"class":51386},[204,81392,51393],{"class":214},[204,81394,81395,81397,81399],{"class":206,"line":126},[204,81396,52230],{"class":214},[204,81398,51899],{"class":51386},[204,81400,51393],{"class":214},[204,81402,81403],{"class":206,"line":131},[204,81404,81405],{"class":214},"    const arr = ['red', 'blue', 'green']\n",[204,81407,81408],{"class":206,"line":1281},[204,81409,81410],{"class":214},"    const found = arr.find(item => item === 'pink')\n",[204,81412,81413],{"class":206,"line":1287},[204,81414,81415],{"class":214},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[204,81417,81418],{"class":206,"line":1301},[204,81419,2486],{"emptyLinePlaceholder":135},[204,81421,81422],{"class":206,"line":1307},[204,81423,81424],{"class":214},"    \u002F\u002F 使用场景，用于查找数据\n",[204,81426,81427],{"class":206,"line":1398},[204,81428,81429],{"class":214},"    const arr1 = [\n",[204,81431,81432],{"class":206,"line":1404},[204,81433,79472],{"class":214},[204,81435,81436],{"class":206,"line":1416},[204,81437,81438],{"class":214},"        name: '小米',\n",[204,81440,81441],{"class":206,"line":1698},[204,81442,81443],{"class":214},"        price: 1999\n",[204,81445,81446],{"class":206,"line":1703},[204,81447,77978],{"class":214},[204,81449,81450],{"class":206,"line":1709},[204,81451,79472],{"class":214},[204,81453,81454],{"class":206,"line":1714},[204,81455,81456],{"class":214},"        name: '华为',\n",[204,81458,81459],{"class":206,"line":1728},[204,81460,81461],{"class":214},"        price: 3999\n",[204,81463,81464],{"class":206,"line":1733},[204,81465,52484],{"class":214},[204,81467,81468],{"class":206,"line":1739},[204,81469,53195],{"class":214},[204,81471,81472],{"class":206,"line":1760},[204,81473,81474],{"class":214},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[204,81476,81477],{"class":206,"line":1765},[204,81478,81479],{"class":214},"    \u002F\u002F const found1 = arr1.find(item => {\n",[204,81481,81482],{"class":206,"line":1779},[204,81483,81484],{"class":214},"    \u002F\u002F   if (item.name === '小米') {\n",[204,81486,81487],{"class":206,"line":1784},[204,81488,81489],{"class":214},"    \u002F\u002F     return item\n",[204,81491,81492],{"class":206,"line":1813},[204,81493,81494],{"class":214},"    \u002F\u002F   }\n",[204,81496,81497],{"class":206,"line":1818},[204,81498,63376],{"class":214},[204,81500,81501],{"class":206,"line":1835},[204,81502,81503],{"class":214},"    \u002F\u002F 另一种写法\n",[204,81505,81506],{"class":206,"line":1840},[204,81507,81508],{"class":214},"    const found1 = arr1.find(item => {\n",[204,81510,81511],{"class":206,"line":1845},[204,81512,81513],{"class":214},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[204,81515,81516],{"class":206,"line":1850},[204,81517,81518],{"class":214},"      return item.name = '小米'\n",[204,81520,81521],{"class":206,"line":1864},[204,81522,33547],{"class":214},[204,81524,81525],{"class":206,"line":1869},[204,81526,81527],{"class":214},"    console.log(found1)\n",[204,81529,81530,81532,81534],{"class":206,"line":2663},[204,81531,52503],{"class":214},[204,81533,51899],{"class":51386},[204,81535,51393],{"class":214},[204,81537,81538,81540,81542],{"class":206,"line":2677},[204,81539,51871],{"class":214},[204,81541,51886],{"class":51386},[204,81543,51393],{"class":214},[19,81545,81546],{},[23,81547],{"alt":125,"src":81548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81550,81551],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[161,81553,81554],{"start":126},[71,81555,81556],{},"every()返回的是布尔值",[19,81558,81559],{},[62,81560,81563],{"href":81561,"rel":81562},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[66],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81565,81566],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81568,81569],{},"some是只有有一个就没问题",[19,81571,81572],{},"every是必须全是才行",[196,81574,81578],{"className":81575,"code":81576,"language":81577,"meta":125,"style":125},"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",[81,81579,81580,81596,81610,81614,81623],{"__ignoreMap":125},[204,81581,81582,81584,81587,81589,81591,81594],{"class":206,"line":207},[204,81583,54535],{"class":210},[204,81585,81586],{"class":214}," isBigEnough(element, ",[204,81588,74144],{"class":210},[204,81590,12522],{"class":214},[204,81592,81593],{"class":210},"array",[204,81595,12529],{"class":214},[204,81597,81598,81601,81604,81606,81608],{"class":206,"line":126},[204,81599,81600],{"class":210},"  return",[204,81602,81603],{"class":214}," element ",[204,81605,1796],{"class":210},[204,81607,2124],{"class":263},[204,81609,1377],{"class":214},[204,81611,81612],{"class":206,"line":131},[204,81613,1651],{"class":214},[204,81615,81616,81619,81621],{"class":206,"line":1281},[204,81617,81618],{"class":214},"[12, 5, 8, 130, 44].every(isBigEnough); ",[204,81620,33415],{"class":210},[204,81622,54602],{"class":214},[204,81624,81625,81628,81630],{"class":206,"line":1287},[204,81626,81627],{"class":214},"[12, 54, 18, 130, 44].every(isBigEnough); ",[204,81629,33415],{"class":210},[204,81631,58026],{"class":214},[196,81633,81635],{"className":53153,"code":81634,"language":53155,"meta":125,"style":125},"\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",[81,81636,81637,81645,81653,81658,81662,81667,81672,81680],{"__ignoreMap":125},[204,81638,81639,81641,81643],{"class":206,"line":207},[204,81640,1123],{"class":214},[204,81642,51886],{"class":51386},[204,81644,51393],{"class":214},[204,81646,81647,81649,81651],{"class":206,"line":126},[204,81648,52230],{"class":214},[204,81650,51899],{"class":51386},[204,81652,51393],{"class":214},[204,81654,81655],{"class":206,"line":131},[204,81656,81657],{"class":214},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[204,81659,81660],{"class":206,"line":1281},[204,81661,78408],{"class":214},[204,81663,81664],{"class":206,"line":1287},[204,81665,81666],{"class":214},"    const flag = arr.every(item => item >= 10)\n",[204,81668,81669],{"class":206,"line":1301},[204,81670,81671],{"class":214},"    console.log(flag)    \u002F\u002Ftrue\n",[204,81673,81674,81676,81678],{"class":206,"line":1307},[204,81675,52503],{"class":214},[204,81677,51899],{"class":51386},[204,81679,51393],{"class":214},[204,81681,81682,81684,81686],{"class":206,"line":1398},[204,81683,51871],{"class":214},[204,81685,51886],{"class":51386},[204,81687,51393],{"class":214},[196,81689,81691],{"className":53153,"code":81690,"language":53155,"meta":125,"style":125},"\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",[81,81692,81693,81701,81709,81713,81718,81723,81728,81736],{"__ignoreMap":125},[204,81694,81695,81697,81699],{"class":206,"line":207},[204,81696,1123],{"class":214},[204,81698,51886],{"class":51386},[204,81700,51393],{"class":214},[204,81702,81703,81705,81707],{"class":206,"line":126},[204,81704,52230],{"class":214},[204,81706,51899],{"class":51386},[204,81708,51393],{"class":214},[204,81710,81711],{"class":206,"line":131},[204,81712,81657],{"class":214},[204,81714,81715],{"class":206,"line":1281},[204,81716,81717],{"class":214},"    const arr = [10, 0, 5]\n",[204,81719,81720],{"class":206,"line":1287},[204,81721,81722],{"class":214},"    const flag = arr.some(item => item >= 10)\n",[204,81724,81725],{"class":206,"line":1301},[204,81726,81727],{"class":214},"    console.log(flag)   \u002F\u002Ftrue\n",[204,81729,81730,81732,81734],{"class":206,"line":1307},[204,81731,52503],{"class":214},[204,81733,51899],{"class":51386},[204,81735,51393],{"class":214},[204,81737,81738,81740,81742],{"class":206,"line":1398},[204,81739,51871],{"class":214},[204,81741,51886],{"class":51386},[204,81743,51393],{"class":214},[22997,81745,81747],{"id":81746},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81749,81750],{},[23,81751],{"alt":125,"src":81752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[196,81754,81756],{"className":50719,"code":81755,"language":50721,"meta":125,"style":125},"\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",[81,81757,81758,81768,81782,81786,81794,81808,81828,81840,81848,81855,81867,81879,81891,81903,81913,81923,81927,81935,81943,81947,81955,81967,81975,81997,82002,82007,82040,82048,82056,82060],{"__ignoreMap":125},[204,81759,81760,81762,81764,81766],{"class":206,"line":207},[204,81761,51383],{"class":214},[204,81763,51387],{"class":51386},[204,81765,51390],{"class":2049},[204,81767,51393],{"class":214},[204,81769,81770,81772,81774,81776,81778,81780],{"class":206,"line":126},[204,81771,1123],{"class":214},[204,81773,50721],{"class":51386},[204,81775,51402],{"class":2049},[204,81777,260],{"class":214},[204,81779,51407],{"class":319},[204,81781,51393],{"class":214},[204,81783,81784],{"class":206,"line":131},[204,81785,2486],{"emptyLinePlaceholder":135},[204,81787,81788,81790,81792],{"class":206,"line":1281},[204,81789,1123],{"class":214},[204,81791,51420],{"class":51386},[204,81793,51393],{"class":214},[204,81795,81796,81798,81800,81802,81804,81806],{"class":206,"line":1287},[204,81797,52230],{"class":214},[204,81799,51430],{"class":51386},[204,81801,51433],{"class":2049},[204,81803,260],{"class":214},[204,81805,51438],{"class":319},[204,81807,51393],{"class":214},[204,81809,81810,81812,81814,81816,81818,81820,81822,81824,81826],{"class":206,"line":1301},[204,81811,52230],{"class":214},[204,81813,51430],{"class":51386},[204,81815,15007],{"class":2049},[204,81817,260],{"class":214},[204,81819,51477],{"class":319},[204,81821,51457],{"class":2049},[204,81823,260],{"class":214},[204,81825,51484],{"class":319},[204,81827,51393],{"class":214},[204,81829,81830,81832,81834,81836,81838],{"class":206,"line":1307},[204,81831,52230],{"class":214},[204,81833,51493],{"class":51386},[204,81835,51496],{"class":214},[204,81837,51493],{"class":51386},[204,81839,51393],{"class":214},[204,81841,81842,81844,81846],{"class":206,"line":1398},[204,81843,52230],{"class":214},[204,81845,5213],{"class":51386},[204,81847,51393],{"class":214},[204,81849,81850,81853],{"class":206,"line":1404},[204,81851,81852],{"class":51386},"    div",[204,81854,15659],{"class":214},[204,81856,81857,81859,81861,81863,81865],{"class":206,"line":1416},[204,81858,54857],{"class":263},[204,81860,51523],{"class":214},[204,81862,1808],{"class":263},[204,81864,51578],{"class":210},[204,81866,1377],{"class":214},[204,81868,81869,81871,81873,81875,81877],{"class":206,"line":1698},[204,81870,54871],{"class":263},[204,81872,51523],{"class":214},[204,81874,614],{"class":263},[204,81876,51578],{"class":210},[204,81878,1377],{"class":214},[204,81880,81881,81883,81885,81887,81889],{"class":206,"line":1703},[204,81882,57445],{"class":263},[204,81884,51523],{"class":214},[204,81886,614],{"class":263},[204,81888,51578],{"class":210},[204,81890,1377],{"class":214},[204,81892,81893,81895,81897,81899,81901],{"class":206,"line":1709},[204,81894,65219],{"class":263},[204,81896,51523],{"class":214},[204,81898,711],{"class":263},[204,81900,51578],{"class":210},[204,81902,1377],{"class":214},[204,81904,81905,81907,81909,81911],{"class":206,"line":1714},[204,81906,57372],{"class":263},[204,81908,51523],{"class":214},[204,81910,51678],{"class":263},[204,81912,1377],{"class":214},[204,81914,81915,81917,81919,81921],{"class":206,"line":1728},[204,81916,54970],{"class":263},[204,81918,51523],{"class":214},[204,81920,51731],{"class":263},[204,81922,1377],{"class":214},[204,81924,81925],{"class":206,"line":1733},[204,81926,2273],{"class":214},[204,81928,81929,81931,81933],{"class":206,"line":1739},[204,81930,52503],{"class":214},[204,81932,5213],{"class":51386},[204,81934,51393],{"class":214},[204,81936,81937,81939,81941],{"class":206,"line":1760},[204,81938,51871],{"class":214},[204,81940,51420],{"class":51386},[204,81942,51393],{"class":214},[204,81944,81945],{"class":206,"line":1765},[204,81946,2486],{"emptyLinePlaceholder":135},[204,81948,81949,81951,81953],{"class":206,"line":1779},[204,81950,1123],{"class":214},[204,81952,51886],{"class":51386},[204,81954,51393],{"class":214},[204,81956,81957,81959,81961,81963,81965],{"class":206,"line":1784},[204,81958,52230],{"class":214},[204,81960,51697],{"class":51386},[204,81962,55400],{"class":214},[204,81964,51697],{"class":51386},[204,81966,51393],{"class":214},[204,81968,81969,81971,81973],{"class":206,"line":1813},[204,81970,52230],{"class":214},[204,81972,51899],{"class":51386},[204,81974,51393],{"class":214},[204,81976,81977,81979,81982,81984,81987,81990,81992,81995],{"class":206,"line":1818},[204,81978,11308],{"class":210},[204,81980,81981],{"class":263}," spec",[204,81983,13651],{"class":210},[204,81985,81986],{"class":214}," { size: ",[204,81988,81989],{"class":319},"'40cm*40cm'",[204,81991,55550],{"class":214},[204,81993,81994],{"class":319},"'黑色'",[204,81996,55690],{"class":214},[204,81998,81999],{"class":206,"line":1835},[204,82000,82001],{"class":273},"    \u002F\u002F const arr = Object.values(spec)\n",[204,82003,82004],{"class":206,"line":1840},[204,82005,82006],{"class":273},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[204,82008,82009,82011,82013,82015,82018,82020,82022,82025,82028,82031,82033,82035,82038],{"class":206,"line":1845},[204,82010,52493],{"class":214},[204,82012,54485],{"class":2049},[204,82014,215],{"class":214},[204,82016,82017],{"class":319},"'div'",[204,82019,74335],{"class":214},[204,82021,260],{"class":210},[204,82023,82024],{"class":214}," Object.",[204,82026,82027],{"class":2049},"values",[204,82029,82030],{"class":214},"(spec).",[204,82032,74309],{"class":2049},[204,82034,215],{"class":214},[204,82036,82037],{"class":319},"'\u002F'",[204,82039,221],{"class":214},[204,82041,82042,82044,82046],{"class":206,"line":1850},[204,82043,52503],{"class":214},[204,82045,51899],{"class":51386},[204,82047,51393],{"class":214},[204,82049,82050,82052,82054],{"class":206,"line":1864},[204,82051,51871],{"class":214},[204,82053,51886],{"class":51386},[204,82055,51393],{"class":214},[204,82057,82058],{"class":206,"line":1869},[204,82059,2486],{"emptyLinePlaceholder":135},[204,82061,82062,82064,82066],{"class":206,"line":2663},[204,82063,51871],{"class":214},[204,82065,50721],{"class":51386},[204,82067,51393],{"class":214},[19,82069,82070],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22997,82072,82074],{"id":82073},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82076,82077],{},"静态方法，将伪数组转换为真数组",[19,82079,82080],{},[23,82081],{"alt":125,"src":82082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[196,82084,82086],{"className":53153,"code":82085,"language":53155,"meta":125,"style":125},"\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",[81,82087,82088,82096,82104,82116,82128,82140,82148,82156,82161,82166,82171,82176,82184],{"__ignoreMap":125},[204,82089,82090,82092,82094],{"class":206,"line":207},[204,82091,1123],{"class":214},[204,82093,51886],{"class":51386},[204,82095,51393],{"class":214},[204,82097,82098,82100,82102],{"class":206,"line":126},[204,82099,52230],{"class":214},[204,82101,68],{"class":51386},[204,82103,51393],{"class":214},[204,82105,82106,82108,82110,82112,82114],{"class":206,"line":131},[204,82107,51427],{"class":214},[204,82109,71],{"class":51386},[204,82111,55400],{"class":214},[204,82113,71],{"class":51386},[204,82115,51393],{"class":214},[204,82117,82118,82120,82122,82124,82126],{"class":206,"line":1281},[204,82119,51427],{"class":214},[204,82121,71],{"class":51386},[204,82123,55400],{"class":214},[204,82125,71],{"class":51386},[204,82127,51393],{"class":214},[204,82129,82130,82132,82134,82136,82138],{"class":206,"line":1287},[204,82131,51427],{"class":214},[204,82133,71],{"class":51386},[204,82135,55400],{"class":214},[204,82137,71],{"class":51386},[204,82139,51393],{"class":214},[204,82141,82142,82144,82146],{"class":206,"line":1301},[204,82143,52503],{"class":214},[204,82145,68],{"class":51386},[204,82147,51393],{"class":214},[204,82149,82150,82152,82154],{"class":206,"line":1307},[204,82151,52230],{"class":214},[204,82153,51899],{"class":51386},[204,82155,51393],{"class":214},[204,82157,82158],{"class":206,"line":1398},[204,82159,82160],{"class":214},"    const lis = document.querySelectorAll('li')\n",[204,82162,82163],{"class":206,"line":1404},[204,82164,82165],{"class":214},"    const liss = Array.from(lis)\n",[204,82167,82168],{"class":206,"line":1416},[204,82169,82170],{"class":214},"    liss.pop()\n",[204,82172,82173],{"class":206,"line":1698},[204,82174,82175],{"class":214},"    console.log(liss)\n",[204,82177,82178,82180,82182],{"class":206,"line":1703},[204,82179,52503],{"class":214},[204,82181,51899],{"class":51386},[204,82183,51393],{"class":214},[204,82185,82186,82188,82190],{"class":206,"line":1709},[204,82187,51871],{"class":214},[204,82189,51886],{"class":51386},[204,82191,51393],{"class":214},[19,82193,82194],{},[23,82195],{"alt":125,"src":82196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22085,82198,82200],{"id":82199},"_41053-string","4.10.5.3 String",[19,82202,82203],{},[23,82204],{"alt":125,"src":82205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22997,82207,82209],{"id":82208},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[196,82211,82213],{"className":53153,"code":82212,"language":53155,"meta":125,"style":125},"\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",[81,82214,82215,82223,82231,82236,82241,82246,82250,82255,82260,82265,82273],{"__ignoreMap":125},[204,82216,82217,82219,82221],{"class":206,"line":207},[204,82218,1123],{"class":214},[204,82220,51886],{"class":51386},[204,82222,51393],{"class":214},[204,82224,82225,82227,82229],{"class":206,"line":126},[204,82226,52230],{"class":214},[204,82228,51899],{"class":51386},[204,82230,51393],{"class":214},[204,82232,82233],{"class":206,"line":131},[204,82234,82235],{"class":214},"    \u002F\u002F 把字符串转化为数组\n",[204,82237,82238],{"class":206,"line":1281},[204,82239,82240],{"class":214},"    const str = 'pink,red'\n",[204,82242,82243],{"class":206,"line":1287},[204,82244,82245],{"class":214},"    const arr = str.split(',')\n",[204,82247,82248],{"class":206,"line":1301},[204,82249,80724],{"class":214},[204,82251,82252],{"class":206,"line":1307},[204,82253,82254],{"class":214},"    const str1 = '2025-8-25'\n",[204,82256,82257],{"class":206,"line":1398},[204,82258,82259],{"class":214},"    const arr1 = str1.split('-')\n",[204,82261,82262],{"class":206,"line":1404},[204,82263,82264],{"class":214},"    console.log(arr1)\n",[204,82266,82267,82269,82271],{"class":206,"line":1416},[204,82268,52503],{"class":214},[204,82270,51899],{"class":51386},[204,82272,51393],{"class":214},[204,82274,82275,82277,82279],{"class":206,"line":1698},[204,82276,51871],{"class":214},[204,82278,51886],{"class":51386},[204,82280,51393],{"class":214},[22997,82282,82284],{"id":82283},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82286,5268],{},[19,82288,82289],{},"substring(indexStart)",[19,82291,82292],{},"substring(indexStart, indexEnd)",[68,82294,82295,82306,82318,82328],{},[71,82296,82297,82298,82301,82302,82305],{},"如果省略了 ",[81,82299,82300],{},"indexEnd","，则 ",[81,82303,82304],{},"substring()"," 提取字符直到字符串的末尾",[71,82307,82308,82309,82312,82313,82301,82315,82317],{},"如果 ",[81,82310,82311],{},"indexStart"," 等于 ",[81,82314,82300],{},[81,82316,82304],{}," 返回一个空字符串",[71,82319,82308,82320,82322,82323,82301,82325,82327],{},[81,82321,82311],{}," 大于 ",[81,82324,82300],{},[81,82326,82304],{}," 的效果就像交换了这两个参数一样",[71,82329,82330],{},"结束的索引号不包含想要截取的部分",[196,82332,82334],{"className":81575,"code":82333,"language":81577,"meta":125,"style":125},"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",[81,82335,82336,82348,82352,82386,82416,82420,82451,82455,82482,82512,82542,82546,82577],{"__ignoreMap":125},[204,82337,82338,82341,82343,82346],{"class":206,"line":207},[204,82339,82340],{"class":214},"const anyString ",[204,82342,260],{"class":210},[204,82344,82345],{"class":319}," \"Mozilla\"",[204,82347,1377],{"class":214},[204,82349,82350],{"class":206,"line":126},[204,82351,2486],{"emptyLinePlaceholder":135},[204,82353,82354,82357,82359,82361,82363,82366,82368,82371,82373,82375,82377,82379,82381,82383],{"class":206,"line":131},[204,82355,82356],{"class":263},"console",[204,82358,771],{"class":214},[204,82360,58333],{"class":263},[204,82362,215],{"class":214},[204,82364,82365],{"class":263},"anyString",[204,82367,771],{"class":214},[204,82369,82370],{"class":263},"substring",[204,82372,215],{"class":214},[204,82374,405],{"class":263},[204,82376,12522],{"class":214},[204,82378,431],{"class":263},[204,82380,75339],{"class":214},[204,82382,33415],{"class":210},[204,82384,82385],{"class":319}," 'M'\n",[204,82387,82388,82390,82392,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414],{"class":206,"line":1281},[204,82389,82356],{"class":263},[204,82391,771],{"class":214},[204,82393,58333],{"class":263},[204,82395,215],{"class":214},[204,82397,82365],{"class":263},[204,82399,771],{"class":214},[204,82401,82370],{"class":263},[204,82403,215],{"class":214},[204,82405,431],{"class":263},[204,82407,12522],{"class":214},[204,82409,405],{"class":263},[204,82411,75339],{"class":214},[204,82413,33415],{"class":210},[204,82415,82385],{"class":319},[204,82417,82418],{"class":206,"line":1287},[204,82419,2486],{"emptyLinePlaceholder":135},[204,82421,82422,82424,82426,82428,82430,82432,82434,82436,82438,82440,82442,82444,82446,82448],{"class":206,"line":1301},[204,82423,82356],{"class":263},[204,82425,771],{"class":214},[204,82427,58333],{"class":263},[204,82429,215],{"class":214},[204,82431,82365],{"class":263},[204,82433,771],{"class":214},[204,82435,82370],{"class":263},[204,82437,215],{"class":214},[204,82439,405],{"class":263},[204,82441,12522],{"class":214},[204,82443,557],{"class":263},[204,82445,75339],{"class":214},[204,82447,33415],{"class":210},[204,82449,82450],{"class":319}," 'Mozill'\n",[204,82452,82453],{"class":206,"line":1307},[204,82454,2486],{"emptyLinePlaceholder":135},[204,82456,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477,82479],{"class":206,"line":1398},[204,82458,82356],{"class":263},[204,82460,771],{"class":214},[204,82462,58333],{"class":263},[204,82464,215],{"class":214},[204,82466,82365],{"class":263},[204,82468,771],{"class":214},[204,82470,82370],{"class":263},[204,82472,215],{"class":214},[204,82474,506],{"class":263},[204,82476,75339],{"class":214},[204,82478,33415],{"class":210},[204,82480,82481],{"class":319}," 'lla'\n",[204,82483,82484,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510],{"class":206,"line":1404},[204,82485,82356],{"class":263},[204,82487,771],{"class":214},[204,82489,58333],{"class":263},[204,82491,215],{"class":214},[204,82493,82365],{"class":263},[204,82495,771],{"class":214},[204,82497,82370],{"class":263},[204,82499,215],{"class":214},[204,82501,506],{"class":263},[204,82503,12522],{"class":214},[204,82505,582],{"class":263},[204,82507,75395],{"class":214},[204,82509,33415],{"class":210},[204,82511,82481],{"class":319},[204,82513,82514,82516,82518,82520,82522,82524,82526,82528,82530,82532,82534,82536,82538,82540],{"class":206,"line":1416},[204,82515,82356],{"class":263},[204,82517,771],{"class":214},[204,82519,58333],{"class":263},[204,82521,215],{"class":214},[204,82523,82365],{"class":263},[204,82525,771],{"class":214},[204,82527,82370],{"class":263},[204,82529,215],{"class":214},[204,82531,582],{"class":263},[204,82533,12522],{"class":214},[204,82535,506],{"class":263},[204,82537,75339],{"class":214},[204,82539,33415],{"class":210},[204,82541,82481],{"class":319},[204,82543,82544],{"class":206,"line":1698},[204,82545,2486],{"emptyLinePlaceholder":135},[204,82547,82548,82550,82552,82554,82556,82558,82560,82562,82564,82566,82568,82570,82572,82574],{"class":206,"line":1703},[204,82549,82356],{"class":263},[204,82551,771],{"class":214},[204,82553,58333],{"class":263},[204,82555,215],{"class":214},[204,82557,82365],{"class":263},[204,82559,771],{"class":214},[204,82561,82370],{"class":263},[204,82563,215],{"class":214},[204,82565,405],{"class":263},[204,82567,12522],{"class":214},[204,82569,582],{"class":263},[204,82571,75339],{"class":214},[204,82573,33415],{"class":210},[204,82575,82576],{"class":319}," 'Mozilla'\n",[204,82578,82579,82581,82583,82585,82587,82589,82591,82593,82595,82597,82599,82601,82603,82605],{"class":206,"line":1709},[204,82580,82356],{"class":263},[204,82582,771],{"class":214},[204,82584,58333],{"class":263},[204,82586,215],{"class":214},[204,82588,82365],{"class":263},[204,82590,771],{"class":214},[204,82592,82370],{"class":263},[204,82594,215],{"class":214},[204,82596,405],{"class":263},[204,82598,12522],{"class":214},[204,82600,659],{"class":263},[204,82602,75339],{"class":214},[204,82604,33415],{"class":210},[204,82606,82576],{"class":319},[22997,82608,82610],{"id":82609},"_410533-startswith","4.10.5.3.3 startsWith",[19,82612,82613,82616,82617,82622,82623,82625,82626],{},[81,82614,82615],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[30,82618,82619],{},[81,82620,82621],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[81,82624,1449],{}," 或 ",[81,82627,66106],{},[196,82629,82631],{"className":77581,"code":82630,"language":77583,"meta":125,"style":125},"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",[81,82632,82633,82645,82664,82669,82689],{"__ignoreMap":125},[204,82634,82635,82637,82640,82642],{"class":206,"line":207},[204,82636,6879],{"class":210},[204,82638,82639],{"class":214}," str1 ",[204,82641,260],{"class":210},[204,82643,82644],{"class":319}," \"Saturday night plans\"\n",[204,82646,82647,82649,82651,82654,82657,82659,82662],{"class":206,"line":126},[204,82648,77618],{"class":214},[204,82650,58333],{"class":2049},[204,82652,82653],{"class":214},"(str1.",[204,82655,82656],{"class":2049},"startsWith",[204,82658,215],{"class":214},[204,82660,82661],{"class":319},"\"Sat\"",[204,82663,30583],{"class":214},[204,82665,82666],{"class":206,"line":131},[204,82667,82668],{"class":273},"\u002F\u002F Expected output: true\n",[204,82670,82671,82673,82675,82677,82679,82681,82683,82685,82687],{"class":206,"line":1281},[204,82672,77618],{"class":214},[204,82674,58333],{"class":2049},[204,82676,82653],{"class":214},[204,82678,82656],{"class":2049},[204,82680,215],{"class":214},[204,82682,82661],{"class":319},[204,82684,12522],{"class":214},[204,82686,286],{"class":263},[204,82688,30583],{"class":214},[204,82690,82691],{"class":206,"line":1287},[204,82692,82693],{"class":273},"\u002F\u002F Expected output: false\n",[196,82695,82697],{"className":50719,"code":82696,"language":50721,"meta":125,"style":125},"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",[81,82698,82699,82704,82709,82713,82718,82723],{"__ignoreMap":125},[204,82700,82701],{"class":206,"line":207},[204,82702,82703],{"class":214},"startsWith(searchString)\n",[204,82705,82706],{"class":206,"line":126},[204,82707,82708],{"class":214},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[204,82710,82711],{"class":206,"line":131},[204,82712,2486],{"emptyLinePlaceholder":135},[204,82714,82715],{"class":206,"line":1281},[204,82716,82717],{"class":214},"const str3 = 'pink老师上课中'\n",[204,82719,82720],{"class":206,"line":1287},[204,82721,82722],{"class":214},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[204,82724,82725],{"class":206,"line":1301},[204,82726,82727],{"class":214},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22997,82729,82731],{"id":82730},"_410534-includes","4.10.5.3.4 includes",[19,82733,82734],{},"includes(searchString) includes(searchString, position)",[161,82736,82737],{},[71,82738,82739],{},"searchString:",[19,82741,82742,82743,82745,82746,82751,82752,82757,82758,21587,82761,82764,82765,82768],{},"一个要在 ",[81,82744,1386],{}," 中查找的字符串。",[62,82747,82750],{"href":82748,"rel":82749},"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",[66],"不能是正则表达式","。所有非正则表达式的值都会被",[62,82753,82756],{"href":82754,"rel":82755},"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",[66],"强制转换为字符串","，因此如果该参数被省略或传入 ",[81,82759,82760],{},"undefined",[81,82762,82763],{},"includes()"," 方法会在字符串中搜索 ",[81,82766,82767],{},"\"undefined\"","，这通常不是你想要的",[161,82770,82771],{"start":126},[71,82772,82773,1072],{},[81,82774,82775],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82777,82778,82779,82782,82783],{},"在字符串中开始搜索 ",[81,82780,82781],{},"searchString"," 的位置。默认值为 ",[81,82784,405],{},[161,82786,82787],{"start":131},[71,82788,82789],{},"返回值：",[19,82791,82792,82793,82795,82796,82800,82801],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[81,82794,82781],{}," 为空字符串的情况），则返回 ",[30,82797,82798],{},[81,82799,1449],{}," ，否则返回 ",[30,82802,82803],{},[81,82804,66106],{},[161,82806,82807],{"start":1281},[71,82808,82809],{},"异常：",[19,82811,82308,82812,13882,82814,82818],{},[81,82813,82781],{},[62,82815,82817],{"href":82748,"rel":82816},[66],"是一个正则表达式","，则会抛出",[19,82820,82821],{},"只要是有就是true，不需要非得以谁开头结尾",[196,82823,82825],{"className":77581,"code":82824,"language":77583,"meta":125,"style":125},"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",[81,82826,82827,82838,82861,82880,82900,82922,82941],{"__ignoreMap":125},[204,82828,82829,82831,82833,82835],{"class":206,"line":207},[204,82830,6879],{"class":210},[204,82832,79861],{"class":214},[204,82834,260],{"class":210},[204,82836,82837],{"class":319}," \"To be, or not to be, that is the question.\"\n",[204,82839,82840,82842,82844,82847,82850,82852,82855,82858],{"class":206,"line":126},[204,82841,77618],{"class":214},[204,82843,58333],{"class":2049},[204,82845,82846],{"class":214},"(str.",[204,82848,82849],{"class":2049},"includes",[204,82851,215],{"class":214},[204,82853,82854],{"class":319},"\"To be\"",[204,82856,82857],{"class":214},"))",[204,82859,82860],{"class":273},"  \u002F\u002F true\n",[204,82862,82863,82865,82867,82869,82871,82873,82876,82878],{"class":206,"line":131},[204,82864,77618],{"class":214},[204,82866,58333],{"class":2049},[204,82868,82846],{"class":214},[204,82870,82849],{"class":2049},[204,82872,215],{"class":214},[204,82874,82875],{"class":319},"\"question\"",[204,82877,82857],{"class":214},[204,82879,82860],{"class":273},[204,82881,82882,82884,82886,82888,82890,82892,82895,82897],{"class":206,"line":1281},[204,82883,77618],{"class":214},[204,82885,58333],{"class":2049},[204,82887,82846],{"class":214},[204,82889,82849],{"class":2049},[204,82891,215],{"class":214},[204,82893,82894],{"class":319},"\"nonexistent\"",[204,82896,82857],{"class":214},[204,82898,82899],{"class":273},"  \u002F\u002F false\n",[204,82901,82902,82904,82906,82908,82910,82912,82914,82916,82918,82920],{"class":206,"line":1287},[204,82903,77618],{"class":214},[204,82905,58333],{"class":2049},[204,82907,82846],{"class":214},[204,82909,82849],{"class":2049},[204,82911,215],{"class":214},[204,82913,82854],{"class":319},[204,82915,12522],{"class":214},[204,82917,431],{"class":263},[204,82919,82857],{"class":214},[204,82921,82899],{"class":273},[204,82923,82924,82926,82928,82930,82932,82934,82937,82939],{"class":206,"line":1301},[204,82925,77618],{"class":214},[204,82927,58333],{"class":2049},[204,82929,82846],{"class":214},[204,82931,82849],{"class":2049},[204,82933,215],{"class":214},[204,82935,82936],{"class":319},"\"TO BE\"",[204,82938,82857],{"class":214},[204,82940,82899],{"class":273},[204,82942,82943,82945,82947,82949,82951,82953,82955,82957],{"class":206,"line":1307},[204,82944,77618],{"class":214},[204,82946,58333],{"class":2049},[204,82948,82846],{"class":214},[204,82950,82849],{"class":2049},[204,82952,215],{"class":214},[204,82954,7739],{"class":319},[204,82956,82857],{"class":214},[204,82958,82860],{"class":273},[22997,82960,82962],{"id":82961},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[196,82964,82966],{"className":53153,"code":82965,"language":53155,"meta":125,"style":125},"\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",[81,82967,82968,82976,82984,82989,82994,82999,83004,83009,83017],{"__ignoreMap":125},[204,82969,82970,82972,82974],{"class":206,"line":207},[204,82971,1123],{"class":214},[204,82973,51886],{"class":51386},[204,82975,51393],{"class":214},[204,82977,82978,82980,82982],{"class":206,"line":126},[204,82979,52230],{"class":214},[204,82981,51899],{"class":51386},[204,82983,51393],{"class":214},[204,82985,82986],{"class":206,"line":131},[204,82987,82988],{"class":214},"    const num = 10\n",[204,82990,82991],{"class":206,"line":1281},[204,82992,82993],{"class":214},"    \u002F\u002F 强制转换\n",[204,82995,82996],{"class":206,"line":1287},[204,82997,82998],{"class":214},"    console.log(String(num))\n",[204,83000,83001],{"class":206,"line":1301},[204,83002,83003],{"class":214},"    \u002F\u002F toString()方法转换\n",[204,83005,83006],{"class":206,"line":1307},[204,83007,83008],{"class":214},"    console.log(num.toString())\n",[204,83010,83011,83013,83015],{"class":206,"line":1398},[204,83012,52503],{"class":214},[204,83014,51899],{"class":51386},[204,83016,51393],{"class":214},[204,83018,83019,83021,83023],{"class":206,"line":1404},[204,83020,51871],{"class":214},[204,83022,51886],{"class":51386},[204,83024,51393],{"class":214},[22997,83026,83028],{"id":83027},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83030,83031],{},[23,83032],{"alt":125,"src":83033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[196,83035,83037],{"className":50719,"code":83036,"language":50721,"meta":125,"style":125},"\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",[81,83038,83039,83049,83063,83067,83075,83089,83109,83121,83129,83133,83141,83153,83161,83173,83178,83183,83188,83235,83251,83259,83267,83271],{"__ignoreMap":125},[204,83040,83041,83043,83045,83047],{"class":206,"line":207},[204,83042,51383],{"class":214},[204,83044,51387],{"class":51386},[204,83046,51390],{"class":2049},[204,83048,51393],{"class":214},[204,83050,83051,83053,83055,83057,83059,83061],{"class":206,"line":126},[204,83052,1123],{"class":214},[204,83054,50721],{"class":51386},[204,83056,51402],{"class":2049},[204,83058,260],{"class":214},[204,83060,51407],{"class":319},[204,83062,51393],{"class":214},[204,83064,83065],{"class":206,"line":131},[204,83066,2486],{"emptyLinePlaceholder":135},[204,83068,83069,83071,83073],{"class":206,"line":1281},[204,83070,1123],{"class":214},[204,83072,51420],{"class":51386},[204,83074,51393],{"class":214},[204,83076,83077,83079,83081,83083,83085,83087],{"class":206,"line":1287},[204,83078,52230],{"class":214},[204,83080,51430],{"class":51386},[204,83082,51433],{"class":2049},[204,83084,260],{"class":214},[204,83086,51438],{"class":319},[204,83088,51393],{"class":214},[204,83090,83091,83093,83095,83097,83099,83101,83103,83105,83107],{"class":206,"line":1301},[204,83092,52230],{"class":214},[204,83094,51430],{"class":51386},[204,83096,15007],{"class":2049},[204,83098,260],{"class":214},[204,83100,51477],{"class":319},[204,83102,51457],{"class":2049},[204,83104,260],{"class":214},[204,83106,51484],{"class":319},[204,83108,51393],{"class":214},[204,83110,83111,83113,83115,83117,83119],{"class":206,"line":1307},[204,83112,52230],{"class":214},[204,83114,51493],{"class":51386},[204,83116,51496],{"class":214},[204,83118,51493],{"class":51386},[204,83120,51393],{"class":214},[204,83122,83123,83125,83127],{"class":206,"line":1398},[204,83124,51871],{"class":214},[204,83126,51420],{"class":51386},[204,83128,51393],{"class":214},[204,83130,83131],{"class":206,"line":1404},[204,83132,2486],{"emptyLinePlaceholder":135},[204,83134,83135,83137,83139],{"class":206,"line":1416},[204,83136,1123],{"class":214},[204,83138,51886],{"class":51386},[204,83140,51393],{"class":214},[204,83142,83143,83145,83147,83149,83151],{"class":206,"line":1698},[204,83144,52230],{"class":214},[204,83146,51697],{"class":51386},[204,83148,55400],{"class":214},[204,83150,51697],{"class":51386},[204,83152,51393],{"class":214},[204,83154,83155,83157,83159],{"class":206,"line":1703},[204,83156,52230],{"class":214},[204,83158,51899],{"class":51386},[204,83160,51393],{"class":214},[204,83162,83163,83165,83168,83170],{"class":206,"line":1709},[204,83164,11308],{"class":210},[204,83166,83167],{"class":263}," gift",[204,83169,13651],{"class":210},[204,83171,83172],{"class":319}," '50g的茶叶，清洗球'\n",[204,83174,83175],{"class":206,"line":1714},[204,83176,83177],{"class":273},"    \u002F\u002F 1.把字符串拆分为数组\n",[204,83179,83180],{"class":206,"line":1728},[204,83181,83182],{"class":273},"    \u002F\u002F console.log(gift.split(','))\n",[204,83184,83185],{"class":206,"line":1733},[204,83186,83187],{"class":273},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[204,83189,83190,83192,83194,83196,83199,83202,83204,83207,83209,83211,83213,83215,83217,83220,83222,83225,83227,83229,83231,83233],{"class":206,"line":1739},[204,83191,11308],{"class":210},[204,83193,74005],{"class":263},[204,83195,13651],{"class":210},[204,83197,83198],{"class":214}," gift.",[204,83200,83201],{"class":2049},"split",[204,83203,215],{"class":214},[204,83205,83206],{"class":319},"'，'",[204,83208,30912],{"class":214},[204,83210,74130],{"class":2049},[204,83212,215],{"class":214},[204,83214,79881],{"class":5303},[204,83216,79884],{"class":210},[204,83218,83219],{"class":319}," `\u003Cspan>【赠品】${",[204,83221,79881],{"class":214},[204,83223,83224],{"class":319},"}\u003C\u002Fspan>\u003Cbr>`",[204,83226,30912],{"class":214},[204,83228,74309],{"class":2049},[204,83230,215],{"class":214},[204,83232,74314],{"class":319},[204,83234,221],{"class":214},[204,83236,83237,83239,83241,83243,83245,83247,83249],{"class":206,"line":1760},[204,83238,52493],{"class":214},[204,83240,54485],{"class":2049},[204,83242,215],{"class":214},[204,83244,82017],{"class":319},[204,83246,74335],{"class":214},[204,83248,260],{"class":210},[204,83250,74071],{"class":214},[204,83252,83253,83255,83257],{"class":206,"line":1765},[204,83254,52503],{"class":214},[204,83256,51899],{"class":51386},[204,83258,51393],{"class":214},[204,83260,83261,83263,83265],{"class":206,"line":1779},[204,83262,51871],{"class":214},[204,83264,51886],{"class":51386},[204,83266,51393],{"class":214},[204,83268,83269],{"class":206,"line":1784},[204,83270,2486],{"emptyLinePlaceholder":135},[204,83272,83273,83275,83277],{"class":206,"line":1813},[204,83274,51871],{"class":214},[204,83276,50721],{"class":51386},[204,83278,51393],{"class":214},[22085,83280,83282],{"id":83281},"_41054-number","4.10.5.4 Number",[19,83284,83285],{},[23,83286],{"alt":125,"src":83287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83289,83290],{},"整数也可以进行toFixed来保留小数",[19,83292,83293],{},"比如：",[19,83295,83296],{},"const price=10",[19,83298,83299],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22085,83301,83303],{"id":83302},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83305,83306],{},[23,83307],{"alt":125,"src":83308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[196,83310,83312],{"className":50719,"code":83311,"language":50721,"meta":125,"style":125},"\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",[81,83313,83314,83324,83338,83342,83350,83364,83384,83396,83404,83410,83420,83430,83440,83444,83448,83454,83466,83480,83484,83488,83494,83506,83522,83532,83548,83552,83556,83562,83572,83582,83586,83590,83598,83610,83622,83634,83638,83642,83650,83662,83666,83670,83681,83691,83703,83715,83725,83729,83733,83741,83750,83762,83772,83782,83786,83790,83798,83807,83814,83824,83836,83840,83844,83853,83863,83874,83886,83898,83902,83906,83915,83925,83936,83940,83944,83950,83962,83974,83984,83994,84012,84024,84028,84032,84041,84053,84063,84073,84085,84089,84097,84105,84109,84117,84131,84139,84153,84181,84189,84197,84207,84211,84219,84227,84236,84244,84253,84263,84267,84271,84279,84287,84296,84304,84312,84325,84329,84333,84341,84349,84358,84366,84374,84389,84393,84397,84405,84413,84422,84430,84438,84452,84460,84464,84468,84473,84499,84504,84541,84546,84569,84574,84628,84633,84669,84673,84679,84684,84693,84707,84716,84735,84744,84754,84759,84764,84777,84782,84836,84862,84870,84878,84882],{"__ignoreMap":125},[204,83315,83316,83318,83320,83322],{"class":206,"line":207},[204,83317,51383],{"class":214},[204,83319,51387],{"class":51386},[204,83321,51390],{"class":2049},[204,83323,51393],{"class":214},[204,83325,83326,83328,83330,83332,83334,83336],{"class":206,"line":126},[204,83327,1123],{"class":214},[204,83329,50721],{"class":51386},[204,83331,51402],{"class":2049},[204,83333,260],{"class":214},[204,83335,51407],{"class":319},[204,83337,51393],{"class":214},[204,83339,83340],{"class":206,"line":131},[204,83341,2486],{"emptyLinePlaceholder":135},[204,83343,83344,83346,83348],{"class":206,"line":1281},[204,83345,1123],{"class":214},[204,83347,51420],{"class":51386},[204,83349,51393],{"class":214},[204,83351,83352,83354,83356,83358,83360,83362],{"class":206,"line":1287},[204,83353,52230],{"class":214},[204,83355,51430],{"class":51386},[204,83357,51433],{"class":2049},[204,83359,260],{"class":214},[204,83361,51438],{"class":319},[204,83363,51393],{"class":214},[204,83365,83366,83368,83370,83372,83374,83376,83378,83380,83382],{"class":206,"line":1301},[204,83367,52230],{"class":214},[204,83369,51430],{"class":51386},[204,83371,15007],{"class":2049},[204,83373,260],{"class":214},[204,83375,51477],{"class":319},[204,83377,51457],{"class":2049},[204,83379,260],{"class":214},[204,83381,51484],{"class":319},[204,83383,51393],{"class":214},[204,83385,83386,83388,83390,83392,83394],{"class":206,"line":1307},[204,83387,52230],{"class":214},[204,83389,51493],{"class":51386},[204,83391,51496],{"class":214},[204,83393,51493],{"class":51386},[204,83395,51393],{"class":214},[204,83397,83398,83400,83402],{"class":206,"line":1398},[204,83399,52230],{"class":214},[204,83401,5213],{"class":51386},[204,83403,51393],{"class":214},[204,83405,83406,83408],{"class":206,"line":1404},[204,83407,6490],{"class":51386},[204,83409,15659],{"class":214},[204,83411,83412,83414,83416,83418],{"class":206,"line":1416},[204,83413,54781],{"class":263},[204,83415,51523],{"class":214},[204,83417,405],{"class":263},[204,83419,1377],{"class":214},[204,83421,83422,83424,83426,83428],{"class":206,"line":1698},[204,83423,54792],{"class":263},[204,83425,51523],{"class":214},[204,83427,405],{"class":263},[204,83429,1377],{"class":214},[204,83431,83432,83434,83436,83438],{"class":206,"line":1703},[204,83433,72682],{"class":263},[204,83435,51523],{"class":214},[204,83437,60591],{"class":263},[204,83439,1377],{"class":214},[204,83441,83442],{"class":206,"line":1709},[204,83443,2273],{"class":214},[204,83445,83446],{"class":206,"line":1714},[204,83447,2486],{"emptyLinePlaceholder":135},[204,83449,83450,83452],{"class":206,"line":1728},[204,83451,62209],{"class":2049},[204,83453,15659],{"class":214},[204,83455,83456,83458,83460,83462,83464],{"class":206,"line":1733},[204,83457,54857],{"class":263},[204,83459,51523],{"class":214},[204,83461,78660],{"class":263},[204,83463,51578],{"class":210},[204,83465,1377],{"class":214},[204,83467,83468,83470,83472,83474,83476,83478],{"class":206,"line":1739},[204,83469,54792],{"class":263},[204,83471,51523],{"class":214},[204,83473,524],{"class":263},[204,83475,51578],{"class":210},[204,83477,51642],{"class":263},[204,83479,1377],{"class":214},[204,83481,83482],{"class":206,"line":1760},[204,83483,2273],{"class":214},[204,83485,83486],{"class":206,"line":1765},[204,83487,2486],{"emptyLinePlaceholder":135},[204,83489,83490,83492],{"class":206,"line":1779},[204,83491,78711],{"class":2049},[204,83493,15659],{"class":214},[204,83495,83496,83498,83500,83502,83504],{"class":206,"line":1784},[204,83497,54781],{"class":263},[204,83499,51523],{"class":214},[204,83501,788],{"class":263},[204,83503,51578],{"class":210},[204,83505,1377],{"class":214},[204,83507,83508,83510,83512,83514,83516,83518,83520],{"class":206,"line":1813},[204,83509,61946],{"class":263},[204,83511,51523],{"class":214},[204,83513,28207],{"class":263},[204,83515,78766],{"class":263},[204,83517,78769],{"class":263},[204,83519,908],{"class":210},[204,83521,1377],{"class":214},[204,83523,83524,83526,83528,83530],{"class":206,"line":1818},[204,83525,55095],{"class":263},[204,83527,51523],{"class":214},[204,83529,51563],{"class":263},[204,83531,1377],{"class":214},[204,83533,83534,83536,83538,83540,83542,83544,83546],{"class":206,"line":1835},[204,83535,62063],{"class":263},[204,83537,51523],{"class":214},[204,83539,431],{"class":263},[204,83541,51578],{"class":210},[204,83543,51607],{"class":263},[204,83545,62330],{"class":263},[204,83547,1377],{"class":214},[204,83549,83550],{"class":206,"line":1840},[204,83551,2273],{"class":214},[204,83553,83554],{"class":206,"line":1845},[204,83555,2486],{"emptyLinePlaceholder":135},[204,83557,83558,83560],{"class":206,"line":1850},[204,83559,78829],{"class":2049},[204,83561,15659],{"class":214},[204,83563,83564,83566,83568,83570],{"class":206,"line":1864},[204,83565,62111],{"class":263},[204,83567,51523],{"class":214},[204,83569,62116],{"class":263},[204,83571,1377],{"class":214},[204,83573,83574,83576,83578,83580],{"class":206,"line":1869},[204,83575,54970],{"class":263},[204,83577,51523],{"class":214},[204,83579,61904],{"class":263},[204,83581,1377],{"class":214},[204,83583,83584],{"class":206,"line":2663},[204,83585,2273],{"class":214},[204,83587,83588],{"class":206,"line":2677},[204,83589,2486],{"emptyLinePlaceholder":135},[204,83591,83592,83594,83596],{"class":206,"line":2685},[204,83593,78711],{"class":2049},[204,83595,55701],{"class":51386},[204,83597,15659],{"class":214},[204,83599,83600,83602,83604,83606,83608],{"class":206,"line":2690},[204,83601,54857],{"class":263},[204,83603,51523],{"class":214},[204,83605,825],{"class":263},[204,83607,51578],{"class":210},[204,83609,1377],{"class":214},[204,83611,83612,83614,83616,83618,83620],{"class":206,"line":2696},[204,83613,54871],{"class":263},[204,83615,51523],{"class":214},[204,83617,825],{"class":263},[204,83619,51578],{"class":210},[204,83621,1377],{"class":214},[204,83623,83624,83626,83628,83630,83632],{"class":206,"line":2702},[204,83625,61836],{"class":263},[204,83627,51523],{"class":214},[204,83629,532],{"class":263},[204,83631,51578],{"class":210},[204,83633,1377],{"class":214},[204,83635,83636],{"class":206,"line":2707},[204,83637,2273],{"class":214},[204,83639,83640],{"class":206,"line":8035},[204,83641,2486],{"emptyLinePlaceholder":135},[204,83643,83644,83646,83648],{"class":206,"line":8059},[204,83645,78711],{"class":2049},[204,83647,62390],{"class":2049},[204,83649,15659],{"class":214},[204,83651,83652,83654,83656,83658,83660],{"class":206,"line":8064},[204,83653,54857],{"class":263},[204,83655,51523],{"class":214},[204,83657,1808],{"class":263},[204,83659,51578],{"class":210},[204,83661,1377],{"class":214},[204,83663,83664],{"class":206,"line":8070},[204,83665,2273],{"class":214},[204,83667,83668],{"class":206,"line":8097},[204,83669,2486],{"emptyLinePlaceholder":135},[204,83671,83672,83674,83676,83679],{"class":206,"line":8102},[204,83673,78711],{"class":2049},[204,83675,62390],{"class":2049},[204,83677,83678],{"class":2049}," .tag",[204,83680,15659],{"class":214},[204,83682,83683,83685,83687,83689],{"class":206,"line":8108},[204,83684,55095],{"class":263},[204,83686,51523],{"class":214},[204,83688,60955],{"class":263},[204,83690,1377],{"class":214},[204,83692,83693,83695,83697,83699,83701],{"class":206,"line":8120},[204,83694,54781],{"class":263},[204,83696,51523],{"class":214},[204,83698,292],{"class":263},[204,83700,51578],{"class":210},[204,83702,1377],{"class":214},[204,83704,83705,83707,83709,83711,83713],{"class":206,"line":8132},[204,83706,55008],{"class":263},[204,83708,51523],{"class":214},[204,83710,711],{"class":263},[204,83712,51578],{"class":210},[204,83714,1377],{"class":214},[204,83716,83717,83719,83721,83723],{"class":206,"line":8144},[204,83718,57502],{"class":263},[204,83720,51523],{"class":214},[204,83722,62156],{"class":263},[204,83724,1377],{"class":214},[204,83726,83727],{"class":206,"line":9803},[204,83728,2273],{"class":214},[204,83730,83731],{"class":206,"line":9828},[204,83732,2486],{"emptyLinePlaceholder":135},[204,83734,83735,83737,83739],{"class":206,"line":9851},[204,83736,78711],{"class":2049},[204,83738,79003],{"class":2049},[204,83740,31552],{"class":214},[204,83742,83743,83745,83748],{"class":206,"line":9875},[204,83744,78711],{"class":2049},[204,83746,83747],{"class":2049}," .sub-total",[204,83749,15659],{"class":214},[204,83751,83752,83754,83756,83758,83760],{"class":206,"line":9880},[204,83753,55008],{"class":263},[204,83755,51523],{"class":214},[204,83757,863],{"class":263},[204,83759,51578],{"class":210},[204,83761,1377],{"class":214},[204,83763,83764,83766,83768,83770],{"class":206,"line":9885},[204,83765,57502],{"class":263},[204,83767,51523],{"class":214},[204,83769,79026],{"class":263},[204,83771,1377],{"class":214},[204,83773,83774,83776,83778,83780],{"class":206,"line":9890},[204,83775,61923],{"class":263},[204,83777,51523],{"class":214},[204,83779,431],{"class":263},[204,83781,1377],{"class":214},[204,83783,83784],{"class":206,"line":9899},[204,83785,2273],{"class":214},[204,83787,83788],{"class":206,"line":9904},[204,83789,2486],{"emptyLinePlaceholder":135},[204,83791,83792,83794,83796],{"class":206,"line":9910},[204,83793,78711],{"class":2049},[204,83795,79043],{"class":2049},[204,83797,31552],{"class":214},[204,83799,83800,83802,83805],{"class":206,"line":9931},[204,83801,78711],{"class":2049},[204,83803,83804],{"class":2049}," .sub-total::before",[204,83806,31552],{"class":214},[204,83808,83809,83812],{"class":206,"line":9937},[204,83810,83811],{"class":2049},"    .amount::before",[204,83813,15659],{"class":214},[204,83815,83816,83818,83820,83822],{"class":206,"line":9951},[204,83817,79050],{"class":263},[204,83819,51523],{"class":214},[204,83821,79055],{"class":319},[204,83823,1377],{"class":214},[204,83825,83826,83828,83830,83832,83834],{"class":206,"line":9957},[204,83827,55008],{"class":263},[204,83829,51523],{"class":214},[204,83831,711],{"class":263},[204,83833,51578],{"class":210},[204,83835,1377],{"class":214},[204,83837,83838],{"class":206,"line":9984},[204,83839,2273],{"class":214},[204,83841,83842],{"class":206,"line":9993},[204,83843,2486],{"emptyLinePlaceholder":135},[204,83845,83846,83848,83851],{"class":206,"line":9999},[204,83847,78711],{"class":2049},[204,83849,83850],{"class":2049}," .spec",[204,83852,15659],{"class":214},[204,83854,83855,83857,83859,83861],{"class":206,"line":10007},[204,83856,61923],{"class":263},[204,83858,51523],{"class":214},[204,83860,292],{"class":263},[204,83862,1377],{"class":214},[204,83864,83865,83867,83869,83872],{"class":206,"line":10012},[204,83866,57502],{"class":263},[204,83868,51523],{"class":214},[204,83870,83871],{"class":263},"#888",[204,83873,1377],{"class":214},[204,83875,83876,83878,83880,83882,83884],{"class":206,"line":16691},[204,83877,55008],{"class":263},[204,83879,51523],{"class":214},[204,83881,762],{"class":263},[204,83883,51578],{"class":210},[204,83885,1377],{"class":214},[204,83887,83888,83890,83892,83894,83896],{"class":206,"line":16697},[204,83889,62086],{"class":263},[204,83891,51523],{"class":214},[204,83893,913],{"class":263},[204,83895,51578],{"class":210},[204,83897,1377],{"class":214},[204,83899,83900],{"class":206,"line":16720},[204,83901,2273],{"class":214},[204,83903,83904],{"class":206,"line":16726},[204,83905,2486],{"emptyLinePlaceholder":135},[204,83907,83908,83910,83913],{"class":206,"line":16749},[204,83909,78711],{"class":2049},[204,83911,83912],{"class":2049}," .count",[204,83914,15659],{"class":214},[204,83916,83917,83919,83921,83923],{"class":206,"line":16763},[204,83918,61923],{"class":263},[204,83920,51523],{"class":214},[204,83922,431],{"class":263},[204,83924,1377],{"class":214},[204,83926,83927,83929,83931,83934],{"class":206,"line":16783},[204,83928,57502],{"class":263},[204,83930,51523],{"class":214},[204,83932,83933],{"class":263},"#aaa",[204,83935,1377],{"class":214},[204,83937,83938],{"class":206,"line":16789},[204,83939,2273],{"class":214},[204,83941,83942],{"class":206,"line":16800},[204,83943,2486],{"emptyLinePlaceholder":135},[204,83945,83946,83948],{"class":206,"line":16823},[204,83947,72561],{"class":2049},[204,83949,15659],{"class":214},[204,83951,83952,83954,83956,83958,83960],{"class":206,"line":16845},[204,83953,54857],{"class":263},[204,83955,51523],{"class":214},[204,83957,78660],{"class":263},[204,83959,51578],{"class":210},[204,83961,1377],{"class":214},[204,83963,83964,83966,83968,83970,83972],{"class":206,"line":16850},[204,83965,54792],{"class":263},[204,83967,51523],{"class":214},[204,83969,405],{"class":263},[204,83971,51642],{"class":263},[204,83973,1377],{"class":214},[204,83975,83976,83978,83980,83982],{"class":206,"line":16856},[204,83977,55095],{"class":263},[204,83979,51523],{"class":214},[204,83981,51563],{"class":263},[204,83983,1377],{"class":214},[204,83985,83986,83988,83990,83992],{"class":206,"line":16870},[204,83987,55106],{"class":263},[204,83989,51523],{"class":214},[204,83991,51666],{"class":263},[204,83993,1377],{"class":214},[204,83995,83996,83999,84001,84003,84005,84007,84010],{"class":206,"line":16883},[204,83997,83998],{"class":263},"      border-top",[204,84000,51523],{"class":214},[204,84002,431],{"class":263},[204,84004,51578],{"class":210},[204,84006,51607],{"class":263},[204,84008,84009],{"class":263}," #4e4e4e",[204,84011,1377],{"class":214},[204,84013,84014,84016,84018,84020,84022],{"class":206,"line":16888},[204,84015,54781],{"class":263},[204,84017,51523],{"class":214},[204,84019,913],{"class":263},[204,84021,51578],{"class":210},[204,84023,1377],{"class":214},[204,84025,84026],{"class":206,"line":16902},[204,84027,2273],{"class":214},[204,84029,84030],{"class":206,"line":16907},[204,84031,2486],{"emptyLinePlaceholder":135},[204,84033,84034,84036,84039],{"class":206,"line":16913},[204,84035,72561],{"class":2049},[204,84037,84038],{"class":2049}," .amount",[204,84040,15659],{"class":214},[204,84042,84043,84045,84047,84049,84051],{"class":206,"line":16918},[204,84044,55008],{"class":263},[204,84046,51523],{"class":214},[204,84048,863],{"class":263},[204,84050,51578],{"class":210},[204,84052,1377],{"class":214},[204,84054,84055,84057,84059,84061],{"class":206,"line":16932},[204,84056,57502],{"class":263},[204,84058,51523],{"class":214},[204,84060,79026],{"class":263},[204,84062,1377],{"class":214},[204,84064,84065,84067,84069,84071],{"class":206,"line":16937},[204,84066,62420],{"class":263},[204,84068,51523],{"class":214},[204,84070,51575],{"class":263},[204,84072,1377],{"class":214},[204,84074,84075,84077,84079,84081,84083],{"class":206,"line":16942},[204,84076,61836],{"class":263},[204,84078,51523],{"class":214},[204,84080,869],{"class":263},[204,84082,51578],{"class":210},[204,84084,1377],{"class":214},[204,84086,84087],{"class":206,"line":16956},[204,84088,2273],{"class":214},[204,84090,84091,84093,84095],{"class":206,"line":16968},[204,84092,52503],{"class":214},[204,84094,5213],{"class":51386},[204,84096,51393],{"class":214},[204,84098,84099,84101,84103],{"class":206,"line":16973},[204,84100,51871],{"class":214},[204,84102,51420],{"class":51386},[204,84104,51393],{"class":214},[204,84106,84107],{"class":206,"line":16986},[204,84108,2486],{"emptyLinePlaceholder":135},[204,84110,84111,84113,84115],{"class":206,"line":16991},[204,84112,1123],{"class":214},[204,84114,51886],{"class":51386},[204,84116,51393],{"class":214},[204,84118,84119,84121,84123,84125,84127,84129],{"class":206,"line":16996},[204,84120,52230],{"class":214},[204,84122,51697],{"class":51386},[204,84124,53572],{"class":2049},[204,84126,260],{"class":214},[204,84128,62694],{"class":319},[204,84130,51393],{"class":214},[204,84132,84133,84135,84137],{"class":206,"line":17001},[204,84134,52503],{"class":214},[204,84136,51697],{"class":51386},[204,84138,51393],{"class":214},[204,84140,84141,84143,84145,84147,84149,84151],{"class":206,"line":17014},[204,84142,52230],{"class":214},[204,84144,51697],{"class":51386},[204,84146,53572],{"class":2049},[204,84148,260],{"class":214},[204,84150,62666],{"class":319},[204,84152,51393],{"class":214},[204,84154,84155,84157,84159,84162,84164,84166,84168,84171,84173,84175,84177,84179],{"class":206,"line":17019},[204,84156,51427],{"class":214},[204,84158,51697],{"class":51386},[204,84160,84161],{"class":214},">合计：\u003C",[204,84163,204],{"class":51386},[204,84165,53572],{"class":2049},[204,84167,260],{"class":214},[204,84169,84170],{"class":319},"\"amount\"",[204,84172,55400],{"class":214},[204,84174,204],{"class":51386},[204,84176,55400],{"class":214},[204,84178,51697],{"class":51386},[204,84180,51393],{"class":214},[204,84182,84183,84185,84187],{"class":206,"line":32719},[204,84184,52503],{"class":214},[204,84186,51697],{"class":51386},[204,84188,51393],{"class":214},[204,84190,84191,84193,84195],{"class":206,"line":32725},[204,84192,52230],{"class":214},[204,84194,51899],{"class":51386},[204,84196,51393],{"class":214},[204,84198,84199,84201,84203,84205],{"class":206,"line":32731},[204,84200,11308],{"class":210},[204,84202,79463],{"class":263},[204,84204,13651],{"class":210},[204,84206,55533],{"class":214},[204,84208,84209],{"class":206,"line":32737},[204,84210,79472],{"class":214},[204,84212,84213,84215,84217],{"class":206,"line":32743},[204,84214,79477],{"class":214},[204,84216,79480],{"class":319},[204,84218,31552],{"class":214},[204,84220,84221,84223,84225],{"class":206,"line":32754},[204,84222,79487],{"class":214},[204,84224,79490],{"class":319},[204,84226,31552],{"class":214},[204,84228,84229,84231,84234],{"class":206,"line":32760},[204,84230,79497],{"class":214},[204,84232,84233],{"class":263},"289.9",[204,84235,31552],{"class":214},[204,84237,84238,84240,84242],{"class":206,"line":32780},[204,84239,79507],{"class":214},[204,84241,79510],{"class":319},[204,84243,31552],{"class":214},[204,84245,84246,84249,84251],{"class":206,"line":32786},[204,84247,84248],{"class":214},"        count: ",[204,84250,292],{"class":263},[204,84252,31552],{"class":214},[204,84254,84255,84258,84261],{"class":206,"line":32797},[204,84256,84257],{"class":214},"        spec: { color: ",[204,84259,84260],{"class":319},"'白色'",[204,84262,55690],{"class":214},[204,84264,84265],{"class":206,"line":32803},[204,84266,77978],{"class":214},[204,84268,84269],{"class":206,"line":32809},[204,84270,79472],{"class":214},[204,84272,84273,84275,84277],{"class":206,"line":32815},[204,84274,79477],{"class":214},[204,84276,79571],{"class":319},[204,84278,31552],{"class":214},[204,84280,84281,84283,84285],{"class":206,"line":32821},[204,84282,79487],{"class":214},[204,84284,79580],{"class":319},[204,84286,31552],{"class":214},[204,84288,84289,84291,84294],{"class":206,"line":32827},[204,84290,79497],{"class":214},[204,84292,84293],{"class":263},"109.8",[204,84295,31552],{"class":214},[204,84297,84298,84300,84302],{"class":206,"line":32833},[204,84299,79507],{"class":214},[204,84301,79598],{"class":319},[204,84303,31552],{"class":214},[204,84305,84306,84308,84310],{"class":206,"line":32839},[204,84307,84248],{"class":214},[204,84309,286],{"class":263},[204,84311,31552],{"class":214},[204,84313,84314,84317,84319,84321,84323],{"class":206,"line":32859},[204,84315,84316],{"class":214},"        spec: { size: ",[204,84318,81989],{"class":319},[204,84320,55550],{"class":214},[204,84322,81994],{"class":319},[204,84324,55690],{"class":214},[204,84326,84327],{"class":206,"line":32865},[204,84328,77978],{"class":214},[204,84330,84331],{"class":206,"line":32881},[204,84332,79472],{"class":214},[204,84334,84335,84337,84339],{"class":206,"line":32887},[204,84336,79477],{"class":214},[204,84338,79615],{"class":319},[204,84340,31552],{"class":214},[204,84342,84343,84345,84347],{"class":206,"line":32901},[204,84344,79487],{"class":214},[204,84346,79624],{"class":319},[204,84348,31552],{"class":214},[204,84350,84351,84353,84356],{"class":206,"line":32907},[204,84352,79497],{"class":214},[204,84354,84355],{"class":263},"488",[204,84357,31552],{"class":214},[204,84359,84360,84362,84364],{"class":206,"line":32922},[204,84361,79507],{"class":214},[204,84363,79642],{"class":319},[204,84365,31552],{"class":214},[204,84367,84368,84370,84372],{"class":206,"line":32928},[204,84369,84248],{"class":214},[204,84371,431],{"class":263},[204,84373,31552],{"class":214},[204,84375,84376,84378,84381,84384,84387],{"class":206,"line":32937},[204,84377,84257],{"class":214},[204,84379,84380],{"class":319},"'青色'",[204,84382,84383],{"class":214},", sum: ",[204,84385,84386],{"class":319},"'一大四小'",[204,84388,55690],{"class":214},[204,84390,84391],{"class":206,"line":32943},[204,84392,77978],{"class":214},[204,84394,84395],{"class":206,"line":32952},[204,84396,79472],{"class":214},[204,84398,84399,84401,84403],{"class":206,"line":32958},[204,84400,79477],{"class":214},[204,84402,79659],{"class":319},[204,84404,31552],{"class":214},[204,84406,84407,84409,84411],{"class":206,"line":32964},[204,84408,79487],{"class":214},[204,84410,79668],{"class":319},[204,84412,31552],{"class":214},[204,84414,84415,84417,84420],{"class":206,"line":32973},[204,84416,79497],{"class":214},[204,84418,84419],{"class":263},"139",[204,84421,31552],{"class":214},[204,84423,84424,84426,84428],{"class":206,"line":32979},[204,84425,79507],{"class":214},[204,84427,79686],{"class":319},[204,84429,31552],{"class":214},[204,84431,84432,84434,84436],{"class":206,"line":32990},[204,84433,84248],{"class":214},[204,84435,431],{"class":263},[204,84437,31552],{"class":214},[204,84439,84440,84442,84445,84447,84450],{"class":206,"line":32996},[204,84441,84316],{"class":214},[204,84443,84444],{"class":319},"'小号'",[204,84446,55550],{"class":214},[204,84448,84449],{"class":319},"'紫色'",[204,84451,55556],{"class":214},[204,84453,84454,84457],{"class":206,"line":33015},[204,84455,84456],{"class":214},"        gift: ",[204,84458,84459],{"class":319},"'50g茶叶,清洗球'\n",[204,84461,84462],{"class":206,"line":33021},[204,84463,52484],{"class":214},[204,84465,84466],{"class":206,"line":33032},[204,84467,53195],{"class":214},[204,84469,84470],{"class":206,"line":33038},[204,84471,84472],{"class":273},"    \u002F\u002F  1.根据数据渲染页面\n",[204,84474,84475,84477,84479,84481,84483,84485,84487,84489,84491,84493,84495,84497],{"class":206,"line":33058},[204,84476,52493],{"class":214},[204,84478,54485],{"class":2049},[204,84480,215],{"class":214},[204,84482,79987],{"class":319},[204,84484,74335],{"class":214},[204,84486,260],{"class":210},[204,84488,80134],{"class":214},[204,84490,74130],{"class":2049},[204,84492,215],{"class":214},[204,84494,79881],{"class":5303},[204,84496,79884],{"class":210},[204,84498,15659],{"class":214},[204,84500,84501],{"class":206,"line":33074},[204,84502,84503],{"class":273},"      \u002F\u002F 对象解构\n",[204,84505,84506,84508,84510,84512,84514,84516,84518,84521,84523,84525,84527,84530,84532,84535,84537,84539],{"class":206,"line":33080},[204,84507,58314],{"class":210},[204,84509,79893],{"class":214},[204,84511,79906],{"class":263},[204,84513,12522],{"class":214},[204,84515,79896],{"class":263},[204,84517,12522],{"class":214},[204,84519,84520],{"class":263},"count",[204,84522,12522],{"class":214},[204,84524,79901],{"class":263},[204,84526,12522],{"class":214},[204,84528,84529],{"class":263},"spec",[204,84531,12522],{"class":214},[204,84533,84534],{"class":263},"gift",[204,84536,79909],{"class":214},[204,84538,260],{"class":210},[204,84540,79914],{"class":214},[204,84542,84543],{"class":206,"line":33094},[204,84544,84545],{"class":273},"      \u002F\u002F 规格文字模块处理\n",[204,84547,84548,84550,84553,84555,84557,84559,84561,84563,84565,84567],{"class":206,"line":33100},[204,84549,58314],{"class":210},[204,84551,84552],{"class":263}," text",[204,84554,13651],{"class":210},[204,84556,82024],{"class":214},[204,84558,82027],{"class":2049},[204,84560,82030],{"class":214},[204,84562,74309],{"class":2049},[204,84564,215],{"class":214},[204,84566,82037],{"class":319},[204,84568,221],{"class":214},[204,84570,84571],{"class":206,"line":33106},[204,84572,84573],{"class":273},"      \u002F\u002F 处理赠品模块\n",[204,84575,84576,84578,84580,84582,84585,84587,84589,84591,84593,84596,84598,84600,84602,84604,84606,84609,84611,84614,84616,84618,84620,84622,84624,84626],{"class":206,"line":33117},[204,84577,58314],{"class":210},[204,84579,74005],{"class":263},[204,84581,13651],{"class":210},[204,84583,84584],{"class":214}," gift ",[204,84586,1199],{"class":210},[204,84588,83198],{"class":214},[204,84590,83201],{"class":2049},[204,84592,215],{"class":214},[204,84594,84595],{"class":319},"','",[204,84597,30912],{"class":214},[204,84599,74130],{"class":2049},[204,84601,215],{"class":214},[204,84603,79881],{"class":5303},[204,84605,79884],{"class":210},[204,84607,84608],{"class":319}," `\u003Cspan class=\"tag\">【赠品】${",[204,84610,79881],{"class":214},[204,84612,84613],{"class":319},"}\u003C\u002Fspan>`",[204,84615,30912],{"class":214},[204,84617,74309],{"class":2049},[204,84619,215],{"class":214},[204,84621,74314],{"class":319},[204,84623,13801],{"class":214},[204,84625,1072],{"class":210},[204,84627,70190],{"class":319},[204,84629,84630],{"class":206,"line":33123},[204,84631,84632],{"class":273},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[204,84634,84635,84637,84640,84642,84645,84647,84649,84651,84654,84656,84658,84660,84663,84665,84667],{"class":206,"line":33129},[204,84636,58314],{"class":210},[204,84638,84639],{"class":263}," subtotal",[204,84641,13651],{"class":210},[204,84643,84644],{"class":214}," ((price ",[204,84646,668],{"class":210},[204,84648,5841],{"class":263},[204,84650,6605],{"class":210},[204,84652,84653],{"class":214}," count) ",[204,84655,797],{"class":210},[204,84657,5841],{"class":263},[204,84659,30912],{"class":214},[204,84661,84662],{"class":2049},"toFixed",[204,84664,215],{"class":214},[204,84666,292],{"class":263},[204,84668,221],{"class":214},[204,84670,84671],{"class":206,"line":33139},[204,84672,2486],{"emptyLinePlaceholder":135},[204,84674,84675,84677],{"class":206,"line":33145},[204,84676,74068],{"class":210},[204,84678,70254],{"class":319},[204,84680,84681],{"class":206,"line":33156},[204,84682,84683],{"class":319},"        \u003Cdiv class=\"item\">\n",[204,84685,84686,84689,84691],{"class":206,"line":33162},[204,84687,84688],{"class":319},"          \u003Cimg src=\"${",[204,84690,79906],{"class":214},[204,84692,79938],{"class":319},[204,84694,84695,84698,84700,84703,84705],{"class":206,"line":33172},[204,84696,84697],{"class":319},"          \u003Cp class=\"name\">${",[204,84699,79896],{"class":214},[204,84701,84702],{"class":319},"}${",[204,84704,1386],{"class":214},[204,84706,79948],{"class":319},[204,84708,84709,84712,84714],{"class":206,"line":33177},[204,84710,84711],{"class":319},"          \u003Cp class=\"spec\">${",[204,84713,5274],{"class":214},[204,84715,79948],{"class":319},[204,84717,84718,84721,84723,84725,84727,84729,84731,84733],{"class":206,"line":33183},[204,84719,84720],{"class":319},"          \u003Cp class=\"price\">${",[204,84722,79901],{"class":214},[204,84724,771],{"class":319},[204,84726,84662],{"class":2049},[204,84728,215],{"class":319},[204,84730,292],{"class":263},[204,84732,642],{"class":319},[204,84734,79948],{"class":319},[204,84736,84737,84740,84742],{"class":206,"line":33232},[204,84738,84739],{"class":319},"          \u003Cp class=\"count\">x${",[204,84741,84520],{"class":214},[204,84743,79948],{"class":319},[204,84745,84746,84749,84752],{"class":206,"line":33279},[204,84747,84748],{"class":319},"          \u003Cp class=\"sub-total\">${",[204,84750,84751],{"class":214},"subtotal",[204,84753,79948],{"class":319},[204,84755,84756],{"class":206,"line":33284},[204,84757,84758],{"class":319},"        \u003C\u002Fdiv> \n",[204,84760,84761],{"class":206,"line":33290},[204,84762,84763],{"class":319},"             `\n",[204,84765,84766,84769,84771,84773,84775],{"class":206,"line":33309},[204,84767,84768],{"class":214},"    }).",[204,84770,74309],{"class":2049},[204,84772,215],{"class":214},[204,84774,74314],{"class":319},[204,84776,221],{"class":214},[204,84778,84779],{"class":206,"line":33315},[204,84780,84781],{"class":273},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[204,84783,84784,84786,84788,84790,84792,84795,84797,84800,84802,84804,84806,84809,84812,84814,84817,84819,84821,84823,84826,84828,84830,84832,84834],{"class":206,"line":33335},[204,84785,11308],{"class":210},[204,84787,62871],{"class":263},[204,84789,13651],{"class":210},[204,84791,80134],{"class":214},[204,84793,84794],{"class":2049},"reduce",[204,84796,2462],{"class":214},[204,84798,84799],{"class":5303},"prev",[204,84801,12522],{"class":214},[204,84803,79881],{"class":5303},[204,84805,13801],{"class":214},[204,84807,84808],{"class":210},"=>",[204,84810,84811],{"class":214}," prev ",[204,84813,694],{"class":210},[204,84815,84816],{"class":214}," (item.price ",[204,84818,668],{"class":210},[204,84820,5841],{"class":263},[204,84822,6605],{"class":210},[204,84824,84825],{"class":214}," item.count) ",[204,84827,797],{"class":210},[204,84829,5841],{"class":263},[204,84831,12522],{"class":214},[204,84833,405],{"class":263},[204,84835,221],{"class":214},[204,84837,84838,84840,84842,84844,84847,84849,84851,84854,84856,84858,84860],{"class":206,"line":33341},[204,84839,52493],{"class":214},[204,84841,54485],{"class":2049},[204,84843,215],{"class":214},[204,84845,84846],{"class":319},"'.amount'",[204,84848,74335],{"class":214},[204,84850,260],{"class":210},[204,84852,84853],{"class":214}," total.",[204,84855,84662],{"class":2049},[204,84857,215],{"class":214},[204,84859,292],{"class":263},[204,84861,221],{"class":214},[204,84863,84864,84866,84868],{"class":206,"line":33347},[204,84865,52503],{"class":214},[204,84867,51899],{"class":51386},[204,84869,51393],{"class":214},[204,84871,84872,84874,84876],{"class":206,"line":33357},[204,84873,51871],{"class":214},[204,84875,51886],{"class":51386},[204,84877,51393],{"class":214},[204,84879,84880],{"class":206,"line":33362},[204,84881,2486],{"emptyLinePlaceholder":135},[204,84883,84884,84886,84888],{"class":206,"line":33368},[204,84885,51871],{"class":214},[204,84887,50721],{"class":51386},[204,84889,51393],{"class":214},[14,84891,84893],{"id":84892},"_411-编程思想","4.11 编程思想",[49,84895,84897],{"id":84896},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84899,84900,84903],{},[30,84901,84902],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84905,84906],{},"调用就可以了",[19,84908,84909],{},[23,84910],{"alt":125,"src":84911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[49,84913,84915],{"id":84914},"_4112-面向对象","4.11.2 面向对象",[19,84917,84918],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84920,84921],{},[23,84922],{"alt":125,"src":84923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84925,84926],{},"面向对象的特性：",[68,84928,84929,84932,84935],{},[71,84930,84931],{},"封装性",[71,84933,84934],{},"继承性",[71,84936,84937],{},"多态性",[49,84939,84941],{"id":84940},"_4113-两者比较","4.11.3 两者比较",[19,84943,84944],{},[23,84945],{"alt":125,"src":84946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,84948,84950],{"id":84949},"_412-构造函数回顾","4.12 构造函数回顾",[19,84952,84953],{},[23,84954],{"alt":125,"src":84955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,84957,84958],{},[23,84959],{"alt":125,"src":84960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,84962,84963],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,84965,84966],{},[23,84967],{"alt":125,"src":84968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,84970,84972],{"id":84971},"_413-原型","4.13 原型",[49,84974,84976],{"id":84975},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,84978,84979],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,84981,84982],{},[23,84983],{"alt":125,"src":84984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,84986,84987],{},[23,84988],{"alt":125,"src":84989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,84991,84992],{},"原型是构造函数的属性，它也是一个对象",[19,84994,84995],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,84997,84998],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[196,85000,85002],{"className":53153,"code":85001,"language":53155,"meta":125,"style":125},"\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",[81,85003,85004,85012,85017,85025,85030,85035,85040,85045,85050,85054,85058,85062,85067,85072,85076,85081,85086,85091,85096,85101,85105,85113],{"__ignoreMap":125},[204,85005,85006,85008,85010],{"class":206,"line":207},[204,85007,1123],{"class":214},[204,85009,51886],{"class":51386},[204,85011,51393],{"class":214},[204,85013,85014],{"class":206,"line":126},[204,85015,85016],{"class":273},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[204,85018,85019,85021,85023],{"class":206,"line":131},[204,85020,52230],{"class":214},[204,85022,51899],{"class":51386},[204,85024,51393],{"class":214},[204,85026,85027],{"class":206,"line":1281},[204,85028,85029],{"class":214},"    function Star(uname, age) {\n",[204,85031,85032],{"class":206,"line":1287},[204,85033,85034],{"class":214},"      this.uname = uname,\n",[204,85036,85037],{"class":206,"line":1301},[204,85038,85039],{"class":214},"        this.age = age\n",[204,85041,85042],{"class":206,"line":1307},[204,85043,85044],{"class":214},"      \u002F\u002F this.sing = function () {\n",[204,85046,85047],{"class":206,"line":1398},[204,85048,85049],{"class":214},"      \u002F\u002F   console.log('唱歌')\n",[204,85051,85052],{"class":206,"line":1404},[204,85053,2486],{"emptyLinePlaceholder":135},[204,85055,85056],{"class":206,"line":1416},[204,85057,60123],{"class":214},[204,85059,85060],{"class":206,"line":1698},[204,85061,2273],{"class":214},[204,85063,85064],{"class":206,"line":1703},[204,85065,85066],{"class":214},"    Star.prototype.sing = function () {\n",[204,85068,85069],{"class":206,"line":1709},[204,85070,85071],{"class":214},"      console.log('唱歌')\n",[204,85073,85074],{"class":206,"line":1714},[204,85075,2273],{"class":214},[204,85077,85078],{"class":206,"line":1728},[204,85079,85080],{"class":214},"    \u002F\u002F console.dir(Star.prototype)\n",[204,85082,85083],{"class":206,"line":1733},[204,85084,85085],{"class":214},"    const pink = new Star('pink', 18)\n",[204,85087,85088],{"class":206,"line":1739},[204,85089,85090],{"class":214},"    const red = new Star('red', 20)\n",[204,85092,85093],{"class":206,"line":1760},[204,85094,85095],{"class":214},"    pink.sing()\n",[204,85097,85098],{"class":206,"line":1765},[204,85099,85100],{"class":214},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[204,85102,85103],{"class":206,"line":1779},[204,85104,2486],{"emptyLinePlaceholder":135},[204,85106,85107,85109,85111],{"class":206,"line":1784},[204,85108,52503],{"class":214},[204,85110,51899],{"class":51386},[204,85112,51393],{"class":214},[204,85114,85115,85117,85119],{"class":206,"line":1813},[204,85116,51871],{"class":214},[204,85118,51886],{"class":51386},[204,85120,51393],{"class":214},[19,85122,85123],{},[23,85124],{"alt":125,"src":85125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[196,85127,85129],{"className":53153,"code":85128,"language":53155,"meta":125,"style":125},"\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",[81,85130,85131,85139,85147,85152,85157,85162,85167,85171,85176,85181,85186,85190,85195,85199,85203,85208,85212,85220],{"__ignoreMap":125},[204,85132,85133,85135,85137],{"class":206,"line":207},[204,85134,1123],{"class":214},[204,85136,51886],{"class":51386},[204,85138,51393],{"class":214},[204,85140,85141,85143,85145],{"class":206,"line":126},[204,85142,52230],{"class":214},[204,85144,51899],{"class":51386},[204,85146,51393],{"class":214},[204,85148,85149],{"class":206,"line":131},[204,85150,85151],{"class":214},"    let that\n",[204,85153,85154],{"class":206,"line":1281},[204,85155,85156],{"class":214},"    function Star(uname) {\n",[204,85158,85159],{"class":206,"line":1287},[204,85160,85161],{"class":214},"      this.uname = uname\n",[204,85163,85164],{"class":206,"line":1301},[204,85165,85166],{"class":214},"      that = this\n",[204,85168,85169],{"class":206,"line":1307},[204,85170,2273],{"class":214},[204,85172,85173],{"class":206,"line":1398},[204,85174,85175],{"class":214},"    \u002F\u002F 实例对象是 ldh\n",[204,85177,85178],{"class":206,"line":1404},[204,85179,85180],{"class":214},"    const ldh = new Star('刘德华')\n",[204,85182,85183],{"class":206,"line":1416},[204,85184,85185],{"class":214},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[204,85187,85188],{"class":206,"line":1698},[204,85189,2486],{"emptyLinePlaceholder":135},[204,85191,85192],{"class":206,"line":1703},[204,85193,85194],{"class":214},"    Star.sing = function () {\n",[204,85196,85197],{"class":206,"line":1709},[204,85198,85071],{"class":214},[204,85200,85201],{"class":206,"line":1714},[204,85202,2273],{"class":214},[204,85204,85205],{"class":206,"line":1728},[204,85206,85207],{"class":214},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[204,85209,85210],{"class":206,"line":1733},[204,85211,2486],{"emptyLinePlaceholder":135},[204,85213,85214,85216,85218],{"class":206,"line":1739},[204,85215,52503],{"class":214},[204,85217,51899],{"class":51386},[204,85219,51393],{"class":214},[204,85221,85222,85224,85226],{"class":206,"line":1760},[204,85223,51871],{"class":214},[204,85225,51886],{"class":51386},[204,85227,51393],{"class":214},[19,85229,85230],{},"构造函数的this指向的是实例对象；",[19,85232,85233],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[49,85235,85237],{"id":85236},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85239,85240],{},[23,85241],{"alt":125,"src":85242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[196,85244,85246],{"className":53153,"code":85245,"language":53155,"meta":125,"style":125},"\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",[81,85247,85248,85256,85264,85269,85274,85279,85284,85289,85294,85299,85304,85309,85314,85318,85323,85328,85333,85338,85342,85347,85352,85357,85362,85366,85371,85376,85381,85386,85390,85395,85399,85407],{"__ignoreMap":125},[204,85249,85250,85252,85254],{"class":206,"line":207},[204,85251,1123],{"class":214},[204,85253,51886],{"class":51386},[204,85255,51393],{"class":214},[204,85257,85258,85260,85262],{"class":206,"line":126},[204,85259,52230],{"class":214},[204,85261,51899],{"class":51386},[204,85263,51393],{"class":214},[204,85265,85266],{"class":206,"line":131},[204,85267,85268],{"class":214},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[204,85270,85271],{"class":206,"line":1281},[204,85272,85273],{"class":214},"    const arr = [1, 2, 3]\n",[204,85275,85276],{"class":206,"line":1287},[204,85277,85278],{"class":214},"    \u002F\u002F 自己定义数组的扩展方法\n",[204,85280,85281],{"class":206,"line":1301},[204,85282,85283],{"class":214},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[204,85285,85286],{"class":206,"line":1307},[204,85287,85288],{"class":214},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[204,85290,85291],{"class":206,"line":1398},[204,85292,85293],{"class":214},"    \u002F\u002F ①.最大值\n",[204,85295,85296],{"class":206,"line":1404},[204,85297,85298],{"class":214},"    Array.prototype.max = function () {\n",[204,85300,85301],{"class":206,"line":1416},[204,85302,85303],{"class":214},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[204,85305,85306],{"class":206,"line":1698},[204,85307,85308],{"class":214},"      return Math.max(...this)\n",[204,85310,85311],{"class":206,"line":1703},[204,85312,85313],{"class":214},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[204,85315,85316],{"class":206,"line":1709},[204,85317,2273],{"class":214},[204,85319,85320],{"class":206,"line":1714},[204,85321,85322],{"class":214},"    console.log(arr.max())\n",[204,85324,85325],{"class":206,"line":1728},[204,85326,85327],{"class":214},"    \u002F\u002F ②最小值\n",[204,85329,85330],{"class":206,"line":1733},[204,85331,85332],{"class":214},"    Array.prototype.min = function () {\n",[204,85334,85335],{"class":206,"line":1739},[204,85336,85337],{"class":214},"      return Math.min(...this)\n",[204,85339,85340],{"class":206,"line":1760},[204,85341,2273],{"class":214},[204,85343,85344],{"class":206,"line":1765},[204,85345,85346],{"class":214},"    console.log(arr.min())\n",[204,85348,85349],{"class":206,"line":1779},[204,85350,85351],{"class":214},"    \u002F\u002F③求和\n",[204,85353,85354],{"class":206,"line":1784},[204,85355,85356],{"class":214},"    Array.prototype.sum = function () {\n",[204,85358,85359],{"class":206,"line":1813},[204,85360,85361],{"class":214},"      return this.reduce((prev, current) => prev + current, 0)\n",[204,85363,85364],{"class":206,"line":1818},[204,85365,2273],{"class":214},[204,85367,85368],{"class":206,"line":1835},[204,85369,85370],{"class":214},"    console.log(arr.sum())\n",[204,85372,85373],{"class":206,"line":1840},[204,85374,85375],{"class":214},"    \u002F\u002F ③排序\n",[204,85377,85378],{"class":206,"line":1845},[204,85379,85380],{"class":214},"    Array.prototype.rever = function () {\n",[204,85382,85383],{"class":206,"line":1850},[204,85384,85385],{"class":214},"      return this.reverse()\n",[204,85387,85388],{"class":206,"line":1864},[204,85389,2273],{"class":214},[204,85391,85392],{"class":206,"line":1869},[204,85393,85394],{"class":214},"    console.log(arr.rever())\n",[204,85396,85397],{"class":206,"line":2663},[204,85398,2486],{"emptyLinePlaceholder":135},[204,85400,85401,85403,85405],{"class":206,"line":2677},[204,85402,52503],{"class":214},[204,85404,51899],{"class":51386},[204,85406,51393],{"class":214},[204,85408,85409,85411,85413],{"class":206,"line":2685},[204,85410,51871],{"class":214},[204,85412,51886],{"class":51386},[204,85414,51393],{"class":214},[19,85416,85417],{},[23,85418],{"alt":125,"src":85419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[49,85421,85423],{"id":85422},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85425,85426],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85428,85429],{},[23,85430],{"alt":125,"src":85431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[196,85433,85435],{"className":53153,"code":85434,"language":53155,"meta":125,"style":125},"\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",[81,85436,85437,85445,85453,85458,85463,85467,85472,85477,85482,85490],{"__ignoreMap":125},[204,85438,85439,85441,85443],{"class":206,"line":207},[204,85440,1123],{"class":214},[204,85442,51886],{"class":51386},[204,85444,51393],{"class":214},[204,85446,85447,85449,85451],{"class":206,"line":126},[204,85448,52230],{"class":214},[204,85450,51899],{"class":51386},[204,85452,51393],{"class":214},[204,85454,85455],{"class":206,"line":131},[204,85456,85457],{"class":214},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[204,85459,85460],{"class":206,"line":1281},[204,85461,85462],{"class":214},"    function Star() {\n",[204,85464,85465],{"class":206,"line":1287},[204,85466,2273],{"class":214},[204,85468,85469],{"class":206,"line":1301},[204,85470,85471],{"class":214},"    const ldh = new Star()\n",[204,85473,85474],{"class":206,"line":1307},[204,85475,85476],{"class":214},"    console.log(Star.prototype)\n",[204,85478,85479],{"class":206,"line":1398},[204,85480,85481],{"class":214},"    console.log(Star.prototype.constructor === Star)\n",[204,85483,85484,85486,85488],{"class":206,"line":1404},[204,85485,52503],{"class":214},[204,85487,51899],{"class":51386},[204,85489,51393],{"class":214},[204,85491,85492,85494,85496],{"class":206,"line":1416},[204,85493,51871],{"class":214},[204,85495,51886],{"class":51386},[204,85497,51393],{"class":214},[19,85499,85500],{},[23,85501],{"alt":125,"src":85502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85504,85505],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[196,85507,85509],{"className":53153,"code":85508,"language":53155,"meta":125,"style":125},"  \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",[81,85510,85511,85519,85523,85527,85531,85536,85541,85546,85550,85555,85560,85565,85570,85575,85580,85584,85588,85593,85598,85603,85607,85612,85617,85621,85625,85629],{"__ignoreMap":125},[204,85512,85513,85515,85517],{"class":206,"line":207},[204,85514,52230],{"class":214},[204,85516,51899],{"class":51386},[204,85518,51393],{"class":214},[204,85520,85521],{"class":206,"line":126},[204,85522,85457],{"class":214},[204,85524,85525],{"class":206,"line":131},[204,85526,85462],{"class":214},[204,85528,85529],{"class":206,"line":1281},[204,85530,2273],{"class":214},[204,85532,85533],{"class":206,"line":1287},[204,85534,85535],{"class":214},"    \u002F\u002F const ldh = new Star()\n",[204,85537,85538],{"class":206,"line":1301},[204,85539,85540],{"class":214},"    \u002F\u002F console.log(Star.prototype)\n",[204,85542,85543],{"class":206,"line":1307},[204,85544,85545],{"class":214},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[204,85547,85548],{"class":206,"line":1398},[204,85549,2486],{"emptyLinePlaceholder":135},[204,85551,85552],{"class":206,"line":1404},[204,85553,85554],{"class":214},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[204,85556,85557],{"class":206,"line":1416},[204,85558,85559],{"class":214},"    \u002F\u002F Star.prototype.sing = function () {\n",[204,85561,85562],{"class":206,"line":1698},[204,85563,85564],{"class":214},"    \u002F\u002F   console.log('唱歌')\n",[204,85566,85567],{"class":206,"line":1703},[204,85568,85569],{"class":214},"    \u002F\u002F }\n",[204,85571,85572],{"class":206,"line":1709},[204,85573,85574],{"class":214},"    \u002F\u002F Star.prototype.dance = function () {\n",[204,85576,85577],{"class":206,"line":1714},[204,85578,85579],{"class":214},"    \u002F\u002F   console.log('跳舞')\n",[204,85581,85582],{"class":206,"line":1728},[204,85583,85569],{"class":214},[204,85585,85586],{"class":206,"line":1733},[204,85587,85476],{"class":214},[204,85589,85590],{"class":206,"line":1739},[204,85591,85592],{"class":214},"    Star.prototype = {\n",[204,85594,85595],{"class":206,"line":1760},[204,85596,85597],{"class":214},"      sing: function () {\n",[204,85599,85600],{"class":206,"line":1765},[204,85601,85602],{"class":214},"        console.log('唱歌')\n",[204,85604,85605],{"class":206,"line":1779},[204,85606,77978],{"class":214},[204,85608,85609],{"class":206,"line":1784},[204,85610,85611],{"class":214},"      dance: function () {\n",[204,85613,85614],{"class":206,"line":1813},[204,85615,85616],{"class":214},"        console.log('跳舞')\n",[204,85618,85619],{"class":206,"line":1818},[204,85620,52484],{"class":214},[204,85622,85623],{"class":206,"line":1835},[204,85624,2273],{"class":214},[204,85626,85627],{"class":206,"line":1840},[204,85628,85476],{"class":214},[204,85630,85631,85633,85635],{"class":206,"line":1845},[204,85632,52503],{"class":214},[204,85634,51899],{"class":51386},[204,85636,51393],{"class":214},[19,85638,85639],{},"进行输出结果后会发现：",[19,85641,85642],{},[23,85643],{"alt":125,"src":85644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85646,85647],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85649,85650],{},"所以，要重新指回创造这个原型对象的构造函数",[196,85652,85654],{"className":71299,"code":85653,"language":71301,"meta":125,"style":125},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[81,85655,85656,85670,85675,85680,85691,85704,85709,85720,85734,85738],{"__ignoreMap":125},[204,85657,85658,85661,85663,85666,85668],{"class":206,"line":207},[204,85659,85660],{"class":263},"Star",[204,85662,771],{"class":214},[204,85664,85665],{"class":263},"prototype",[204,85667,13651],{"class":210},[204,85669,15659],{"class":214},[204,85671,85672],{"class":206,"line":126},[204,85673,85674],{"class":273},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[204,85676,85677],{"class":206,"line":131},[204,85678,85679],{"class":214},"  constructor: Star,\n",[204,85681,85682,85685,85687,85689],{"class":206,"line":1281},[204,85683,85684],{"class":2049},"  sing",[204,85686,51523],{"class":214},[204,85688,54535],{"class":210},[204,85690,54538],{"class":214},[204,85692,85693,85695,85697,85699,85702],{"class":206,"line":1287},[204,85694,73839],{"class":214},[204,85696,58333],{"class":2049},[204,85698,215],{"class":214},[204,85700,85701],{"class":319},"'唱歌'",[204,85703,221],{"class":214},[204,85705,85706],{"class":206,"line":1301},[204,85707,85708],{"class":214},"   },\n",[204,85710,85711,85714,85716,85718],{"class":206,"line":1307},[204,85712,85713],{"class":2049},"   dance",[204,85715,51523],{"class":214},[204,85717,54535],{"class":210},[204,85719,54538],{"class":214},[204,85721,85722,85725,85727,85729,85732],{"class":206,"line":1398},[204,85723,85724],{"class":214},"     console.",[204,85726,58333],{"class":2049},[204,85728,215],{"class":214},[204,85730,85731],{"class":319},"'跳舞'",[204,85733,221],{"class":214},[204,85735,85736],{"class":206,"line":1404},[204,85737,4395],{"class":214},[204,85739,85740],{"class":206,"line":1416},[204,85741,1651],{"class":214},[19,85743,85744],{},[23,85745],{"alt":125,"src":85746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85748,85749],{},"总结1：",[19,85751,85752],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85754,85755],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85757,85758],{},"constructor指的是他的来源",[19,85760,85761],{},[23,85762],{"alt":125,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85765,85766],{},[23,85767],{"alt":125,"src":85768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85770,85771],{},"总结2：",[19,85773,85774],{},[23,85775],{"alt":125,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85778,85779],{},[23,85780],{"alt":125,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85783,85784],{},[23,85785],{"alt":125,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[49,85788,85790],{"id":85789},"_4134-对象原型","4.13.4 对象原型",[19,85792,85793],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85795,85796],{},"对象原型就是__proto__这个属性",[19,85798,85799],{},[23,85800],{"alt":125,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85803,85804],{},[23,85805],{"alt":125,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85808,85809],{},[23,85810],{"alt":125,"src":85811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85813,85814],{},[23,85815],{"alt":125,"src":85816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[196,85818,85820],{"className":53153,"code":85819,"language":53155,"meta":125,"style":125},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[81,85821,85822,85830,85838,85842,85846,85850,85855,85863],{"__ignoreMap":125},[204,85823,85824,85826,85828],{"class":206,"line":207},[204,85825,1123],{"class":214},[204,85827,51886],{"class":51386},[204,85829,51393],{"class":214},[204,85831,85832,85834,85836],{"class":206,"line":126},[204,85833,52230],{"class":214},[204,85835,51899],{"class":51386},[204,85837,51393],{"class":214},[204,85839,85840],{"class":206,"line":131},[204,85841,85462],{"class":214},[204,85843,85844],{"class":206,"line":1281},[204,85845,2273],{"class":214},[204,85847,85848],{"class":206,"line":1287},[204,85849,85471],{"class":214},[204,85851,85852],{"class":206,"line":1301},[204,85853,85854],{"class":214},"    console.log(ldh)\n",[204,85856,85857,85859,85861],{"class":206,"line":1307},[204,85858,52503],{"class":214},[204,85860,51899],{"class":51386},[204,85862,51393],{"class":214},[204,85864,85865,85867,85869],{"class":206,"line":1398},[204,85866,51871],{"class":214},[204,85868,51886],{"class":51386},[204,85870,51393],{"class":214},[19,85872,85873],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85875,85876],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85878,85879],{},[23,85880],{"alt":125,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85883,85884],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85886,85887],{},"对象原型指向原型对象",[19,85889,85890],{},[23,85891],{"alt":125,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85894,85895],{},[23,85896],{"alt":125,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85899,85900],{},[23,85901],{"alt":125,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[49,85904,85906],{"id":85905},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85908,85909],{},[23,85910],{"alt":125,"src":85911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[161,85913,85914,85917,85920,85923],{},[71,85915,85916],{},"构造函数通过new的形式实例化得到实例对象",[71,85918,85919],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[71,85921,85922],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[71,85924,85925],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85927,85928],{},[23,85929],{"alt":125,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85932,85933],{},"题目梳理：",[19,85935,85936],{},[23,85937],{"alt":125,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[49,85940,85942],{"id":85941},"_4136-原型继承","4.13.6 原型继承",[19,85944,85945],{},[23,85946],{"alt":125,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,85949,85950],{},[23,85951],{"alt":125,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,85954,85955],{},[23,85956],{"alt":125,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,85959,85960],{},[23,85961],{"alt":125,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,85964,85965],{},[23,85966],{"alt":125,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,85969,85970],{},[23,85971],{"alt":125,"src":85972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,85974,85975],{},[23,85976],{"alt":125,"src":85977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,85979,85980],{},[23,85981],{"alt":125,"src":85982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,85984,85985],{},"回顾：构造函数每次new得到对象都是不同的",[49,85987,85989],{"id":85988},"_4137-原型链","4.13.7 原型链",[19,85991,85992],{},[23,85993],{"alt":125,"src":85994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,85996,85997],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,85999,86000],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86002,86003],{},"大哥是Object",[19,86005,86006],{},[23,86007],{"alt":125,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86010,86011],{},[23,86012],{"alt":125,"src":86013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86015,86016],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86018,86019],{},"万物皆对象",[49,86021,86023],{"id":86022},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86025,86026],{},"模态框",[19,86028,86029],{},"以后遇见这个效果直接使用这个就行",[19,86031,86032],{},[23,86033],{"alt":125,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86036,86037],{},[23,86038],{"alt":125,"src":86039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86041,86042],{},[23,86043],{"alt":125,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86046,86047],{},[23,86048],{"alt":125,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86051,86052],{},"补充知识点：",[161,86054,86055],{},[71,86056,86057],{},"append()",[19,86059,86060],{},[23,86061],{"alt":125,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[196,86064,86066],{"className":50719,"code":86065,"language":50721,"meta":125,"style":125},"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",[81,86067,86068,86073,86078,86083,86087,86091,86095,86100,86105,86110,86114],{"__ignoreMap":125},[204,86069,86070],{"class":206,"line":207},[204,86071,86072],{"class":214},"append(param1)\n",[204,86074,86075],{"class":206,"line":126},[204,86076,86077],{"class":214},"append(param1, param2)\n",[204,86079,86080],{"class":206,"line":131},[204,86081,86082],{"class":214},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[204,86084,86085],{"class":206,"line":1281},[204,86086,2486],{"emptyLinePlaceholder":135},[204,86088,86089],{"class":206,"line":1287},[204,86090,2486],{"emptyLinePlaceholder":135},[204,86092,86093],{"class":206,"line":1301},[204,86094,2486],{"emptyLinePlaceholder":135},[204,86096,86097],{"class":206,"line":1307},[204,86098,86099],{"class":214},"let div = document.createElement(\"div\");\n",[204,86101,86102],{"class":206,"line":1398},[204,86103,86104],{"class":214},"let p = document.createElement(\"p\");\n",[204,86106,86107],{"class":206,"line":1404},[204,86108,86109],{"class":214},"div.append(p);\n",[204,86111,86112],{"class":206,"line":1416},[204,86113,2486],{"emptyLinePlaceholder":135},[204,86115,86116,86119,86121],{"class":206,"line":1698},[204,86117,86118],{"class":214},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[204,86120,19],{"class":51386},[204,86122,86123],{"class":214},"> ]\n",[161,86125,86126],{"start":126},[71,86127,86128],{},"remove()",[19,86130,86131],{},"自己删自己",[19,86133,86134],{},[23,86135],{"alt":125,"src":86136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[196,86138,86140],{"className":50719,"code":86139,"language":50721,"meta":125,"style":125},"\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",[81,86141,86142,86152,86166,86170,86178,86192,86212,86224,86232,86239,86251,86264,86299,86311,86322,86334,86346,86358,86385,86395,86399,86403,86412,86424,86438,86448,86460,86464,86468,86478,86489,86499,86509,86522,86535,86545,86549,86553,86562,86572,86584,86588,86592,86601,86611,86621,86633,86637,86641,86651,86667,86678,86688,86698,86710,86722,86734,86738,86742,86755,86766,86770,86778,86786,86790,86798,86818,86838,86846,86851,86877,86882,86887,86906,86911,86923,86928,86939,86949,86959,86964,86969,86973,86978,86983,86988,87008,87013,87033,87038,87052,87057,87062,87067,87083,87087,87092,87121,87126,87131,87136,87147,87151,87155,87159,87164,87189,87194,87219,87224,87233,87237,87242,87267,87271,87296,87300,87309,87313,87318,87336,87346,87350,87358,87366,87370],{"__ignoreMap":125},[204,86143,86144,86146,86148,86150],{"class":206,"line":207},[204,86145,51383],{"class":214},[204,86147,51387],{"class":51386},[204,86149,51390],{"class":2049},[204,86151,51393],{"class":214},[204,86153,86154,86156,86158,86160,86162,86164],{"class":206,"line":126},[204,86155,1123],{"class":214},[204,86157,50721],{"class":51386},[204,86159,51402],{"class":2049},[204,86161,260],{"class":214},[204,86163,51407],{"class":319},[204,86165,51393],{"class":214},[204,86167,86168],{"class":206,"line":131},[204,86169,2486],{"emptyLinePlaceholder":135},[204,86171,86172,86174,86176],{"class":206,"line":1281},[204,86173,1123],{"class":214},[204,86175,51420],{"class":51386},[204,86177,51393],{"class":214},[204,86179,86180,86182,86184,86186,86188,86190],{"class":206,"line":1287},[204,86181,52230],{"class":214},[204,86183,51430],{"class":51386},[204,86185,51433],{"class":2049},[204,86187,260],{"class":214},[204,86189,51438],{"class":319},[204,86191,51393],{"class":214},[204,86193,86194,86196,86198,86200,86202,86204,86206,86208,86210],{"class":206,"line":1301},[204,86195,52230],{"class":214},[204,86197,51430],{"class":51386},[204,86199,15007],{"class":2049},[204,86201,260],{"class":214},[204,86203,51477],{"class":319},[204,86205,51457],{"class":2049},[204,86207,260],{"class":214},[204,86209,51484],{"class":319},[204,86211,51393],{"class":214},[204,86213,86214,86216,86218,86220,86222],{"class":206,"line":1307},[204,86215,52230],{"class":214},[204,86217,51493],{"class":51386},[204,86219,51496],{"class":214},[204,86221,51493],{"class":51386},[204,86223,51393],{"class":214},[204,86225,86226,86228,86230],{"class":206,"line":1398},[204,86227,52230],{"class":214},[204,86229,5213],{"class":51386},[204,86231,51393],{"class":214},[204,86233,86234,86237],{"class":206,"line":1404},[204,86235,86236],{"class":2049},"    .modal",[204,86238,15659],{"class":214},[204,86240,86241,86243,86245,86247,86249],{"class":206,"line":1416},[204,86242,54857],{"class":263},[204,86244,51523],{"class":214},[204,86246,4059],{"class":263},[204,86248,51578],{"class":210},[204,86250,1377],{"class":214},[204,86252,86253,86256,86258,86260,86262],{"class":206,"line":1698},[204,86254,86255],{"class":263},"      min-height",[204,86257,51523],{"class":214},[204,86259,524],{"class":263},[204,86261,51578],{"class":210},[204,86263,1377],{"class":214},[204,86265,86266,86268,86270,86272,86274,86276,86278,86280,86282,86284,86286,86288,86290,86292,86294,86297],{"class":206,"line":1703},[204,86267,78836],{"class":263},[204,86269,51523],{"class":214},[204,86271,405],{"class":263},[204,86273,4179],{"class":263},[204,86275,2124],{"class":263},[204,86277,51578],{"class":210},[204,86279,78853],{"class":263},[204,86281,215],{"class":214},[204,86283,405],{"class":263},[204,86285,12522],{"class":214},[204,86287,405],{"class":263},[204,86289,12522],{"class":214},[204,86291,405],{"class":263},[204,86293,12522],{"class":214},[204,86295,86296],{"class":263},"0.1",[204,86298,2805],{"class":214},[204,86300,86301,86303,86305,86307,86309],{"class":206,"line":1709},[204,86302,55220],{"class":263},[204,86304,51523],{"class":214},[204,86306,506],{"class":263},[204,86308,51578],{"class":210},[204,86310,1377],{"class":214},[204,86312,86313,86315,86317,86320],{"class":206,"line":1714},[204,86314,54845],{"class":263},[204,86316,51523],{"class":214},[204,86318,86319],{"class":263},"fixed",[204,86321,1377],{"class":214},[204,86323,86324,86327,86329,86332],{"class":206,"line":1728},[204,86325,86326],{"class":263},"      z-index",[204,86328,51523],{"class":214},[204,86330,86331],{"class":263},"999",[204,86333,1377],{"class":214},[204,86335,86336,86338,86340,86342,86344],{"class":206,"line":1733},[204,86337,54924],{"class":263},[204,86339,51523],{"class":214},[204,86341,869],{"class":263},[204,86343,541],{"class":210},[204,86345,1377],{"class":214},[204,86347,86348,86350,86352,86354,86356],{"class":206,"line":1739},[204,86349,55033],{"class":263},[204,86351,51523],{"class":214},[204,86353,869],{"class":263},[204,86355,541],{"class":210},[204,86357,1377],{"class":214},[204,86359,86360,86362,86364,86366,86368,86371,86373,86375,86377,86379,86381,86383],{"class":206,"line":1760},[204,86361,78877],{"class":263},[204,86363,51523],{"class":214},[204,86365,78882],{"class":263},[204,86367,215],{"class":214},[204,86369,86370],{"class":263},"-50",[204,86372,541],{"class":210},[204,86374,12522],{"class":214},[204,86376,86370],{"class":263},[204,86378,541],{"class":210},[204,86380,12522],{"class":214},[204,86382,405],{"class":263},[204,86384,2805],{"class":214},[204,86386,86387,86389,86391,86393],{"class":206,"line":1765},[204,86388,54970],{"class":263},[204,86390,51523],{"class":214},[204,86392,60928],{"class":263},[204,86394,1377],{"class":214},[204,86396,86397],{"class":206,"line":1779},[204,86398,2273],{"class":214},[204,86400,86401],{"class":206,"line":1784},[204,86402,2486],{"emptyLinePlaceholder":135},[204,86404,86405,86407,86410],{"class":206,"line":1813},[204,86406,86236],{"class":2049},[204,86408,86409],{"class":2049}," .header",[204,86411,15659],{"class":214},[204,86413,86414,86416,86418,86420,86422],{"class":206,"line":1818},[204,86415,57445],{"class":263},[204,86417,51523],{"class":214},[204,86419,614],{"class":263},[204,86421,51578],{"class":210},[204,86423,1377],{"class":214},[204,86425,86426,86428,86430,86432,86434,86436],{"class":206,"line":1835},[204,86427,54781],{"class":263},[204,86429,51523],{"class":214},[204,86431,405],{"class":263},[204,86433,2124],{"class":263},[204,86435,51578],{"class":210},[204,86437,1377],{"class":214},[204,86439,86440,86442,86444,86446],{"class":206,"line":1840},[204,86441,54845],{"class":263},[204,86443,51523],{"class":214},[204,86445,54850],{"class":263},[204,86447,1377],{"class":214},[204,86449,86450,86452,86454,86456,86458],{"class":206,"line":1845},[204,86451,55008],{"class":263},[204,86453,51523],{"class":214},[204,86455,913],{"class":263},[204,86457,51578],{"class":210},[204,86459,1377],{"class":214},[204,86461,86462],{"class":206,"line":1850},[204,86463,2273],{"class":214},[204,86465,86466],{"class":206,"line":1864},[204,86467,2486],{"emptyLinePlaceholder":135},[204,86469,86470,86472,86474,86476],{"class":206,"line":1869},[204,86471,86236],{"class":2049},[204,86473,86409],{"class":2049},[204,86475,3118],{"class":51386},[204,86477,15659],{"class":214},[204,86479,86480,86483,86485,86487],{"class":206,"line":2663},[204,86481,86482],{"class":263},"      font-style",[204,86484,51523],{"class":214},[204,86486,63927],{"class":263},[204,86488,1377],{"class":214},[204,86490,86491,86493,86495,86497],{"class":206,"line":2677},[204,86492,57502],{"class":263},[204,86494,51523],{"class":214},[204,86496,62156],{"class":263},[204,86498,1377],{"class":214},[204,86500,86501,86503,86505,86507],{"class":206,"line":2685},[204,86502,54845],{"class":263},[204,86504,51523],{"class":214},[204,86506,54917],{"class":263},[204,86508,1377],{"class":214},[204,86510,86511,86514,86516,86518,86520],{"class":206,"line":2690},[204,86512,86513],{"class":263},"      right",[204,86515,51523],{"class":214},[204,86517,788],{"class":263},[204,86519,51578],{"class":210},[204,86521,1377],{"class":214},[204,86523,86524,86526,86528,86531,86533],{"class":206,"line":2696},[204,86525,55033],{"class":263},[204,86527,51523],{"class":214},[204,86529,86530],{"class":263},"-2",[204,86532,51578],{"class":210},[204,86534,1377],{"class":214},[204,86536,86537,86539,86541,86543],{"class":206,"line":2702},[204,86538,62111],{"class":263},[204,86540,51523],{"class":214},[204,86542,62116],{"class":263},[204,86544,1377],{"class":214},[204,86546,86547],{"class":206,"line":2707},[204,86548,2273],{"class":214},[204,86550,86551],{"class":206,"line":8035},[204,86552,2486],{"emptyLinePlaceholder":135},[204,86554,86555,86557,86560],{"class":206,"line":8059},[204,86556,86236],{"class":2049},[204,86558,86559],{"class":2049}," .body",[204,86561,15659],{"class":214},[204,86563,86564,86566,86568,86570],{"class":206,"line":8064},[204,86565,57372],{"class":263},[204,86567,51523],{"class":214},[204,86569,51678],{"class":263},[204,86571,1377],{"class":214},[204,86573,86574,86576,86578,86580,86582],{"class":206,"line":8070},[204,86575,54781],{"class":263},[204,86577,51523],{"class":214},[204,86579,659],{"class":263},[204,86581,51578],{"class":210},[204,86583,1377],{"class":214},[204,86585,86586],{"class":206,"line":8097},[204,86587,2273],{"class":214},[204,86589,86590],{"class":206,"line":8102},[204,86591,2486],{"emptyLinePlaceholder":135},[204,86593,86594,86596,86599],{"class":206,"line":8108},[204,86595,86236],{"class":2049},[204,86597,86598],{"class":2049}," .footer",[204,86600,15659],{"class":214},[204,86602,86603,86605,86607,86609],{"class":206,"line":8120},[204,86604,55095],{"class":263},[204,86606,51523],{"class":214},[204,86608,51563],{"class":263},[204,86610,1377],{"class":214},[204,86612,86613,86615,86617,86619],{"class":206,"line":8132},[204,86614,55106],{"class":263},[204,86616,51523],{"class":214},[204,86618,51666],{"class":263},[204,86620,1377],{"class":214},[204,86622,86623,86625,86627,86629,86631],{"class":206,"line":8144},[204,86624,54781],{"class":263},[204,86626,51523],{"class":214},[204,86628,659],{"class":263},[204,86630,51578],{"class":210},[204,86632,1377],{"class":214},[204,86634,86635],{"class":206,"line":9803},[204,86636,2273],{"class":214},[204,86638,86639],{"class":206,"line":9828},[204,86640,2486],{"emptyLinePlaceholder":135},[204,86642,86643,86645,86647,86649],{"class":206,"line":9851},[204,86644,86236],{"class":2049},[204,86646,86598],{"class":2049},[204,86648,1485],{"class":51386},[204,86650,15659],{"class":214},[204,86652,86653,86655,86657,86659,86661,86663,86665],{"class":206,"line":9875},[204,86654,54781],{"class":263},[204,86656,51523],{"class":214},[204,86658,286],{"class":263},[204,86660,51578],{"class":210},[204,86662,2169],{"class":263},[204,86664,51578],{"class":210},[204,86666,1377],{"class":214},[204,86668,86669,86671,86673,86676],{"class":206,"line":9880},[204,86670,61807],{"class":263},[204,86672,51523],{"class":214},[204,86674,86675],{"class":263},"#ccc",[204,86677,1377],{"class":214},[204,86679,86680,86682,86684,86686],{"class":206,"line":9885},[204,86681,64056],{"class":263},[204,86683,51523],{"class":214},[204,86685,54823],{"class":263},[204,86687,1377],{"class":214},[204,86689,86690,86692,86694,86696],{"class":206,"line":9890},[204,86691,57502],{"class":263},[204,86693,51523],{"class":214},[204,86695,60928],{"class":263},[204,86697,1377],{"class":214},[204,86699,86700,86702,86704,86706,86708],{"class":206,"line":9899},[204,86701,55220],{"class":263},[204,86703,51523],{"class":214},[204,86705,292],{"class":263},[204,86707,51578],{"class":210},[204,86709,1377],{"class":214},[204,86711,86712,86714,86716,86718,86720],{"class":206,"line":9904},[204,86713,61836],{"class":263},[204,86715,51523],{"class":214},[204,86717,659],{"class":263},[204,86719,51578],{"class":210},[204,86721,1377],{"class":214},[204,86723,86724,86726,86728,86730,86732],{"class":206,"line":9910},[204,86725,55008],{"class":263},[204,86727,51523],{"class":214},[204,86729,762],{"class":263},[204,86731,51578],{"class":210},[204,86733,1377],{"class":214},[204,86735,86736],{"class":206,"line":9931},[204,86737,2273],{"class":214},[204,86739,86740],{"class":206,"line":9937},[204,86741,2486],{"emptyLinePlaceholder":135},[204,86743,86744,86746,86748,86750,86753],{"class":206,"line":9951},[204,86745,86236],{"class":2049},[204,86747,86598],{"class":2049},[204,86749,1485],{"class":51386},[204,86751,86752],{"class":2049},".submit",[204,86754,15659],{"class":214},[204,86756,86757,86759,86761,86764],{"class":206,"line":9957},[204,86758,54970],{"class":263},[204,86760,51523],{"class":214},[204,86762,86763],{"class":263},"#369",[204,86765,1377],{"class":214},[204,86767,86768],{"class":206,"line":9984},[204,86769,2273],{"class":214},[204,86771,86772,86774,86776],{"class":206,"line":9993},[204,86773,52503],{"class":214},[204,86775,5213],{"class":51386},[204,86777,51393],{"class":214},[204,86779,86780,86782,86784],{"class":206,"line":9999},[204,86781,51871],{"class":214},[204,86783,51420],{"class":51386},[204,86785,51393],{"class":214},[204,86787,86788],{"class":206,"line":10007},[204,86789,2486],{"emptyLinePlaceholder":135},[204,86791,86792,86794,86796],{"class":206,"line":10012},[204,86793,1123],{"class":214},[204,86795,51886],{"class":51386},[204,86797,51393],{"class":214},[204,86799,86800,86802,86804,86806,86808,86811,86814,86816],{"class":206,"line":16691},[204,86801,52230],{"class":214},[204,86803,53973],{"class":51386},[204,86805,15046],{"class":2049},[204,86807,260],{"class":214},[204,86809,86810],{"class":319},"\"delete\"",[204,86812,86813],{"class":214},">删除\u003C\u002F",[204,86815,53973],{"class":51386},[204,86817,51393],{"class":214},[204,86819,86820,86822,86824,86826,86828,86831,86834,86836],{"class":206,"line":16697},[204,86821,52230],{"class":214},[204,86823,53973],{"class":51386},[204,86825,15046],{"class":2049},[204,86827,260],{"class":214},[204,86829,86830],{"class":319},"\"login\"",[204,86832,86833],{"class":214},">登录\u003C\u002F",[204,86835,53973],{"class":51386},[204,86837,51393],{"class":214},[204,86839,86840,86842,86844],{"class":206,"line":16720},[204,86841,52230],{"class":214},[204,86843,51899],{"class":51386},[204,86845,51393],{"class":214},[204,86847,86848],{"class":206,"line":16726},[204,86849,86850],{"class":273},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[204,86852,86853,86855,86858,86860,86862,86864,86866,86868,86871,86873,86875],{"class":206,"line":16749},[204,86854,70170],{"class":210},[204,86856,86857],{"class":2049}," Modal",[204,86859,215],{"class":214},[204,86861,51493],{"class":5303},[204,86863,13651],{"class":210},[204,86865,70016],{"class":319},[204,86867,12522],{"class":214},[204,86869,86870],{"class":5303},"message",[204,86872,13651],{"class":210},[204,86874,70016],{"class":319},[204,86876,12529],{"class":214},[204,86878,86879],{"class":206,"line":16763},[204,86880,86881],{"class":273},"      \u002F\u002F 创建Model 模态框盒子\n",[204,86883,86884],{"class":206,"line":16783},[204,86885,86886],{"class":273},"      \u002F\u002F 1.1 创建div标签\n",[204,86888,86889,86891,86894,86896,86898,86900,86902,86904],{"class":206,"line":16789},[204,86890,70137],{"class":263},[204,86892,86893],{"class":214},".modalBox ",[204,86895,260],{"class":210},[204,86897,54482],{"class":214},[204,86899,70237],{"class":2049},[204,86901,215],{"class":214},[204,86903,82017],{"class":319},[204,86905,221],{"class":214},[204,86907,86908],{"class":206,"line":16800},[204,86909,86910],{"class":273},"      \u002F\u002F 1.2 给div 添加类名为model\n",[204,86912,86913,86915,86918,86920],{"class":206,"line":16823},[204,86914,70137],{"class":263},[204,86916,86917],{"class":214},".modalBox.className ",[204,86919,260],{"class":210},[204,86921,86922],{"class":319}," 'modal'\n",[204,86924,86925],{"class":206,"line":16845},[204,86926,86927],{"class":273},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[204,86929,86930,86932,86935,86937],{"class":206,"line":16850},[204,86931,70137],{"class":263},[204,86933,86934],{"class":214},".modalBox.innerHTML ",[204,86936,260],{"class":210},[204,86938,70254],{"class":319},[204,86940,86941,86944,86946],{"class":206,"line":16856},[204,86942,86943],{"class":319},"        \u003Cdiv class=\"header\">${",[204,86945,51493],{"class":214},[204,86947,86948],{"class":319},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[204,86950,86951,86954,86956],{"class":206,"line":16870},[204,86952,86953],{"class":319},"        \u003Cdiv class=\"body\">${",[204,86955,86870],{"class":214},[204,86957,86958],{"class":319},"}\u003C\u002Fdiv>\n",[204,86960,86961],{"class":206,"line":16883},[204,86962,86963],{"class":319},"      `\n",[204,86965,86966],{"class":206,"line":16888},[204,86967,86968],{"class":273},"      \u002F\u002F console.log(this.modalBox)\n",[204,86970,86971],{"class":206,"line":16902},[204,86972,2273],{"class":214},[204,86974,86975],{"class":206,"line":16907},[204,86976,86977],{"class":273},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[204,86979,86980],{"class":206,"line":16913},[204,86981,86982],{"class":273},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[204,86984,86985],{"class":206,"line":16918},[204,86986,86987],{"class":273},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[204,86989,86990,86993,86995,86997,86999,87002,87004,87006],{"class":206,"line":16932},[204,86991,86992],{"class":263},"    Modal",[204,86994,771],{"class":214},[204,86996,85665],{"class":263},[204,86998,771],{"class":214},[204,87000,87001],{"class":2049},"open",[204,87003,13651],{"class":210},[204,87005,59004],{"class":210},[204,87007,54538],{"class":214},[204,87009,87010],{"class":206,"line":16937},[204,87011,87012],{"class":273},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[204,87014,87015,87017,87020,87022,87024,87026,87028,87031],{"class":206,"line":16942},[204,87016,58314],{"class":210},[204,87018,87019],{"class":263}," box",[204,87021,13651],{"class":210},[204,87023,54482],{"class":214},[204,87025,54485],{"class":2049},[204,87027,215],{"class":214},[204,87029,87030],{"class":319},"'.modal'",[204,87032,221],{"class":214},[204,87034,87035],{"class":206,"line":16956},[204,87036,87037],{"class":273},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[204,87039,87040,87043,87045,87048,87050],{"class":206,"line":16968},[204,87041,87042],{"class":214},"      box ",[204,87044,1801],{"class":210},[204,87046,87047],{"class":214}," box.",[204,87049,57092],{"class":2049},[204,87051,2062],{"class":214},[204,87053,87054],{"class":206,"line":16973},[204,87055,87056],{"class":273},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[204,87058,87059],{"class":206,"line":16986},[204,87060,87061],{"class":273},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[204,87063,87064],{"class":206,"line":16991},[204,87065,87066],{"class":273},"      \u002F\u002F append可以增加对象\n",[204,87068,87069,87072,87075,87077,87080],{"class":206,"line":16996},[204,87070,87071],{"class":214},"      document.body.",[204,87073,87074],{"class":2049},"append",[204,87076,215],{"class":214},[204,87078,87079],{"class":263},"this",[204,87081,87082],{"class":214},".modalBox)\n",[204,87084,87085],{"class":206,"line":17001},[204,87086,2486],{"emptyLinePlaceholder":135},[204,87088,87089],{"class":206,"line":17014},[204,87090,87091],{"class":273},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[204,87093,87094,87096,87099,87101,87103,87106,87108,87110,87112,87114,87117,87119],{"class":206,"line":17019},[204,87095,70137],{"class":263},[204,87097,87098],{"class":214},".modalBox.",[204,87100,54485],{"class":2049},[204,87102,215],{"class":214},[204,87104,87105],{"class":319},"'i'",[204,87107,30912],{"class":214},[204,87109,57899],{"class":2049},[204,87111,215],{"class":214},[204,87113,57904],{"class":319},[204,87115,87116],{"class":214},", () ",[204,87118,84808],{"class":210},[204,87120,15659],{"class":214},[204,87122,87123],{"class":206,"line":32719},[204,87124,87125],{"class":273},"        \u002F\u002F 这个地方需要用到箭头函数\n",[204,87127,87128],{"class":206,"line":32725},[204,87129,87130],{"class":273},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[204,87132,87133],{"class":206,"line":32731},[204,87134,87135],{"class":273},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[204,87137,87138,87140,87142,87145],{"class":206,"line":32737},[204,87139,64812],{"class":263},[204,87141,771],{"class":214},[204,87143,87144],{"class":2049},"close",[204,87146,2062],{"class":214},[204,87148,87149],{"class":206,"line":32743},[204,87150,64901],{"class":214},[204,87152,87153],{"class":206,"line":32754},[204,87154,2273],{"class":214},[204,87156,87157],{"class":206,"line":32760},[204,87158,2486],{"emptyLinePlaceholder":135},[204,87160,87161],{"class":206,"line":32780},[204,87162,87163],{"class":273},"    \u002F\u002F 测试一下 点击 删除按钮\n",[204,87165,87166,87168,87170,87172,87175,87177,87179,87181,87183,87185,87187],{"class":206,"line":32786},[204,87167,52493],{"class":214},[204,87169,54485],{"class":2049},[204,87171,215],{"class":214},[204,87173,87174],{"class":319},"'#delete'",[204,87176,30912],{"class":214},[204,87178,57899],{"class":2049},[204,87180,215],{"class":214},[204,87182,57904],{"class":319},[204,87184,87116],{"class":214},[204,87186,84808],{"class":210},[204,87188,15659],{"class":214},[204,87190,87191],{"class":206,"line":32797},[204,87192,87193],{"class":273},"      \u002F\u002F 先调用Model构造函数\n",[204,87195,87196,87198,87201,87203,87205,87207,87209,87212,87214,87217],{"class":206,"line":32803},[204,87197,58314],{"class":210},[204,87199,87200],{"class":263}," del",[204,87202,13651],{"class":210},[204,87204,11665],{"class":210},[204,87206,86857],{"class":2049},[204,87208,215],{"class":214},[204,87210,87211],{"class":319},"'温馨的提示'",[204,87213,12522],{"class":214},[204,87215,87216],{"class":319},"'您没有删除权限操作'",[204,87218,221],{"class":214},[204,87220,87221],{"class":206,"line":32809},[204,87222,87223],{"class":273},"      \u002F\u002F 实例对象调用open方法\n",[204,87225,87226,87229,87231],{"class":206,"line":32815},[204,87227,87228],{"class":214},"      del.",[204,87230,87001],{"class":2049},[204,87232,2062],{"class":214},[204,87234,87235],{"class":206,"line":32821},[204,87236,33547],{"class":214},[204,87238,87239],{"class":206,"line":32827},[204,87240,87241],{"class":273},"    \u002F\u002F 测试一下 点击 登录按钮\n",[204,87243,87244,87246,87248,87250,87253,87255,87257,87259,87261,87263,87265],{"class":206,"line":32833},[204,87245,52493],{"class":214},[204,87247,54485],{"class":2049},[204,87249,215],{"class":214},[204,87251,87252],{"class":319},"'#login'",[204,87254,30912],{"class":214},[204,87256,57899],{"class":2049},[204,87258,215],{"class":214},[204,87260,57904],{"class":319},[204,87262,87116],{"class":214},[204,87264,84808],{"class":210},[204,87266,15659],{"class":214},[204,87268,87269],{"class":206,"line":32839},[204,87270,87193],{"class":273},[204,87272,87273,87275,87278,87280,87282,87284,87286,87289,87291,87294],{"class":206,"line":32859},[204,87274,58314],{"class":210},[204,87276,87277],{"class":263}," log",[204,87279,13651],{"class":210},[204,87281,11665],{"class":210},[204,87283,86857],{"class":2049},[204,87285,215],{"class":214},[204,87287,87288],{"class":319},"'友情提示'",[204,87290,12522],{"class":214},[204,87292,87293],{"class":319},"'您还没有登录呢'",[204,87295,221],{"class":214},[204,87297,87298],{"class":206,"line":32865},[204,87299,87223],{"class":273},[204,87301,87302,87305,87307],{"class":206,"line":32881},[204,87303,87304],{"class":214},"      log.",[204,87306,87001],{"class":2049},[204,87308,2062],{"class":214},[204,87310,87311],{"class":206,"line":32887},[204,87312,33547],{"class":214},[204,87314,87315],{"class":206,"line":32901},[204,87316,87317],{"class":273},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[204,87319,87320,87322,87324,87326,87328,87330,87332,87334],{"class":206,"line":32907},[204,87321,86992],{"class":263},[204,87323,771],{"class":214},[204,87325,85665],{"class":263},[204,87327,771],{"class":214},[204,87329,87144],{"class":2049},[204,87331,13651],{"class":210},[204,87333,59004],{"class":210},[204,87335,54538],{"class":214},[204,87337,87338,87340,87342,87344],{"class":206,"line":32922},[204,87339,70137],{"class":263},[204,87341,87098],{"class":214},[204,87343,57092],{"class":2049},[204,87345,2062],{"class":214},[204,87347,87348],{"class":206,"line":32928},[204,87349,2273],{"class":214},[204,87351,87352,87354,87356],{"class":206,"line":32937},[204,87353,52503],{"class":214},[204,87355,51899],{"class":51386},[204,87357,51393],{"class":214},[204,87359,87360,87362,87364],{"class":206,"line":32943},[204,87361,51871],{"class":214},[204,87363,51886],{"class":51386},[204,87365,51393],{"class":214},[204,87367,87368],{"class":206,"line":32952},[204,87369,2486],{"emptyLinePlaceholder":135},[204,87371,87372,87374,87376],{"class":206,"line":32958},[204,87373,51871],{"class":214},[204,87375,50721],{"class":51386},[204,87377,51393],{"class":214},[19,87379,87380],{},[23,87381],{"alt":125,"src":87382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87384,87386],{"id":87385},"_414-深浅拷贝","4.14 深浅拷贝",[49,87388,87390],{"id":87389},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87392,87393],{},[23,87394],{"alt":125,"src":87395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87397,87398],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87400,87401],{},[23,87402],{"alt":125,"src":87403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87405,87406],{},[23,87407],{"alt":125,"src":87408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87410,87411],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87413,87414],{},[23,87415],{"alt":125,"src":87416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87418,11419],{},[19,87420,87421],{},[23,87422],{"alt":125,"src":87423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[49,87425,87427],{"id":87426},"_4142-深拷贝","4.14.2 深拷贝",[19,87429,87430],{},"深拷贝：拷贝的是对象，不是地址",[19,87432,87433],{},"常用的三种方法：",[161,87435,87436,87439,87442],{},[71,87437,87438],{},"通过递归实现深拷贝",[71,87440,87441],{},"lodash\u002FcloneDeep",[71,87443,87444],{},"通过JSON.stringify()实现",[22085,87446,87448],{"id":87447},"_41421-递归函数","4.14.2.1 递归函数",[19,87450,87451],{},[23,87452],{"alt":125,"src":87453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[161,87455,87456],{},[71,87457,87458],{},"死递归占溢出：",[196,87460,87462],{"className":53153,"code":87461,"language":53155,"meta":125,"style":125},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[81,87463,87464,87472,87480,87484,87489,87493,87498,87506],{"__ignoreMap":125},[204,87465,87466,87468,87470],{"class":206,"line":207},[204,87467,1123],{"class":214},[204,87469,51886],{"class":51386},[204,87471,51393],{"class":214},[204,87473,87474,87476,87478],{"class":206,"line":126},[204,87475,52230],{"class":214},[204,87477,51899],{"class":51386},[204,87479,51393],{"class":214},[204,87481,87482],{"class":206,"line":131},[204,87483,77229],{"class":214},[204,87485,87486],{"class":206,"line":1281},[204,87487,87488],{"class":214},"      fn()\n",[204,87490,87491],{"class":206,"line":1287},[204,87492,2273],{"class":214},[204,87494,87495],{"class":206,"line":1301},[204,87496,87497],{"class":214},"    fn()\n",[204,87499,87500,87502,87504],{"class":206,"line":1307},[204,87501,52503],{"class":214},[204,87503,51899],{"class":51386},[204,87505,51393],{"class":214},[204,87507,87508,87510,87512],{"class":206,"line":1398},[204,87509,51871],{"class":214},[204,87511,51886],{"class":51386},[204,87513,51393],{"class":214},[161,87515,87516],{"start":126},[71,87517,87518],{},"递归函数要加判断条件：",[19,87520,87521],{},[23,87522],{"alt":125,"src":87523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[161,87525,87526],{"start":131},[71,87527,87528],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[196,87530,87532],{"className":50719,"code":87531,"language":50721,"meta":125,"style":125},"\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",[81,87533,87534,87544,87558,87562,87570,87584,87604,87616,87624,87628,87636,87648,87656,87664,87689,87701,87705,87712,87720,87728,87732],{"__ignoreMap":125},[204,87535,87536,87538,87540,87542],{"class":206,"line":207},[204,87537,51383],{"class":214},[204,87539,51387],{"class":51386},[204,87541,51390],{"class":2049},[204,87543,51393],{"class":214},[204,87545,87546,87548,87550,87552,87554,87556],{"class":206,"line":126},[204,87547,1123],{"class":214},[204,87549,50721],{"class":51386},[204,87551,51402],{"class":2049},[204,87553,260],{"class":214},[204,87555,51407],{"class":319},[204,87557,51393],{"class":214},[204,87559,87560],{"class":206,"line":131},[204,87561,2486],{"emptyLinePlaceholder":135},[204,87563,87564,87566,87568],{"class":206,"line":1281},[204,87565,1123],{"class":214},[204,87567,51420],{"class":51386},[204,87569,51393],{"class":214},[204,87571,87572,87574,87576,87578,87580,87582],{"class":206,"line":1287},[204,87573,52230],{"class":214},[204,87575,51430],{"class":51386},[204,87577,51433],{"class":2049},[204,87579,260],{"class":214},[204,87581,51438],{"class":319},[204,87583,51393],{"class":214},[204,87585,87586,87588,87590,87592,87594,87596,87598,87600,87602],{"class":206,"line":1301},[204,87587,52230],{"class":214},[204,87589,51430],{"class":51386},[204,87591,15007],{"class":2049},[204,87593,260],{"class":214},[204,87595,51477],{"class":319},[204,87597,51457],{"class":2049},[204,87599,260],{"class":214},[204,87601,51484],{"class":319},[204,87603,51393],{"class":214},[204,87605,87606,87608,87610,87612,87614],{"class":206,"line":1307},[204,87607,52230],{"class":214},[204,87609,51493],{"class":51386},[204,87611,51496],{"class":214},[204,87613,51493],{"class":51386},[204,87615,51393],{"class":214},[204,87617,87618,87620,87622],{"class":206,"line":1398},[204,87619,51871],{"class":214},[204,87621,51420],{"class":51386},[204,87623,51393],{"class":214},[204,87625,87626],{"class":206,"line":1404},[204,87627,2486],{"emptyLinePlaceholder":135},[204,87629,87630,87632,87634],{"class":206,"line":1416},[204,87631,1123],{"class":214},[204,87633,51886],{"class":51386},[204,87635,51393],{"class":214},[204,87637,87638,87640,87642,87644,87646],{"class":206,"line":1698},[204,87639,52230],{"class":214},[204,87641,51697],{"class":51386},[204,87643,55400],{"class":214},[204,87645,51697],{"class":51386},[204,87647,51393],{"class":214},[204,87649,87650,87652,87654],{"class":206,"line":1703},[204,87651,52230],{"class":214},[204,87653,51899],{"class":51386},[204,87655,51393],{"class":214},[204,87657,87658,87660,87662],{"class":206,"line":1709},[204,87659,70170],{"class":210},[204,87661,73859],{"class":2049},[204,87663,10940],{"class":214},[204,87665,87666,87668,87670,87672,87674,87676,87678,87680,87682,87684,87687],{"class":206,"line":1714},[204,87667,55857],{"class":214},[204,87669,54485],{"class":2049},[204,87671,215],{"class":214},[204,87673,82017],{"class":319},[204,87675,74335],{"class":214},[204,87677,260],{"class":210},[204,87679,11665],{"class":210},[204,87681,73875],{"class":2049},[204,87683,17348],{"class":214},[204,87685,87686],{"class":2049},"toLocaleString",[204,87688,2062],{"class":214},[204,87690,87691,87694,87697,87699],{"class":206,"line":1728},[204,87692,87693],{"class":2049},"      setTimeout",[204,87695,87696],{"class":214},"(getTime, ",[204,87698,6497],{"class":263},[204,87700,221],{"class":214},[204,87702,87703],{"class":206,"line":1733},[204,87704,2273],{"class":214},[204,87706,87707,87710],{"class":206,"line":1739},[204,87708,87709],{"class":2049},"    getTime",[204,87711,2062],{"class":214},[204,87713,87714,87716,87718],{"class":206,"line":1760},[204,87715,52503],{"class":214},[204,87717,51899],{"class":51386},[204,87719,51393],{"class":214},[204,87721,87722,87724,87726],{"class":206,"line":1765},[204,87723,51871],{"class":214},[204,87725,51886],{"class":51386},[204,87727,51393],{"class":214},[204,87729,87730],{"class":206,"line":1779},[204,87731,2486],{"emptyLinePlaceholder":135},[204,87733,87734,87736,87738],{"class":206,"line":1784},[204,87735,51871],{"class":214},[204,87737,50721],{"class":51386},[204,87739,51393],{"class":214},[19,87741,87742],{},[23,87743],{"alt":125,"src":87744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[161,87746,87747],{"start":1281},[71,87748,87438],{},[19,87750,87751],{},[23,87752],{"alt":125,"src":87753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87755,87756],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87758,39275],{},[19,87760,87761],{},"这个是简易版的递归函数深拷贝",[19,87763,87764],{},"一定要注意先数组再对象，因为万物皆可对象",[196,87766,87768],{"className":50719,"code":87767,"language":50721,"meta":125,"style":125},"\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",[81,87769,87770,87780,87794,87798,87806,87820,87840,87852,87860,87864,87872,87880,87890,87899,87907,87923,87927,87935,87939,87943,87955,87960,87979,87995,88000,88005,88010,88025,88030,88035,88044,88052,88069,88077,88083,88091,88096,88101,88110,88114,88118,88122,88133,88142,88152,88166,88176,88184,88192,88200,88204],{"__ignoreMap":125},[204,87771,87772,87774,87776,87778],{"class":206,"line":207},[204,87773,51383],{"class":214},[204,87775,51387],{"class":51386},[204,87777,51390],{"class":2049},[204,87779,51393],{"class":214},[204,87781,87782,87784,87786,87788,87790,87792],{"class":206,"line":126},[204,87783,1123],{"class":214},[204,87785,50721],{"class":51386},[204,87787,51402],{"class":2049},[204,87789,260],{"class":214},[204,87791,51407],{"class":319},[204,87793,51393],{"class":214},[204,87795,87796],{"class":206,"line":131},[204,87797,2486],{"emptyLinePlaceholder":135},[204,87799,87800,87802,87804],{"class":206,"line":1281},[204,87801,1123],{"class":214},[204,87803,51420],{"class":51386},[204,87805,51393],{"class":214},[204,87807,87808,87810,87812,87814,87816,87818],{"class":206,"line":1287},[204,87809,52230],{"class":214},[204,87811,51430],{"class":51386},[204,87813,51433],{"class":2049},[204,87815,260],{"class":214},[204,87817,51438],{"class":319},[204,87819,51393],{"class":214},[204,87821,87822,87824,87826,87828,87830,87832,87834,87836,87838],{"class":206,"line":1301},[204,87823,52230],{"class":214},[204,87825,51430],{"class":51386},[204,87827,15007],{"class":2049},[204,87829,260],{"class":214},[204,87831,51477],{"class":319},[204,87833,51457],{"class":2049},[204,87835,260],{"class":214},[204,87837,51484],{"class":319},[204,87839,51393],{"class":214},[204,87841,87842,87844,87846,87848,87850],{"class":206,"line":1307},[204,87843,52230],{"class":214},[204,87845,51493],{"class":51386},[204,87847,51496],{"class":214},[204,87849,51493],{"class":51386},[204,87851,51393],{"class":214},[204,87853,87854,87856,87858],{"class":206,"line":1398},[204,87855,51871],{"class":214},[204,87857,51420],{"class":51386},[204,87859,51393],{"class":214},[204,87861,87862],{"class":206,"line":1404},[204,87863,2486],{"emptyLinePlaceholder":135},[204,87865,87866,87868,87870],{"class":206,"line":1416},[204,87867,1123],{"class":214},[204,87869,51886],{"class":51386},[204,87871,51393],{"class":214},[204,87873,87874,87876,87878],{"class":206,"line":1698},[204,87875,52230],{"class":214},[204,87877,51899],{"class":51386},[204,87879,51393],{"class":214},[204,87881,87882,87884,87886,87888],{"class":206,"line":1703},[204,87883,11308],{"class":210},[204,87885,70057],{"class":263},[204,87887,13651],{"class":210},[204,87889,15659],{"class":214},[204,87891,87892,87894,87897],{"class":206,"line":1709},[204,87893,71702],{"class":214},[204,87895,87896],{"class":319},"'pink'",[204,87898,31552],{"class":214},[204,87900,87901,87903,87905],{"class":206,"line":1714},[204,87902,71712],{"class":214},[204,87904,863],{"class":263},[204,87906,31552],{"class":214},[204,87908,87909,87912,87915,87917,87920],{"class":206,"line":1728},[204,87910,87911],{"class":214},"      hobby: [",[204,87913,87914],{"class":319},"'乒乓球'",[204,87916,12522],{"class":214},[204,87918,87919],{"class":319},"'足球'",[204,87921,87922],{"class":214},"],\n",[204,87924,87925],{"class":206,"line":1733},[204,87926,77958],{"class":214},[204,87928,87929,87932],{"class":206,"line":1739},[204,87930,87931],{"class":214},"        baby: ",[204,87933,87934],{"class":319},"'小pink'\n",[204,87936,87937],{"class":206,"line":1760},[204,87938,52484],{"class":214},[204,87940,87941],{"class":206,"line":1765},[204,87942,2273],{"class":214},[204,87944,87945,87947,87950,87952],{"class":206,"line":1779},[204,87946,11308],{"class":210},[204,87948,87949],{"class":263}," o",[204,87951,13651],{"class":210},[204,87953,87954],{"class":214}," {}\n",[204,87956,87957],{"class":206,"line":1784},[204,87958,87959],{"class":273},"    \u002F\u002F 拷贝函数\n",[204,87961,87962,87964,87967,87969,87972,87974,87977],{"class":206,"line":1813},[204,87963,70170],{"class":210},[204,87965,87966],{"class":2049}," deepCopy",[204,87968,215],{"class":214},[204,87970,87971],{"class":5303},"newObj",[204,87973,12522],{"class":214},[204,87975,87976],{"class":5303},"oldObj",[204,87978,12529],{"class":214},[204,87980,87981,87983,87985,87987,87990,87992],{"class":206,"line":1818},[204,87982,52370],{"class":210},[204,87984,1744],{"class":214},[204,87986,51933],{"class":210},[204,87988,87989],{"class":214}," k ",[204,87991,26129],{"class":210},[204,87993,87994],{"class":214}," oldObj) {\n",[204,87996,87997],{"class":206,"line":1835},[204,87998,87999],{"class":273},"        \u002F\u002F 处理数组的问题\n",[204,88001,88002],{"class":206,"line":1840},[204,88003,88004],{"class":273},"        \u002F\u002F 判断是否属于数组\n",[204,88006,88007],{"class":206,"line":1845},[204,88008,88009],{"class":273},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[204,88011,88012,88014,88017,88020,88023],{"class":206,"line":1850},[204,88013,2583],{"class":210},[204,88015,88016],{"class":214}," (oldObj[k] ",[204,88018,88019],{"class":210},"instanceof",[204,88021,88022],{"class":2049}," Array",[204,88024,12529],{"class":214},[204,88026,88027],{"class":206,"line":1864},[204,88028,88029],{"class":273},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[204,88031,88032],{"class":206,"line":1869},[204,88033,88034],{"class":273},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[204,88036,88037,88040,88042],{"class":206,"line":2663},[204,88038,88039],{"class":214},"          newObj[k] ",[204,88041,260],{"class":210},[204,88043,51924],{"class":214},[204,88045,88046,88049],{"class":206,"line":2677},[204,88047,88048],{"class":2049},"          deepCopy",[204,88050,88051],{"class":214},"(newObj[k], oldObj[k])\n",[204,88053,88054,88056,88058,88060,88062,88064,88067],{"class":206,"line":2685},[204,88055,80166],{"class":214},[204,88057,1787],{"class":210},[204,88059,1790],{"class":210},[204,88061,88016],{"class":214},[204,88063,88019],{"class":210},[204,88065,88066],{"class":2049}," Object",[204,88068,12529],{"class":214},[204,88070,88071,88073,88075],{"class":206,"line":2690},[204,88072,88039],{"class":214},[204,88074,260],{"class":210},[204,88076,87954],{"class":214},[204,88078,88079,88081],{"class":206,"line":2696},[204,88080,88048],{"class":2049},[204,88082,88051],{"class":214},[204,88084,88085,88087,88089],{"class":206,"line":2702},[204,88086,80166],{"class":214},[204,88088,1787],{"class":210},[204,88090,15659],{"class":214},[204,88092,88093],{"class":206,"line":2707},[204,88094,88095],{"class":273},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[204,88097,88098],{"class":206,"line":8035},[204,88099,88100],{"class":273},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[204,88102,88103,88105,88107],{"class":206,"line":8059},[204,88104,88039],{"class":214},[204,88106,260],{"class":210},[204,88108,88109],{"class":214}," oldObj[k]\n",[204,88111,88112],{"class":206,"line":8064},[204,88113,2615],{"class":214},[204,88115,88116],{"class":206,"line":8070},[204,88117,52484],{"class":214},[204,88119,88120],{"class":206,"line":8097},[204,88121,2273],{"class":214},[204,88123,88124,88127,88130],{"class":206,"line":8102},[204,88125,88126],{"class":2049},"    deepCopy",[204,88128,88129],{"class":214},"(o, obj) ",[204,88131,88132],{"class":273},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[204,88134,88135,88137,88139],{"class":206,"line":8108},[204,88136,73839],{"class":214},[204,88138,58333],{"class":2049},[204,88140,88141],{"class":214},"(o)\n",[204,88143,88144,88147,88149],{"class":206,"line":8120},[204,88145,88146],{"class":214},"    o.age ",[204,88148,260],{"class":210},[204,88150,88151],{"class":263}," 20\n",[204,88153,88154,88157,88159,88161,88163],{"class":206,"line":8132},[204,88155,88156],{"class":214},"    o.hobby[",[204,88158,405],{"class":263},[204,88160,4529],{"class":214},[204,88162,260],{"class":210},[204,88164,88165],{"class":319}," '篮球'\n",[204,88167,88168,88171,88173],{"class":206,"line":8144},[204,88169,88170],{"class":214},"    o.family ",[204,88172,260],{"class":210},[204,88174,88175],{"class":319}," '老pink'\n",[204,88177,88178,88180,88182],{"class":206,"line":9803},[204,88179,73839],{"class":214},[204,88181,58333],{"class":2049},[204,88183,70122],{"class":214},[204,88185,88186,88188,88190],{"class":206,"line":9828},[204,88187,52503],{"class":214},[204,88189,51899],{"class":51386},[204,88191,51393],{"class":214},[204,88193,88194,88196,88198],{"class":206,"line":9851},[204,88195,51871],{"class":214},[204,88197,51886],{"class":51386},[204,88199,51393],{"class":214},[204,88201,88202],{"class":206,"line":9875},[204,88203,2486],{"emptyLinePlaceholder":135},[204,88205,88206,88208,88210],{"class":206,"line":9880},[204,88207,51871],{"class":214},[204,88209,50721],{"class":51386},[204,88211,51393],{"class":214},[19,88213,88214],{},[23,88215],{"alt":125,"src":88216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22085,88218,88220,88221],{"id":88219},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[30,88222,88223],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88225,88226],{},[62,88227,88228],{"href":88228,"rel":88229},"https:\u002F\u002Fwww.lodashjs.com\u002F",[66],[19,88231,88232],{},"lodash里边的方法都要加上一个下划线_",[19,88234,88235],{},"_.cloneDeep()",[196,88237,88239],{"className":50719,"code":88238,"language":50721,"meta":125,"style":125},"\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",[81,88240,88241,88251,88265,88269,88277,88291,88311,88323,88331,88335,88343,88348,88367,88375,88385,88393,88401,88413,88417,88423,88427,88431,88447,88455,88464,88472,88480,88488,88492],{"__ignoreMap":125},[204,88242,88243,88245,88247,88249],{"class":206,"line":207},[204,88244,51383],{"class":214},[204,88246,51387],{"class":51386},[204,88248,51390],{"class":2049},[204,88250,51393],{"class":214},[204,88252,88253,88255,88257,88259,88261,88263],{"class":206,"line":126},[204,88254,1123],{"class":214},[204,88256,50721],{"class":51386},[204,88258,51402],{"class":2049},[204,88260,260],{"class":214},[204,88262,51407],{"class":319},[204,88264,51393],{"class":214},[204,88266,88267],{"class":206,"line":131},[204,88268,2486],{"emptyLinePlaceholder":135},[204,88270,88271,88273,88275],{"class":206,"line":1281},[204,88272,1123],{"class":214},[204,88274,51420],{"class":51386},[204,88276,51393],{"class":214},[204,88278,88279,88281,88283,88285,88287,88289],{"class":206,"line":1287},[204,88280,52230],{"class":214},[204,88282,51430],{"class":51386},[204,88284,51433],{"class":2049},[204,88286,260],{"class":214},[204,88288,51438],{"class":319},[204,88290,51393],{"class":214},[204,88292,88293,88295,88297,88299,88301,88303,88305,88307,88309],{"class":206,"line":1301},[204,88294,52230],{"class":214},[204,88296,51430],{"class":51386},[204,88298,15007],{"class":2049},[204,88300,260],{"class":214},[204,88302,51477],{"class":319},[204,88304,51457],{"class":2049},[204,88306,260],{"class":214},[204,88308,51484],{"class":319},[204,88310,51393],{"class":214},[204,88312,88313,88315,88317,88319,88321],{"class":206,"line":1307},[204,88314,52230],{"class":214},[204,88316,51493],{"class":51386},[204,88318,51496],{"class":214},[204,88320,51493],{"class":51386},[204,88322,51393],{"class":214},[204,88324,88325,88327,88329],{"class":206,"line":1398},[204,88326,51871],{"class":214},[204,88328,51420],{"class":51386},[204,88330,51393],{"class":214},[204,88332,88333],{"class":206,"line":1404},[204,88334,2486],{"emptyLinePlaceholder":135},[204,88336,88337,88339,88341],{"class":206,"line":1416},[204,88338,1123],{"class":214},[204,88340,51886],{"class":51386},[204,88342,51393],{"class":214},[204,88344,88345],{"class":206,"line":1698},[204,88346,88347],{"class":273},"  \u003C!-- 先引用这个库 -->\n",[204,88349,88350,88352,88354,88356,88358,88361,88363,88365],{"class":206,"line":1703},[204,88351,52230],{"class":214},[204,88353,51899],{"class":51386},[204,88355,55325],{"class":2049},[204,88357,260],{"class":214},[204,88359,88360],{"class":319},"\"lodash.min.js\"",[204,88362,55400],{"class":214},[204,88364,51899],{"class":51386},[204,88366,51393],{"class":214},[204,88368,88369,88371,88373],{"class":206,"line":1709},[204,88370,52230],{"class":214},[204,88372,51899],{"class":51386},[204,88374,51393],{"class":214},[204,88376,88377,88379,88381,88383],{"class":206,"line":1714},[204,88378,11308],{"class":210},[204,88380,70057],{"class":263},[204,88382,13651],{"class":210},[204,88384,15659],{"class":214},[204,88386,88387,88389,88391],{"class":206,"line":1728},[204,88388,71702],{"class":214},[204,88390,87896],{"class":319},[204,88392,31552],{"class":214},[204,88394,88395,88397,88399],{"class":206,"line":1733},[204,88396,71712],{"class":214},[204,88398,863],{"class":263},[204,88400,31552],{"class":214},[204,88402,88403,88405,88407,88409,88411],{"class":206,"line":1739},[204,88404,87911],{"class":214},[204,88406,87914],{"class":319},[204,88408,12522],{"class":214},[204,88410,87919],{"class":319},[204,88412,87922],{"class":214},[204,88414,88415],{"class":206,"line":1760},[204,88416,77958],{"class":214},[204,88418,88419,88421],{"class":206,"line":1765},[204,88420,87931],{"class":214},[204,88422,87934],{"class":319},[204,88424,88425],{"class":206,"line":1779},[204,88426,52484],{"class":214},[204,88428,88429],{"class":206,"line":1784},[204,88430,2273],{"class":214},[204,88432,88433,88435,88437,88439,88442,88445],{"class":206,"line":1813},[204,88434,11308],{"class":210},[204,88436,87949],{"class":263},[204,88438,13651],{"class":210},[204,88440,88441],{"class":214}," _.",[204,88443,88444],{"class":2049},"cloneDeep",[204,88446,70122],{"class":214},[204,88448,88449,88451,88453],{"class":206,"line":1818},[204,88450,73839],{"class":214},[204,88452,58333],{"class":2049},[204,88454,88141],{"class":214},[204,88456,88457,88460,88462],{"class":206,"line":1835},[204,88458,88459],{"class":214},"    o.family.baby ",[204,88461,260],{"class":210},[204,88463,88175],{"class":319},[204,88465,88466,88468,88470],{"class":206,"line":1840},[204,88467,73839],{"class":214},[204,88469,58333],{"class":2049},[204,88471,70122],{"class":214},[204,88473,88474,88476,88478],{"class":206,"line":1845},[204,88475,52503],{"class":214},[204,88477,51899],{"class":51386},[204,88479,51393],{"class":214},[204,88481,88482,88484,88486],{"class":206,"line":1850},[204,88483,51871],{"class":214},[204,88485,51886],{"class":51386},[204,88487,51393],{"class":214},[204,88489,88490],{"class":206,"line":1864},[204,88491,2486],{"emptyLinePlaceholder":135},[204,88493,88494,88496,88498],{"class":206,"line":1869},[204,88495,51871],{"class":214},[204,88497,50721],{"class":51386},[204,88499,51393],{"class":214},[19,88501,88502],{},[23,88503],{"alt":125,"src":88504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22085,88506,88508],{"id":88507},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[196,88510,88512],{"className":50719,"code":88511,"language":50721,"meta":125,"style":125},"\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",[81,88513,88514,88524,88538,88542,88550,88564,88584,88596,88604,88608,88616,88624,88634,88642,88650,88662,88666,88672,88676,88680,88685,88690,88695,88721,88729,88738,88746,88754,88762,88766],{"__ignoreMap":125},[204,88515,88516,88518,88520,88522],{"class":206,"line":207},[204,88517,51383],{"class":214},[204,88519,51387],{"class":51386},[204,88521,51390],{"class":2049},[204,88523,51393],{"class":214},[204,88525,88526,88528,88530,88532,88534,88536],{"class":206,"line":126},[204,88527,1123],{"class":214},[204,88529,50721],{"class":51386},[204,88531,51402],{"class":2049},[204,88533,260],{"class":214},[204,88535,51407],{"class":319},[204,88537,51393],{"class":214},[204,88539,88540],{"class":206,"line":131},[204,88541,2486],{"emptyLinePlaceholder":135},[204,88543,88544,88546,88548],{"class":206,"line":1281},[204,88545,1123],{"class":214},[204,88547,51420],{"class":51386},[204,88549,51393],{"class":214},[204,88551,88552,88554,88556,88558,88560,88562],{"class":206,"line":1287},[204,88553,52230],{"class":214},[204,88555,51430],{"class":51386},[204,88557,51433],{"class":2049},[204,88559,260],{"class":214},[204,88561,51438],{"class":319},[204,88563,51393],{"class":214},[204,88565,88566,88568,88570,88572,88574,88576,88578,88580,88582],{"class":206,"line":1301},[204,88567,52230],{"class":214},[204,88569,51430],{"class":51386},[204,88571,15007],{"class":2049},[204,88573,260],{"class":214},[204,88575,51477],{"class":319},[204,88577,51457],{"class":2049},[204,88579,260],{"class":214},[204,88581,51484],{"class":319},[204,88583,51393],{"class":214},[204,88585,88586,88588,88590,88592,88594],{"class":206,"line":1307},[204,88587,52230],{"class":214},[204,88589,51493],{"class":51386},[204,88591,51496],{"class":214},[204,88593,51493],{"class":51386},[204,88595,51393],{"class":214},[204,88597,88598,88600,88602],{"class":206,"line":1398},[204,88599,51871],{"class":214},[204,88601,51420],{"class":51386},[204,88603,51393],{"class":214},[204,88605,88606],{"class":206,"line":1404},[204,88607,2486],{"emptyLinePlaceholder":135},[204,88609,88610,88612,88614],{"class":206,"line":1416},[204,88611,1123],{"class":214},[204,88613,51886],{"class":51386},[204,88615,51393],{"class":214},[204,88617,88618,88620,88622],{"class":206,"line":1698},[204,88619,52230],{"class":214},[204,88621,51899],{"class":51386},[204,88623,51393],{"class":214},[204,88625,88626,88628,88630,88632],{"class":206,"line":1703},[204,88627,11308],{"class":210},[204,88629,70057],{"class":263},[204,88631,13651],{"class":210},[204,88633,15659],{"class":214},[204,88635,88636,88638,88640],{"class":206,"line":1709},[204,88637,71702],{"class":214},[204,88639,87896],{"class":319},[204,88641,31552],{"class":214},[204,88643,88644,88646,88648],{"class":206,"line":1714},[204,88645,71712],{"class":214},[204,88647,863],{"class":263},[204,88649,31552],{"class":214},[204,88651,88652,88654,88656,88658,88660],{"class":206,"line":1728},[204,88653,87911],{"class":214},[204,88655,87914],{"class":319},[204,88657,12522],{"class":214},[204,88659,87919],{"class":319},[204,88661,87922],{"class":214},[204,88663,88664],{"class":206,"line":1733},[204,88665,77958],{"class":214},[204,88667,88668,88670],{"class":206,"line":1739},[204,88669,87931],{"class":214},[204,88671,87934],{"class":319},[204,88673,88674],{"class":206,"line":1760},[204,88675,52484],{"class":214},[204,88677,88678],{"class":206,"line":1765},[204,88679,2273],{"class":214},[204,88681,88682],{"class":206,"line":1779},[204,88683,88684],{"class":273},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[204,88686,88687],{"class":206,"line":1784},[204,88688,88689],{"class":273},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[204,88691,88692],{"class":206,"line":1813},[204,88693,88694],{"class":273},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[204,88696,88697,88699,88701,88703,88706,88708,88711,88713,88715,88717,88719],{"class":206,"line":1818},[204,88698,11308],{"class":210},[204,88700,87949],{"class":263},[204,88702,13651],{"class":210},[204,88704,88705],{"class":263}," JSON",[204,88707,771],{"class":214},[204,88709,88710],{"class":2049},"parse",[204,88712,215],{"class":214},[204,88714,71750],{"class":263},[204,88716,771],{"class":214},[204,88718,71755],{"class":2049},[204,88720,71758],{"class":214},[204,88722,88723,88725,88727],{"class":206,"line":1835},[204,88724,73839],{"class":214},[204,88726,58333],{"class":2049},[204,88728,88141],{"class":214},[204,88730,88731,88733,88735],{"class":206,"line":1840},[204,88732,88459],{"class":214},[204,88734,260],{"class":210},[204,88736,88737],{"class":319}," '123'\n",[204,88739,88740,88742,88744],{"class":206,"line":1845},[204,88741,73839],{"class":214},[204,88743,58333],{"class":2049},[204,88745,70122],{"class":214},[204,88747,88748,88750,88752],{"class":206,"line":1850},[204,88749,52503],{"class":214},[204,88751,51899],{"class":51386},[204,88753,51393],{"class":214},[204,88755,88756,88758,88760],{"class":206,"line":1864},[204,88757,51871],{"class":214},[204,88759,51886],{"class":51386},[204,88761,51393],{"class":214},[204,88763,88764],{"class":206,"line":1869},[204,88765,2486],{"emptyLinePlaceholder":135},[204,88767,88768,88770,88772],{"class":206,"line":2663},[204,88769,51871],{"class":214},[204,88771,50721],{"class":51386},[204,88773,51393],{"class":214},[19,88775,88776],{},[23,88777],{"alt":125,"src":88778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88780,88782],{"id":88781},"_415-异常处理","4.15 异常处理",[161,88784,88785],{},[71,88786,88787],{},"throw抛异常",[19,88789,88790],{},[23,88791],{"alt":125,"src":88792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[161,88794,88795],{"start":126},[71,88796,88797],{},"try\u002Fcatch 捕获错误信息",[19,88799,88800],{},[23,88801],{"alt":125,"src":88802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[196,88804,88806],{"className":50719,"code":88805,"language":50721,"meta":125,"style":125},"\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",[81,88807,88808,88818,88832,88836,88844,88858,88878,88890,88898,88902,88910,88922,88930,88939,88946,88951,88970,88979,88990,88995,89005,89010,89015,89020,89037,89041,89046,89053,89065,89069,89081,89085,89089,89094,89099,89106,89114,89122,89126],{"__ignoreMap":125},[204,88809,88810,88812,88814,88816],{"class":206,"line":207},[204,88811,51383],{"class":214},[204,88813,51387],{"class":51386},[204,88815,51390],{"class":2049},[204,88817,51393],{"class":214},[204,88819,88820,88822,88824,88826,88828,88830],{"class":206,"line":126},[204,88821,1123],{"class":214},[204,88823,50721],{"class":51386},[204,88825,51402],{"class":2049},[204,88827,260],{"class":214},[204,88829,51407],{"class":319},[204,88831,51393],{"class":214},[204,88833,88834],{"class":206,"line":131},[204,88835,2486],{"emptyLinePlaceholder":135},[204,88837,88838,88840,88842],{"class":206,"line":1281},[204,88839,1123],{"class":214},[204,88841,51420],{"class":51386},[204,88843,51393],{"class":214},[204,88845,88846,88848,88850,88852,88854,88856],{"class":206,"line":1287},[204,88847,52230],{"class":214},[204,88849,51430],{"class":51386},[204,88851,51433],{"class":2049},[204,88853,260],{"class":214},[204,88855,51438],{"class":319},[204,88857,51393],{"class":214},[204,88859,88860,88862,88864,88866,88868,88870,88872,88874,88876],{"class":206,"line":1301},[204,88861,52230],{"class":214},[204,88863,51430],{"class":51386},[204,88865,15007],{"class":2049},[204,88867,260],{"class":214},[204,88869,51477],{"class":319},[204,88871,51457],{"class":2049},[204,88873,260],{"class":214},[204,88875,51484],{"class":319},[204,88877,51393],{"class":214},[204,88879,88880,88882,88884,88886,88888],{"class":206,"line":1307},[204,88881,52230],{"class":214},[204,88883,51493],{"class":51386},[204,88885,51496],{"class":214},[204,88887,51493],{"class":51386},[204,88889,51393],{"class":214},[204,88891,88892,88894,88896],{"class":206,"line":1398},[204,88893,51871],{"class":214},[204,88895,51420],{"class":51386},[204,88897,51393],{"class":214},[204,88899,88900],{"class":206,"line":1404},[204,88901,2486],{"emptyLinePlaceholder":135},[204,88903,88904,88906,88908],{"class":206,"line":1416},[204,88905,1123],{"class":214},[204,88907,51886],{"class":51386},[204,88909,51393],{"class":214},[204,88911,88912,88914,88916,88918,88920],{"class":206,"line":1698},[204,88913,52230],{"class":214},[204,88915,19],{"class":51386},[204,88917,53580],{"class":214},[204,88919,19],{"class":51386},[204,88921,51393],{"class":214},[204,88923,88924,88926,88928],{"class":206,"line":1703},[204,88925,52230],{"class":214},[204,88927,51899],{"class":51386},[204,88929,51393],{"class":214},[204,88931,88932,88934,88937],{"class":206,"line":1709},[204,88933,70170],{"class":210},[204,88935,88936],{"class":2049}," fn",[204,88938,10940],{"class":214},[204,88940,88941,88944],{"class":206,"line":1714},[204,88942,88943],{"class":210},"      try",[204,88945,15659],{"class":214},[204,88947,88948],{"class":206,"line":1728},[204,88949,88950],{"class":273},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[204,88952,88953,88955,88957,88959,88961,88963,88965,88968],{"class":206,"line":1733},[204,88954,61356],{"class":210},[204,88956,6912],{"class":263},[204,88958,13651],{"class":210},[204,88960,54482],{"class":214},[204,88962,54485],{"class":2049},[204,88964,215],{"class":214},[204,88966,88967],{"class":319},"'.p'",[204,88969,221],{"class":214},[204,88971,88972,88975,88977],{"class":206,"line":1739},[204,88973,88974],{"class":214},"        p.style.color ",[204,88976,260],{"class":210},[204,88978,67137],{"class":319},[204,88980,88981,88984,88987],{"class":206,"line":1760},[204,88982,88983],{"class":214},"      } ",[204,88985,88986],{"class":210},"catch",[204,88988,88989],{"class":214}," (err) {\n",[204,88991,88992],{"class":206,"line":1765},[204,88993,88994],{"class":273},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[204,88996,88997,89000,89002],{"class":206,"line":1779},[204,88998,88999],{"class":214},"        console.",[204,89001,58333],{"class":2049},[204,89003,89004],{"class":214},"(err.message)\n",[204,89006,89007],{"class":206,"line":1784},[204,89008,89009],{"class":273},"        \u002F\u002F 想要中断程序，需要加return\n",[204,89011,89012],{"class":206,"line":1813},[204,89013,89014],{"class":273},"        \u002F\u002F return\n",[204,89016,89017],{"class":206,"line":1818},[204,89018,89019],{"class":273},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[204,89021,89022,89025,89027,89030,89032,89035],{"class":206,"line":1835},[204,89023,89024],{"class":210},"        throw",[204,89026,11665],{"class":210},[204,89028,89029],{"class":2049}," Error",[204,89031,215],{"class":214},[204,89033,89034],{"class":319},"'你看看，选择器错误了吧'",[204,89036,221],{"class":214},[204,89038,89039],{"class":206,"line":1840},[204,89040,52484],{"class":214},[204,89042,89043],{"class":206,"line":1845},[204,89044,89045],{"class":273},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[204,89047,89048,89051],{"class":206,"line":1850},[204,89049,89050],{"class":210},"      finally",[204,89052,15659],{"class":214},[204,89054,89055,89058,89060,89063],{"class":206,"line":1864},[204,89056,89057],{"class":2049},"        alert",[204,89059,215],{"class":214},[204,89061,89062],{"class":319},"'弹出对话框'",[204,89064,221],{"class":214},[204,89066,89067],{"class":206,"line":1869},[204,89068,52484],{"class":214},[204,89070,89071,89073,89075,89077,89079],{"class":206,"line":2663},[204,89072,58330],{"class":214},[204,89074,58333],{"class":2049},[204,89076,215],{"class":214},[204,89078,685],{"class":263},[204,89080,221],{"class":214},[204,89082,89083],{"class":206,"line":2677},[204,89084,2486],{"emptyLinePlaceholder":135},[204,89086,89087],{"class":206,"line":2685},[204,89088,2273],{"class":214},[204,89090,89091],{"class":206,"line":2690},[204,89092,89093],{"class":273},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[204,89095,89096],{"class":206,"line":2696},[204,89097,89098],{"class":273},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[204,89100,89101,89104],{"class":206,"line":2702},[204,89102,89103],{"class":2049},"    fn",[204,89105,2062],{"class":214},[204,89107,89108,89110,89112],{"class":206,"line":2707},[204,89109,52503],{"class":214},[204,89111,51899],{"class":51386},[204,89113,51393],{"class":214},[204,89115,89116,89118,89120],{"class":206,"line":8035},[204,89117,51871],{"class":214},[204,89119,51886],{"class":51386},[204,89121,51393],{"class":214},[204,89123,89124],{"class":206,"line":8059},[204,89125,2486],{"emptyLinePlaceholder":135},[204,89127,89128,89130,89132],{"class":206,"line":8064},[204,89129,51871],{"class":214},[204,89131,50721],{"class":51386},[204,89133,51393],{"class":214},[19,89135,89136],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[161,89138,89139],{"start":131},[71,89140,89141],{},"debugger",[19,89143,89144],{},[23,89145],{"alt":125,"src":89146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89148,89149],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89151,89153],{"id":89152},"_416-处理this","4.16 处理this",[49,89155,89157],{"id":89156},"_4161-this的指向","4.16.1 this的指向",[161,89159,89160],{},[71,89161,89162],{},"普通函数的this",[19,89164,89165],{},[23,89166],{"alt":125,"src":89167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[161,89169,89170],{"start":126},[71,89171,89172],{},"箭头函数的this",[19,89174,89175],{},[23,89176],{"alt":125,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89179,89180],{},[23,89181],{"alt":125,"src":89182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89184,89185],{},[23,89186],{"alt":125,"src":89187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[49,89189,89191],{"id":89190},"_4162-this的改变","4.16.2 this的改变",[19,89193,89194],{},"call() apply() bind()",[161,89196,89197],{},[71,89198,89199],{},"call()",[19,89201,89202],{},[23,89203],{"alt":125,"src":89204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89206,89207],{},"两个作用：①调用函数；②改变this指向",[196,89209,89211],{"className":53153,"code":89210,"language":53155,"meta":125,"style":125},"\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",[81,89212,89213,89221,89229,89233,89238,89242,89247,89252,89257,89261,89266,89274],{"__ignoreMap":125},[204,89214,89215,89217,89219],{"class":206,"line":207},[204,89216,1123],{"class":214},[204,89218,51886],{"class":51386},[204,89220,51393],{"class":214},[204,89222,89223,89225,89227],{"class":206,"line":126},[204,89224,52230],{"class":214},[204,89226,51899],{"class":51386},[204,89228,51393],{"class":214},[204,89230,89231],{"class":206,"line":131},[204,89232,71609],{"class":214},[204,89234,89235],{"class":206,"line":1281},[204,89236,89237],{"class":214},"      uname: 'pink'\n",[204,89239,89240],{"class":206,"line":1287},[204,89241,2273],{"class":214},[204,89243,89244],{"class":206,"line":1301},[204,89245,89246],{"class":214},"    function fn(x, y) {\n",[204,89248,89249],{"class":206,"line":1307},[204,89250,89251],{"class":214},"      console.log(this)  \u002F\u002Fwindow\n",[204,89253,89254],{"class":206,"line":1398},[204,89255,89256],{"class":214},"      console.log(x + y)\n",[204,89258,89259],{"class":206,"line":1404},[204,89260,2273],{"class":214},[204,89262,89263],{"class":206,"line":1416},[204,89264,89265],{"class":214},"    fn.call(obj, 1, 2)\n",[204,89267,89268,89270,89272],{"class":206,"line":1698},[204,89269,52503],{"class":214},[204,89271,51899],{"class":51386},[204,89273,51393],{"class":214},[204,89275,89276,89278,89280],{"class":206,"line":1703},[204,89277,51871],{"class":214},[204,89279,51886],{"class":51386},[204,89281,51393],{"class":214},[19,89283,89284],{},[23,89285],{"alt":125,"src":89286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[161,89288,89289],{"start":126},[71,89290,89291],{},"apply()",[19,89293,89294],{},[23,89295],{"alt":125,"src":89296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89298,89207],{},[19,89300,89301],{},"call传递的是普通参数，而apply必须传递的是数组",[196,89303,89305],{"className":50719,"code":89304,"language":50721,"meta":125,"style":125},"\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",[81,89306,89307,89317,89331,89335,89343,89357,89377,89389,89397,89401,89409,89417,89427,89434,89438,89443,89459,89471,89485,89489,89494,89513,89518,89522,89527,89532,89540,89545,89567,89572,89588,89604,89616,89620,89625,89644,89652,89660,89664],{"__ignoreMap":125},[204,89308,89309,89311,89313,89315],{"class":206,"line":207},[204,89310,51383],{"class":214},[204,89312,51387],{"class":51386},[204,89314,51390],{"class":2049},[204,89316,51393],{"class":214},[204,89318,89319,89321,89323,89325,89327,89329],{"class":206,"line":126},[204,89320,1123],{"class":214},[204,89322,50721],{"class":51386},[204,89324,51402],{"class":2049},[204,89326,260],{"class":214},[204,89328,51407],{"class":319},[204,89330,51393],{"class":214},[204,89332,89333],{"class":206,"line":131},[204,89334,2486],{"emptyLinePlaceholder":135},[204,89336,89337,89339,89341],{"class":206,"line":1281},[204,89338,1123],{"class":214},[204,89340,51420],{"class":51386},[204,89342,51393],{"class":214},[204,89344,89345,89347,89349,89351,89353,89355],{"class":206,"line":1287},[204,89346,52230],{"class":214},[204,89348,51430],{"class":51386},[204,89350,51433],{"class":2049},[204,89352,260],{"class":214},[204,89354,51438],{"class":319},[204,89356,51393],{"class":214},[204,89358,89359,89361,89363,89365,89367,89369,89371,89373,89375],{"class":206,"line":1301},[204,89360,52230],{"class":214},[204,89362,51430],{"class":51386},[204,89364,15007],{"class":2049},[204,89366,260],{"class":214},[204,89368,51477],{"class":319},[204,89370,51457],{"class":2049},[204,89372,260],{"class":214},[204,89374,51484],{"class":319},[204,89376,51393],{"class":214},[204,89378,89379,89381,89383,89385,89387],{"class":206,"line":1307},[204,89380,52230],{"class":214},[204,89382,51493],{"class":51386},[204,89384,51496],{"class":214},[204,89386,51493],{"class":51386},[204,89388,51393],{"class":214},[204,89390,89391,89393,89395],{"class":206,"line":1398},[204,89392,51871],{"class":214},[204,89394,51420],{"class":51386},[204,89396,51393],{"class":214},[204,89398,89399],{"class":206,"line":1404},[204,89400,2486],{"emptyLinePlaceholder":135},[204,89402,89403,89405,89407],{"class":206,"line":1416},[204,89404,1123],{"class":214},[204,89406,51886],{"class":51386},[204,89408,51393],{"class":214},[204,89410,89411,89413,89415],{"class":206,"line":1698},[204,89412,52230],{"class":214},[204,89414,51899],{"class":51386},[204,89416,51393],{"class":214},[204,89418,89419,89421,89423,89425],{"class":206,"line":1703},[204,89420,11308],{"class":210},[204,89422,70057],{"class":263},[204,89424,13651],{"class":210},[204,89426,15659],{"class":214},[204,89428,89429,89431],{"class":206,"line":1709},[204,89430,71712],{"class":214},[204,89432,89433],{"class":263},"18\n",[204,89435,89436],{"class":206,"line":1714},[204,89437,2273],{"class":214},[204,89439,89440],{"class":206,"line":1728},[204,89441,89442],{"class":273},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[204,89444,89445,89447,89449,89451,89453,89455,89457],{"class":206,"line":1733},[204,89446,70170],{"class":210},[204,89448,88936],{"class":2049},[204,89450,215],{"class":214},[204,89452,1033],{"class":5303},[204,89454,12522],{"class":214},[204,89456,1058],{"class":5303},[204,89458,12529],{"class":214},[204,89460,89461,89463,89465,89467,89469],{"class":206,"line":1739},[204,89462,58330],{"class":214},[204,89464,58333],{"class":2049},[204,89466,215],{"class":214},[204,89468,87079],{"class":263},[204,89470,221],{"class":214},[204,89472,89473,89475,89477,89480,89482],{"class":206,"line":1760},[204,89474,58330],{"class":214},[204,89476,58333],{"class":2049},[204,89478,89479],{"class":214},"(x ",[204,89481,694],{"class":210},[204,89483,89484],{"class":214}," y)\n",[204,89486,89487],{"class":206,"line":1765},[204,89488,2273],{"class":214},[204,89490,89491],{"class":206,"line":1779},[204,89492,89493],{"class":273},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[204,89495,89496,89499,89502,89505,89507,89509,89511],{"class":206,"line":1784},[204,89497,89498],{"class":214},"    fn.",[204,89500,89501],{"class":2049},"apply",[204,89503,89504],{"class":214},"(obj, [",[204,89506,431],{"class":263},[204,89508,12522],{"class":214},[204,89510,292],{"class":263},[204,89512,4743],{"class":214},[204,89514,89515],{"class":206,"line":1813},[204,89516,89517],{"class":273},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[204,89519,89520],{"class":206,"line":1818},[204,89521,2486],{"emptyLinePlaceholder":135},[204,89523,89524],{"class":206,"line":1835},[204,89525,89526],{"class":273},"    \u002F\u002F 使用场景：求数组最大值\n",[204,89528,89529],{"class":206,"line":1840},[204,89530,89531],{"class":273},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[204,89533,89534,89537],{"class":206,"line":1845},[204,89535,89536],{"class":273},"    \u002F\u002F console.log(max)",[204,89538,89539],{"class":273},"   \u002F\u002F3\n",[204,89541,89542],{"class":206,"line":1850},[204,89543,89544],{"class":273},"    \u002F\u002F 指向空或者Math都是可以的\n",[204,89546,89547,89549,89551,89553,89555,89557,89559,89561,89563,89565],{"class":206,"line":1864},[204,89548,11308],{"class":210},[204,89550,57781],{"class":263},[204,89552,13651],{"class":210},[204,89554,52312],{"class":214},[204,89556,524],{"class":263},[204,89558,12522],{"class":214},[204,89560,717],{"class":263},[204,89562,12522],{"class":214},[204,89564,748],{"class":263},[204,89566,33332],{"class":214},[204,89568,89569],{"class":206,"line":1869},[204,89570,89571],{"class":273},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[204,89573,89574,89576,89578,89580,89583,89585],{"class":206,"line":2663},[204,89575,11308],{"class":210},[204,89577,6038],{"class":263},[204,89579,13651],{"class":210},[204,89581,89582],{"class":214}," Math.max.",[204,89584,89501],{"class":2049},[204,89586,89587],{"class":214},"(Math, arr)\n",[204,89589,89590,89592,89595,89597,89600,89602],{"class":206,"line":2677},[204,89591,11308],{"class":210},[204,89593,89594],{"class":263}," min",[204,89596,13651],{"class":210},[204,89598,89599],{"class":214}," Math.min.",[204,89601,89501],{"class":2049},[204,89603,89587],{"class":214},[204,89605,89606,89608,89610,89613],{"class":206,"line":2685},[204,89607,73839],{"class":214},[204,89609,58333],{"class":2049},[204,89611,89612],{"class":214},"(max, min)     ",[204,89614,89615],{"class":273},"\u002F\u002F100,4\n",[204,89617,89618],{"class":206,"line":2690},[204,89619,2486],{"emptyLinePlaceholder":135},[204,89621,89622],{"class":206,"line":2696},[204,89623,89624],{"class":273},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[204,89626,89627,89629,89631,89634,89636,89638,89641],{"class":206,"line":2702},[204,89628,73839],{"class":214},[204,89630,58333],{"class":2049},[204,89632,89633],{"class":214},"(Max.",[204,89635,6102],{"class":2049},[204,89637,215],{"class":214},[204,89639,89640],{"class":210},"...",[204,89642,89643],{"class":214},"arr))\n",[204,89645,89646,89648,89650],{"class":206,"line":2707},[204,89647,52503],{"class":214},[204,89649,51899],{"class":51386},[204,89651,51393],{"class":214},[204,89653,89654,89656,89658],{"class":206,"line":8035},[204,89655,51871],{"class":214},[204,89657,51886],{"class":51386},[204,89659,51393],{"class":214},[204,89661,89662],{"class":206,"line":8059},[204,89663,2486],{"emptyLinePlaceholder":135},[204,89665,89666,89668,89670],{"class":206,"line":8064},[204,89667,51871],{"class":214},[204,89669,50721],{"class":51386},[204,89671,51393],{"class":214},[19,89673,89674],{},[23,89675],{"alt":125,"src":89676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[161,89678,89679],{"start":131},[71,89680,89681],{},"bind()",[19,89683,89684],{},[23,89685],{"alt":125,"src":89686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89688,89689],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89691,89692],{},"bind的语法跟call很相似",[196,89694,89696],{"className":53153,"code":89695,"language":53155,"meta":125,"style":125},"\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",[81,89697,89698,89706,89714,89718,89723,89727,89731,89736,89740,89745,89750,89755,89760,89765,89770,89775,89779,89787],{"__ignoreMap":125},[204,89699,89700,89702,89704],{"class":206,"line":207},[204,89701,1123],{"class":214},[204,89703,51886],{"class":51386},[204,89705,51393],{"class":214},[204,89707,89708,89710,89712],{"class":206,"line":126},[204,89709,52230],{"class":214},[204,89711,51899],{"class":51386},[204,89713,51393],{"class":214},[204,89715,89716],{"class":206,"line":131},[204,89717,71609],{"class":214},[204,89719,89720],{"class":206,"line":1281},[204,89721,89722],{"class":214},"      age: 18\n",[204,89724,89725],{"class":206,"line":1287},[204,89726,2273],{"class":214},[204,89728,89729],{"class":206,"line":1301},[204,89730,77229],{"class":214},[204,89732,89733],{"class":206,"line":1307},[204,89734,89735],{"class":214},"      console.log(this)\n",[204,89737,89738],{"class":206,"line":1398},[204,89739,2273],{"class":214},[204,89741,89742],{"class":206,"line":1404},[204,89743,89744],{"class":214},"    \u002F\u002F 1.bind 不会调用函数\n",[204,89746,89747],{"class":206,"line":1416},[204,89748,89749],{"class":214},"    \u002F\u002F 2.bind能改变this的指向\n",[204,89751,89752],{"class":206,"line":1698},[204,89753,89754],{"class":214},"    fn.bind()\n",[204,89756,89757],{"class":206,"line":1703},[204,89758,89759],{"class":214},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[204,89761,89762],{"class":206,"line":1709},[204,89763,89764],{"class":214},"    const fun = fn.bind(obj)\n",[204,89766,89767],{"class":206,"line":1714},[204,89768,89769],{"class":214},"    \u002F\u002F console.log(fun)\n",[204,89771,89772],{"class":206,"line":1728},[204,89773,89774],{"class":214},"    \u002F\u002F 调用,查看this的指向\n",[204,89776,89777],{"class":206,"line":1733},[204,89778,52737],{"class":214},[204,89780,89781,89783,89785],{"class":206,"line":1739},[204,89782,52503],{"class":214},[204,89784,51899],{"class":51386},[204,89786,51393],{"class":214},[204,89788,89789,89791,89793],{"class":206,"line":1760},[204,89790,51871],{"class":214},[204,89792,51886],{"class":51386},[204,89794,51393],{"class":214},[19,89796,89797],{},[23,89798],{"alt":125,"src":89799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[161,89801,89802],{"start":1281},[71,89803,89804],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[196,89806,89808],{"className":53153,"code":89807,"language":53155,"meta":125,"style":125},"\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",[81,89809,89810,89818,89831,89839,89844,89848,89853,89858,89863,89868,89873,89878,89883,89888,89892,89900],{"__ignoreMap":125},[204,89811,89812,89814,89816],{"class":206,"line":207},[204,89813,1123],{"class":214},[204,89815,51886],{"class":51386},[204,89817,51393],{"class":214},[204,89819,89820,89822,89824,89827,89829],{"class":206,"line":126},[204,89821,52230],{"class":214},[204,89823,53973],{"class":51386},[204,89825,89826],{"class":214},">禁用\u003C\u002F",[204,89828,53973],{"class":51386},[204,89830,51393],{"class":214},[204,89832,89833,89835,89837],{"class":206,"line":131},[204,89834,52230],{"class":214},[204,89836,51899],{"class":51386},[204,89838,51393],{"class":214},[204,89840,89841],{"class":206,"line":1281},[204,89842,89843],{"class":214},"    const btn = document.querySelector('button')\n",[204,89845,89846],{"class":206,"line":1287},[204,89847,59102],{"class":214},[204,89849,89850],{"class":206,"line":1301},[204,89851,89852],{"class":214},"      this.disabled = true\n",[204,89854,89855],{"class":206,"line":1307},[204,89856,89857],{"class":214},"      \u002F\u002F 定时器是window进行调用的\n",[204,89859,89860],{"class":206,"line":1398},[204,89861,89862],{"class":214},"      setTimeout(function () {\n",[204,89864,89865],{"class":206,"line":1404},[204,89866,89867],{"class":214},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[204,89869,89870],{"class":206,"line":1416},[204,89871,89872],{"class":214},"        this.disabled = false\n",[204,89874,89875],{"class":206,"line":1698},[204,89876,89877],{"class":214},"      }.bind(this), 2000)\n",[204,89879,89880],{"class":206,"line":1703},[204,89881,89882],{"class":214},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[204,89884,89885],{"class":206,"line":1709},[204,89886,89887],{"class":214},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[204,89889,89890],{"class":206,"line":1714},[204,89891,33547],{"class":214},[204,89893,89894,89896,89898],{"class":206,"line":1728},[204,89895,52503],{"class":214},[204,89897,51899],{"class":51386},[204,89899,51393],{"class":214},[204,89901,89902,89904,89906],{"class":206,"line":1733},[204,89903,51871],{"class":214},[204,89905,51886],{"class":51386},[204,89907,51393],{"class":214},[161,89909,89910],{"start":1287},[71,89911,22040],{},[19,89913,89914],{},[23,89915],{"alt":125,"src":89916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89918,89920],{"id":89919},"_417-性能优化","4.17 性能优化",[49,89922,89924],{"id":89923},"_4171-防抖","4.17.1 防抖",[19,89926,89927],{},[23,89928],{"alt":125,"src":89929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89931,89932],{},[30,89933,89934],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89936,89937],{},"防抖实现方式：",[68,89939,89940],{},[71,89941,89942],{},"lodash 提供了防抖处理",[19,89944,89945],{},"_.debounce(func,[wait=0],[options={}])",[19,89947,89948],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[196,89950,89952],{"className":50719,"code":89951,"language":50721,"meta":125,"style":125},"\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",[81,89953,89954,89964,89978,89982,89990,90004,90024,90036,90044,90050,90060,90072,90084,90095,90107,90117,90127,90140,90144,90152,90160,90164,90172,90190,90208,90216,90235,90245,90254,90265,90270,90274,90279,90284,90289,90314,90322,90330,90334],{"__ignoreMap":125},[204,89955,89956,89958,89960,89962],{"class":206,"line":207},[204,89957,51383],{"class":214},[204,89959,51387],{"class":51386},[204,89961,51390],{"class":2049},[204,89963,51393],{"class":214},[204,89965,89966,89968,89970,89972,89974,89976],{"class":206,"line":126},[204,89967,1123],{"class":214},[204,89969,50721],{"class":51386},[204,89971,51402],{"class":2049},[204,89973,260],{"class":214},[204,89975,51407],{"class":319},[204,89977,51393],{"class":214},[204,89979,89980],{"class":206,"line":131},[204,89981,2486],{"emptyLinePlaceholder":135},[204,89983,89984,89986,89988],{"class":206,"line":1281},[204,89985,1123],{"class":214},[204,89987,51420],{"class":51386},[204,89989,51393],{"class":214},[204,89991,89992,89994,89996,89998,90000,90002],{"class":206,"line":1287},[204,89993,52230],{"class":214},[204,89995,51430],{"class":51386},[204,89997,51433],{"class":2049},[204,89999,260],{"class":214},[204,90001,51438],{"class":319},[204,90003,51393],{"class":214},[204,90005,90006,90008,90010,90012,90014,90016,90018,90020,90022],{"class":206,"line":1301},[204,90007,52230],{"class":214},[204,90009,51430],{"class":51386},[204,90011,15007],{"class":2049},[204,90013,260],{"class":214},[204,90015,51477],{"class":319},[204,90017,51457],{"class":2049},[204,90019,260],{"class":214},[204,90021,51484],{"class":319},[204,90023,51393],{"class":214},[204,90025,90026,90028,90030,90032,90034],{"class":206,"line":1307},[204,90027,52230],{"class":214},[204,90029,51493],{"class":51386},[204,90031,51496],{"class":214},[204,90033,51493],{"class":51386},[204,90035,51393],{"class":214},[204,90037,90038,90040,90042],{"class":206,"line":1398},[204,90039,52230],{"class":214},[204,90041,5213],{"class":51386},[204,90043,51393],{"class":214},[204,90045,90046,90048],{"class":206,"line":1404},[204,90047,54838],{"class":2049},[204,90049,15659],{"class":214},[204,90051,90052,90054,90056,90058],{"class":206,"line":1416},[204,90053,72682],{"class":263},[204,90055,51523],{"class":214},[204,90057,60591],{"class":263},[204,90059,1377],{"class":214},[204,90061,90062,90064,90066,90068,90070],{"class":206,"line":1698},[204,90063,54857],{"class":263},[204,90065,51523],{"class":214},[204,90067,1808],{"class":263},[204,90069,51578],{"class":210},[204,90071,1377],{"class":214},[204,90073,90074,90076,90078,90080,90082],{"class":206,"line":1703},[204,90075,54871],{"class":263},[204,90077,51523],{"class":214},[204,90079,1808],{"class":263},[204,90081,51578],{"class":210},[204,90083,1377],{"class":214},[204,90085,90086,90088,90090,90093],{"class":206,"line":1709},[204,90087,54970],{"class":263},[204,90089,51523],{"class":214},[204,90091,90092],{"class":263},"gray",[204,90094,1377],{"class":214},[204,90096,90097,90099,90101,90103,90105],{"class":206,"line":1714},[204,90098,55008],{"class":263},[204,90100,51523],{"class":214},[204,90102,1038],{"class":263},[204,90104,51578],{"class":210},[204,90106,1377],{"class":214},[204,90108,90109,90111,90113,90115],{"class":206,"line":1728},[204,90110,57502],{"class":263},[204,90112,51523],{"class":214},[204,90114,60928],{"class":263},[204,90116,1377],{"class":214},[204,90118,90119,90121,90123,90125],{"class":206,"line":1733},[204,90120,57372],{"class":263},[204,90122,51523],{"class":214},[204,90124,51678],{"class":263},[204,90126,1377],{"class":214},[204,90128,90129,90132,90134,90136,90138],{"class":206,"line":1739},[204,90130,90131],{"class":263},"      padding-top",[204,90133,51523],{"class":214},[204,90135,532],{"class":263},[204,90137,51578],{"class":210},[204,90139,1377],{"class":214},[204,90141,90142],{"class":206,"line":1760},[204,90143,2273],{"class":214},[204,90145,90146,90148,90150],{"class":206,"line":1765},[204,90147,52503],{"class":214},[204,90149,5213],{"class":51386},[204,90151,51393],{"class":214},[204,90153,90154,90156,90158],{"class":206,"line":1779},[204,90155,51871],{"class":214},[204,90157,51420],{"class":51386},[204,90159,51393],{"class":214},[204,90161,90162],{"class":206,"line":1784},[204,90163,2486],{"emptyLinePlaceholder":135},[204,90165,90166,90168,90170],{"class":206,"line":1813},[204,90167,1123],{"class":214},[204,90169,51886],{"class":51386},[204,90171,51393],{"class":214},[204,90173,90174,90176,90178,90180,90182,90184,90186,90188],{"class":206,"line":1818},[204,90175,52230],{"class":214},[204,90177,51697],{"class":51386},[204,90179,53572],{"class":2049},[204,90181,260],{"class":214},[204,90183,53577],{"class":319},[204,90185,55400],{"class":214},[204,90187,51697],{"class":51386},[204,90189,51393],{"class":214},[204,90191,90192,90194,90196,90198,90200,90202,90204,90206],{"class":206,"line":1835},[204,90193,52230],{"class":214},[204,90195,51899],{"class":51386},[204,90197,55325],{"class":2049},[204,90199,260],{"class":214},[204,90201,88360],{"class":319},[204,90203,55400],{"class":214},[204,90205,51899],{"class":51386},[204,90207,51393],{"class":214},[204,90209,90210,90212,90214],{"class":206,"line":1840},[204,90211,52230],{"class":214},[204,90213,51899],{"class":51386},[204,90215,51393],{"class":214},[204,90217,90218,90220,90222,90224,90226,90228,90230,90233],{"class":206,"line":1845},[204,90219,11308],{"class":210},[204,90221,87019],{"class":263},[204,90223,13651],{"class":210},[204,90225,54482],{"class":214},[204,90227,54485],{"class":2049},[204,90229,215],{"class":214},[204,90231,90232],{"class":319},"'.box'",[204,90234,221],{"class":214},[204,90236,90237,90239,90241,90243],{"class":206,"line":1850},[204,90238,52305],{"class":210},[204,90240,9525],{"class":214},[204,90242,260],{"class":210},[204,90244,47419],{"class":263},[204,90246,90247,90249,90252],{"class":206,"line":1864},[204,90248,70170],{"class":210},[204,90250,90251],{"class":2049}," mouseMove",[204,90253,10940],{"class":214},[204,90255,90256,90259,90261,90263],{"class":206,"line":1869},[204,90257,90258],{"class":214},"      box.innerHTML ",[204,90260,260],{"class":210},[204,90262,3118],{"class":214},[204,90264,2788],{"class":210},[204,90266,90267],{"class":206,"line":2663},[204,90268,90269],{"class":273},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[204,90271,90272],{"class":206,"line":2677},[204,90273,2273],{"class":214},[204,90275,90276],{"class":206,"line":2685},[204,90277,90278],{"class":273},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[204,90280,90281],{"class":206,"line":2690},[204,90282,90283],{"class":273},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[204,90285,90286],{"class":206,"line":2696},[204,90287,90288],{"class":273},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[204,90290,90291,90294,90296,90298,90301,90304,90307,90310,90312],{"class":206,"line":2702},[204,90292,90293],{"class":214},"    box.",[204,90295,57899],{"class":2049},[204,90297,215],{"class":214},[204,90299,90300],{"class":319},"'mousemove'",[204,90302,90303],{"class":214},", _.",[204,90305,90306],{"class":2049},"debounce",[204,90308,90309],{"class":214},"(mouseMove, ",[204,90311,65160],{"class":263},[204,90313,30583],{"class":214},[204,90315,90316,90318,90320],{"class":206,"line":2707},[204,90317,52503],{"class":214},[204,90319,51899],{"class":51386},[204,90321,51393],{"class":214},[204,90323,90324,90326,90328],{"class":206,"line":8035},[204,90325,51871],{"class":214},[204,90327,51886],{"class":51386},[204,90329,51393],{"class":214},[204,90331,90332],{"class":206,"line":8059},[204,90333,2486],{"emptyLinePlaceholder":135},[204,90335,90336,90338,90340],{"class":206,"line":8064},[204,90337,51871],{"class":214},[204,90339,50721],{"class":51386},[204,90341,51393],{"class":214},[68,90343,90344],{},[71,90345,90346],{},"手写一个防抖函数来处理",[19,90348,90349],{},"防抖的核心就是利用定时器来实现的：",[19,90351,90352],{},"①声明一个定时器变量",[19,90354,90355],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90357,90358],{},"③如果没有定时器则开启定时器，记得存到变量里面",[196,90360,90362],{"className":50719,"code":90361,"language":50721,"meta":125,"style":125},"\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",[81,90363,90364,90374,90388,90392,90400,90414,90434,90446,90454,90460,90470,90482,90494,90504,90516,90526,90536,90548,90552,90560,90568,90572,90580,90598,90616,90624,90642,90652,90660,90670,90674,90678,90682,90687,90692,90697,90702,90707,90712,90730,90737,90742,90750,90755,90768,90784,90794,90799,90803,90807,90827,90831,90836,90841,90846,90851,90859,90867,90871],{"__ignoreMap":125},[204,90365,90366,90368,90370,90372],{"class":206,"line":207},[204,90367,51383],{"class":214},[204,90369,51387],{"class":51386},[204,90371,51390],{"class":2049},[204,90373,51393],{"class":214},[204,90375,90376,90378,90380,90382,90384,90386],{"class":206,"line":126},[204,90377,1123],{"class":214},[204,90379,50721],{"class":51386},[204,90381,51402],{"class":2049},[204,90383,260],{"class":214},[204,90385,51407],{"class":319},[204,90387,51393],{"class":214},[204,90389,90390],{"class":206,"line":131},[204,90391,2486],{"emptyLinePlaceholder":135},[204,90393,90394,90396,90398],{"class":206,"line":1281},[204,90395,1123],{"class":214},[204,90397,51420],{"class":51386},[204,90399,51393],{"class":214},[204,90401,90402,90404,90406,90408,90410,90412],{"class":206,"line":1287},[204,90403,52230],{"class":214},[204,90405,51430],{"class":51386},[204,90407,51433],{"class":2049},[204,90409,260],{"class":214},[204,90411,51438],{"class":319},[204,90413,51393],{"class":214},[204,90415,90416,90418,90420,90422,90424,90426,90428,90430,90432],{"class":206,"line":1301},[204,90417,52230],{"class":214},[204,90419,51430],{"class":51386},[204,90421,15007],{"class":2049},[204,90423,260],{"class":214},[204,90425,51477],{"class":319},[204,90427,51457],{"class":2049},[204,90429,260],{"class":214},[204,90431,51484],{"class":319},[204,90433,51393],{"class":214},[204,90435,90436,90438,90440,90442,90444],{"class":206,"line":1307},[204,90437,52230],{"class":214},[204,90439,51493],{"class":51386},[204,90441,51496],{"class":214},[204,90443,51493],{"class":51386},[204,90445,51393],{"class":214},[204,90447,90448,90450,90452],{"class":206,"line":1398},[204,90449,52230],{"class":214},[204,90451,5213],{"class":51386},[204,90453,51393],{"class":214},[204,90455,90456,90458],{"class":206,"line":1404},[204,90457,54838],{"class":2049},[204,90459,15659],{"class":214},[204,90461,90462,90464,90466,90468],{"class":206,"line":1416},[204,90463,72682],{"class":263},[204,90465,51523],{"class":214},[204,90467,60591],{"class":263},[204,90469,1377],{"class":214},[204,90471,90472,90474,90476,90478,90480],{"class":206,"line":1698},[204,90473,54857],{"class":263},[204,90475,51523],{"class":214},[204,90477,1808],{"class":263},[204,90479,51578],{"class":210},[204,90481,1377],{"class":214},[204,90483,90484,90486,90488,90490,90492],{"class":206,"line":1703},[204,90485,54871],{"class":263},[204,90487,51523],{"class":214},[204,90489,1808],{"class":263},[204,90491,51578],{"class":210},[204,90493,1377],{"class":214},[204,90495,90496,90498,90500,90502],{"class":206,"line":1709},[204,90497,54970],{"class":263},[204,90499,51523],{"class":214},[204,90501,90092],{"class":263},[204,90503,1377],{"class":214},[204,90505,90506,90508,90510,90512,90514],{"class":206,"line":1714},[204,90507,55008],{"class":263},[204,90509,51523],{"class":214},[204,90511,1038],{"class":263},[204,90513,51578],{"class":210},[204,90515,1377],{"class":214},[204,90517,90518,90520,90522,90524],{"class":206,"line":1728},[204,90519,57502],{"class":263},[204,90521,51523],{"class":214},[204,90523,60928],{"class":263},[204,90525,1377],{"class":214},[204,90527,90528,90530,90532,90534],{"class":206,"line":1733},[204,90529,57372],{"class":263},[204,90531,51523],{"class":214},[204,90533,51678],{"class":263},[204,90535,1377],{"class":214},[204,90537,90538,90540,90542,90544,90546],{"class":206,"line":1739},[204,90539,90131],{"class":263},[204,90541,51523],{"class":214},[204,90543,532],{"class":263},[204,90545,51578],{"class":210},[204,90547,1377],{"class":214},[204,90549,90550],{"class":206,"line":1760},[204,90551,2273],{"class":214},[204,90553,90554,90556,90558],{"class":206,"line":1765},[204,90555,52503],{"class":214},[204,90557,5213],{"class":51386},[204,90559,51393],{"class":214},[204,90561,90562,90564,90566],{"class":206,"line":1779},[204,90563,51871],{"class":214},[204,90565,51420],{"class":51386},[204,90567,51393],{"class":214},[204,90569,90570],{"class":206,"line":1784},[204,90571,2486],{"emptyLinePlaceholder":135},[204,90573,90574,90576,90578],{"class":206,"line":1813},[204,90575,1123],{"class":214},[204,90577,51886],{"class":51386},[204,90579,51393],{"class":214},[204,90581,90582,90584,90586,90588,90590,90592,90594,90596],{"class":206,"line":1818},[204,90583,52230],{"class":214},[204,90585,51697],{"class":51386},[204,90587,53572],{"class":2049},[204,90589,260],{"class":214},[204,90591,53577],{"class":319},[204,90593,55400],{"class":214},[204,90595,51697],{"class":51386},[204,90597,51393],{"class":214},[204,90599,90600,90602,90604,90606,90608,90610,90612,90614],{"class":206,"line":1835},[204,90601,52230],{"class":214},[204,90603,51899],{"class":51386},[204,90605,55325],{"class":2049},[204,90607,260],{"class":214},[204,90609,88360],{"class":319},[204,90611,55400],{"class":214},[204,90613,51899],{"class":51386},[204,90615,51393],{"class":214},[204,90617,90618,90620,90622],{"class":206,"line":1840},[204,90619,52230],{"class":214},[204,90621,51899],{"class":51386},[204,90623,51393],{"class":214},[204,90625,90626,90628,90630,90632,90634,90636,90638,90640],{"class":206,"line":1845},[204,90627,11308],{"class":210},[204,90629,87019],{"class":263},[204,90631,13651],{"class":210},[204,90633,54482],{"class":214},[204,90635,54485],{"class":2049},[204,90637,215],{"class":214},[204,90639,90232],{"class":319},[204,90641,221],{"class":214},[204,90643,90644,90646,90648,90650],{"class":206,"line":1850},[204,90645,52305],{"class":210},[204,90647,9525],{"class":214},[204,90649,260],{"class":210},[204,90651,47419],{"class":263},[204,90653,90654,90656,90658],{"class":206,"line":1864},[204,90655,70170],{"class":210},[204,90657,90251],{"class":2049},[204,90659,10940],{"class":214},[204,90661,90662,90664,90666,90668],{"class":206,"line":1869},[204,90663,90258],{"class":214},[204,90665,260],{"class":210},[204,90667,3118],{"class":214},[204,90669,2788],{"class":210},[204,90671,90672],{"class":206,"line":2663},[204,90673,90269],{"class":273},[204,90675,90676],{"class":206,"line":2677},[204,90677,2273],{"class":214},[204,90679,90680],{"class":206,"line":2685},[204,90681,90278],{"class":273},[204,90683,90684],{"class":206,"line":2690},[204,90685,90686],{"class":273},"    \u002F\u002F 手写防抖函数\n",[204,90688,90689],{"class":206,"line":2696},[204,90690,90691],{"class":273},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[204,90693,90694],{"class":206,"line":2702},[204,90695,90696],{"class":273},"    \u002F\u002F 1.声明定时器变量\n",[204,90698,90699],{"class":206,"line":2707},[204,90700,90701],{"class":273},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[204,90703,90704],{"class":206,"line":8035},[204,90705,90706],{"class":273},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[204,90708,90709],{"class":206,"line":8059},[204,90710,90711],{"class":273},"    \u002F\u002F 4.定时器里面写函数调用\n",[204,90713,90714,90716,90719,90721,90724,90726,90728],{"class":206,"line":8064},[204,90715,70170],{"class":210},[204,90717,90718],{"class":2049}," debounce",[204,90720,215],{"class":214},[204,90722,90723],{"class":5303},"fn",[204,90725,12522],{"class":214},[204,90727,933],{"class":5303},[204,90729,12529],{"class":214},[204,90731,90732,90734],{"class":206,"line":8070},[204,90733,79858],{"class":210},[204,90735,90736],{"class":214}," timer\n",[204,90738,90739],{"class":206,"line":8097},[204,90740,90741],{"class":273},"      \u002F\u002F return 返回一个匿名函数\n",[204,90743,90744,90746,90748],{"class":206,"line":8102},[204,90745,74068],{"class":210},[204,90747,59004],{"class":210},[204,90749,54538],{"class":214},[204,90751,90752],{"class":206,"line":8108},[204,90753,90754],{"class":273},"        \u002F\u002F 这里边写第二三四步\n",[204,90756,90757,90759,90762,90765],{"class":206,"line":8120},[204,90758,2583],{"class":210},[204,90760,90761],{"class":214}," (timer) ",[204,90763,90764],{"class":2049},"clearTimeout",[204,90766,90767],{"class":214},"(timer)\n",[204,90769,90770,90773,90775,90778,90780,90782],{"class":206,"line":8132},[204,90771,90772],{"class":214},"        timer ",[204,90774,260],{"class":210},[204,90776,90777],{"class":2049}," setTimeout",[204,90779,215],{"class":214},[204,90781,54535],{"class":210},[204,90783,54538],{"class":214},[204,90785,90786,90789,90791],{"class":206,"line":8144},[204,90787,90788],{"class":2049},"          fn",[204,90790,13137],{"class":214},[204,90792,90793],{"class":273},"\u002F\u002F加小括号调用fn }, t)\n",[204,90795,90796],{"class":206,"line":9803},[204,90797,90798],{"class":214},"        }, t)\n",[204,90800,90801],{"class":206,"line":9828},[204,90802,52484],{"class":214},[204,90804,90805],{"class":206,"line":9851},[204,90806,2273],{"class":214},[204,90808,90809,90811,90813,90815,90817,90819,90821,90823,90825],{"class":206,"line":9875},[204,90810,90293],{"class":214},[204,90812,57899],{"class":2049},[204,90814,215],{"class":214},[204,90816,90300],{"class":319},[204,90818,12522],{"class":214},[204,90820,90306],{"class":2049},[204,90822,90309],{"class":214},[204,90824,65160],{"class":263},[204,90826,30583],{"class":214},[204,90828,90829],{"class":206,"line":9880},[204,90830,2486],{"emptyLinePlaceholder":135},[204,90832,90833],{"class":206,"line":9885},[204,90834,90835],{"class":273},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[204,90837,90838],{"class":206,"line":9890},[204,90839,90840],{"class":273},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[204,90842,90843],{"class":206,"line":9899},[204,90844,90845],{"class":273},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[204,90847,90848],{"class":206,"line":9904},[204,90849,90850],{"class":273},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[204,90852,90853,90855,90857],{"class":206,"line":9910},[204,90854,52503],{"class":214},[204,90856,51899],{"class":51386},[204,90858,51393],{"class":214},[204,90860,90861,90863,90865],{"class":206,"line":9931},[204,90862,51871],{"class":214},[204,90864,51886],{"class":51386},[204,90866,51393],{"class":214},[204,90868,90869],{"class":206,"line":9937},[204,90870,2486],{"emptyLinePlaceholder":135},[204,90872,90873,90875,90877],{"class":206,"line":9951},[204,90874,51871],{"class":214},[204,90876,50721],{"class":51386},[204,90878,51393],{"class":214},[49,90880,90882],{"id":90881},"_4172-节流","4.17.2 节流",[19,90884,90885],{},[23,90886],{"alt":125,"src":90887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90889,90890],{},[23,90891],{"alt":125,"src":90892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90894,90895],{},[30,90896,90897],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90899,90900],{},"实现方式：",[68,90902,90903],{},[71,90904,90905],{},"lodash 提供的节流函数来处理",[19,90907,90908],{},"_.throttle(func,[wait=0],[options=])",[19,90910,90911],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[196,90913,90915],{"className":50719,"code":90914,"language":50721,"meta":125,"style":125},"\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",[81,90916,90917,90927,90941,90945,90953,90967,90987,90999,91007,91013,91023,91035,91047,91057,91069,91079,91089,91101,91105,91113,91121,91125,91133,91151,91169,91177,91195,91205,91213,91223,91227,91231,91235,91240,91245,91266,91274,91282,91286],{"__ignoreMap":125},[204,90918,90919,90921,90923,90925],{"class":206,"line":207},[204,90920,51383],{"class":214},[204,90922,51387],{"class":51386},[204,90924,51390],{"class":2049},[204,90926,51393],{"class":214},[204,90928,90929,90931,90933,90935,90937,90939],{"class":206,"line":126},[204,90930,1123],{"class":214},[204,90932,50721],{"class":51386},[204,90934,51402],{"class":2049},[204,90936,260],{"class":214},[204,90938,51407],{"class":319},[204,90940,51393],{"class":214},[204,90942,90943],{"class":206,"line":131},[204,90944,2486],{"emptyLinePlaceholder":135},[204,90946,90947,90949,90951],{"class":206,"line":1281},[204,90948,1123],{"class":214},[204,90950,51420],{"class":51386},[204,90952,51393],{"class":214},[204,90954,90955,90957,90959,90961,90963,90965],{"class":206,"line":1287},[204,90956,52230],{"class":214},[204,90958,51430],{"class":51386},[204,90960,51433],{"class":2049},[204,90962,260],{"class":214},[204,90964,51438],{"class":319},[204,90966,51393],{"class":214},[204,90968,90969,90971,90973,90975,90977,90979,90981,90983,90985],{"class":206,"line":1301},[204,90970,52230],{"class":214},[204,90972,51430],{"class":51386},[204,90974,15007],{"class":2049},[204,90976,260],{"class":214},[204,90978,51477],{"class":319},[204,90980,51457],{"class":2049},[204,90982,260],{"class":214},[204,90984,51484],{"class":319},[204,90986,51393],{"class":214},[204,90988,90989,90991,90993,90995,90997],{"class":206,"line":1307},[204,90990,52230],{"class":214},[204,90992,51493],{"class":51386},[204,90994,51496],{"class":214},[204,90996,51493],{"class":51386},[204,90998,51393],{"class":214},[204,91000,91001,91003,91005],{"class":206,"line":1398},[204,91002,52230],{"class":214},[204,91004,5213],{"class":51386},[204,91006,51393],{"class":214},[204,91008,91009,91011],{"class":206,"line":1404},[204,91010,54838],{"class":2049},[204,91012,15659],{"class":214},[204,91014,91015,91017,91019,91021],{"class":206,"line":1416},[204,91016,72682],{"class":263},[204,91018,51523],{"class":214},[204,91020,60591],{"class":263},[204,91022,1377],{"class":214},[204,91024,91025,91027,91029,91031,91033],{"class":206,"line":1698},[204,91026,54857],{"class":263},[204,91028,51523],{"class":214},[204,91030,1808],{"class":263},[204,91032,51578],{"class":210},[204,91034,1377],{"class":214},[204,91036,91037,91039,91041,91043,91045],{"class":206,"line":1703},[204,91038,54871],{"class":263},[204,91040,51523],{"class":214},[204,91042,1808],{"class":263},[204,91044,51578],{"class":210},[204,91046,1377],{"class":214},[204,91048,91049,91051,91053,91055],{"class":206,"line":1709},[204,91050,54970],{"class":263},[204,91052,51523],{"class":214},[204,91054,90092],{"class":263},[204,91056,1377],{"class":214},[204,91058,91059,91061,91063,91065,91067],{"class":206,"line":1714},[204,91060,55008],{"class":263},[204,91062,51523],{"class":214},[204,91064,1038],{"class":263},[204,91066,51578],{"class":210},[204,91068,1377],{"class":214},[204,91070,91071,91073,91075,91077],{"class":206,"line":1728},[204,91072,57502],{"class":263},[204,91074,51523],{"class":214},[204,91076,60928],{"class":263},[204,91078,1377],{"class":214},[204,91080,91081,91083,91085,91087],{"class":206,"line":1733},[204,91082,57372],{"class":263},[204,91084,51523],{"class":214},[204,91086,51678],{"class":263},[204,91088,1377],{"class":214},[204,91090,91091,91093,91095,91097,91099],{"class":206,"line":1739},[204,91092,90131],{"class":263},[204,91094,51523],{"class":214},[204,91096,532],{"class":263},[204,91098,51578],{"class":210},[204,91100,1377],{"class":214},[204,91102,91103],{"class":206,"line":1760},[204,91104,2273],{"class":214},[204,91106,91107,91109,91111],{"class":206,"line":1765},[204,91108,52503],{"class":214},[204,91110,5213],{"class":51386},[204,91112,51393],{"class":214},[204,91114,91115,91117,91119],{"class":206,"line":1779},[204,91116,51871],{"class":214},[204,91118,51420],{"class":51386},[204,91120,51393],{"class":214},[204,91122,91123],{"class":206,"line":1784},[204,91124,2486],{"emptyLinePlaceholder":135},[204,91126,91127,91129,91131],{"class":206,"line":1813},[204,91128,1123],{"class":214},[204,91130,51886],{"class":51386},[204,91132,51393],{"class":214},[204,91134,91135,91137,91139,91141,91143,91145,91147,91149],{"class":206,"line":1818},[204,91136,52230],{"class":214},[204,91138,51697],{"class":51386},[204,91140,53572],{"class":2049},[204,91142,260],{"class":214},[204,91144,53577],{"class":319},[204,91146,55400],{"class":214},[204,91148,51697],{"class":51386},[204,91150,51393],{"class":214},[204,91152,91153,91155,91157,91159,91161,91163,91165,91167],{"class":206,"line":1835},[204,91154,52230],{"class":214},[204,91156,51899],{"class":51386},[204,91158,55325],{"class":2049},[204,91160,260],{"class":214},[204,91162,88360],{"class":319},[204,91164,55400],{"class":214},[204,91166,51899],{"class":51386},[204,91168,51393],{"class":214},[204,91170,91171,91173,91175],{"class":206,"line":1840},[204,91172,52230],{"class":214},[204,91174,51899],{"class":51386},[204,91176,51393],{"class":214},[204,91178,91179,91181,91183,91185,91187,91189,91191,91193],{"class":206,"line":1845},[204,91180,11308],{"class":210},[204,91182,87019],{"class":263},[204,91184,13651],{"class":210},[204,91186,54482],{"class":214},[204,91188,54485],{"class":2049},[204,91190,215],{"class":214},[204,91192,90232],{"class":319},[204,91194,221],{"class":214},[204,91196,91197,91199,91201,91203],{"class":206,"line":1850},[204,91198,52305],{"class":210},[204,91200,9525],{"class":214},[204,91202,260],{"class":210},[204,91204,47419],{"class":263},[204,91206,91207,91209,91211],{"class":206,"line":1864},[204,91208,70170],{"class":210},[204,91210,90251],{"class":2049},[204,91212,10940],{"class":214},[204,91214,91215,91217,91219,91221],{"class":206,"line":1869},[204,91216,90258],{"class":214},[204,91218,260],{"class":210},[204,91220,3118],{"class":214},[204,91222,2788],{"class":210},[204,91224,91225],{"class":206,"line":2663},[204,91226,90269],{"class":273},[204,91228,91229],{"class":206,"line":2677},[204,91230,2273],{"class":214},[204,91232,91233],{"class":206,"line":2685},[204,91234,90278],{"class":273},[204,91236,91237],{"class":206,"line":2690},[204,91238,91239],{"class":273},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[204,91241,91242],{"class":206,"line":2696},[204,91243,91244],{"class":273},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[204,91246,91247,91249,91251,91253,91255,91257,91260,91262,91264],{"class":206,"line":2702},[204,91248,90293],{"class":214},[204,91250,57899],{"class":2049},[204,91252,215],{"class":214},[204,91254,90300],{"class":319},[204,91256,90303],{"class":214},[204,91258,91259],{"class":2049},"throttle",[204,91261,90309],{"class":214},[204,91263,65160],{"class":263},[204,91265,30583],{"class":214},[204,91267,91268,91270,91272],{"class":206,"line":2707},[204,91269,52503],{"class":214},[204,91271,51899],{"class":51386},[204,91273,51393],{"class":214},[204,91275,91276,91278,91280],{"class":206,"line":8035},[204,91277,51871],{"class":214},[204,91279,51886],{"class":51386},[204,91281,51393],{"class":214},[204,91283,91284],{"class":206,"line":8059},[204,91285,2486],{"emptyLinePlaceholder":135},[204,91287,91288,91290,91292],{"class":206,"line":8064},[204,91289,51871],{"class":214},[204,91291,50721],{"class":51386},[204,91293,51393],{"class":214},[68,91295,91296],{},[71,91297,91298],{},"手写一个节流函数来处理",[19,91300,71038],{},[19,91302,90352],{},[19,91304,91305],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91307,91308],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[196,91310,91312],{"className":50719,"code":91311,"language":50721,"meta":125,"style":125},"\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",[81,91313,91314,91324,91338,91342,91350,91364,91384,91396,91404,91410,91420,91432,91444,91454,91466,91476,91486,91498,91502,91510,91518,91522,91530,91548,91566,91574,91592,91602,91610,91620,91624,91628,91632,91637,91642,91647,91652,91657,91662,91679,91685,91693,91704,91719,91726,91731,91736,91746,91751,91756,91761,91765,91769,91773,91793,91801,91809,91813],{"__ignoreMap":125},[204,91315,91316,91318,91320,91322],{"class":206,"line":207},[204,91317,51383],{"class":214},[204,91319,51387],{"class":51386},[204,91321,51390],{"class":2049},[204,91323,51393],{"class":214},[204,91325,91326,91328,91330,91332,91334,91336],{"class":206,"line":126},[204,91327,1123],{"class":214},[204,91329,50721],{"class":51386},[204,91331,51402],{"class":2049},[204,91333,260],{"class":214},[204,91335,51407],{"class":319},[204,91337,51393],{"class":214},[204,91339,91340],{"class":206,"line":131},[204,91341,2486],{"emptyLinePlaceholder":135},[204,91343,91344,91346,91348],{"class":206,"line":1281},[204,91345,1123],{"class":214},[204,91347,51420],{"class":51386},[204,91349,51393],{"class":214},[204,91351,91352,91354,91356,91358,91360,91362],{"class":206,"line":1287},[204,91353,52230],{"class":214},[204,91355,51430],{"class":51386},[204,91357,51433],{"class":2049},[204,91359,260],{"class":214},[204,91361,51438],{"class":319},[204,91363,51393],{"class":214},[204,91365,91366,91368,91370,91372,91374,91376,91378,91380,91382],{"class":206,"line":1301},[204,91367,52230],{"class":214},[204,91369,51430],{"class":51386},[204,91371,15007],{"class":2049},[204,91373,260],{"class":214},[204,91375,51477],{"class":319},[204,91377,51457],{"class":2049},[204,91379,260],{"class":214},[204,91381,51484],{"class":319},[204,91383,51393],{"class":214},[204,91385,91386,91388,91390,91392,91394],{"class":206,"line":1307},[204,91387,52230],{"class":214},[204,91389,51493],{"class":51386},[204,91391,51496],{"class":214},[204,91393,51493],{"class":51386},[204,91395,51393],{"class":214},[204,91397,91398,91400,91402],{"class":206,"line":1398},[204,91399,52230],{"class":214},[204,91401,5213],{"class":51386},[204,91403,51393],{"class":214},[204,91405,91406,91408],{"class":206,"line":1404},[204,91407,54838],{"class":2049},[204,91409,15659],{"class":214},[204,91411,91412,91414,91416,91418],{"class":206,"line":1416},[204,91413,72682],{"class":263},[204,91415,51523],{"class":214},[204,91417,60591],{"class":263},[204,91419,1377],{"class":214},[204,91421,91422,91424,91426,91428,91430],{"class":206,"line":1698},[204,91423,54857],{"class":263},[204,91425,51523],{"class":214},[204,91427,1808],{"class":263},[204,91429,51578],{"class":210},[204,91431,1377],{"class":214},[204,91433,91434,91436,91438,91440,91442],{"class":206,"line":1703},[204,91435,54871],{"class":263},[204,91437,51523],{"class":214},[204,91439,1808],{"class":263},[204,91441,51578],{"class":210},[204,91443,1377],{"class":214},[204,91445,91446,91448,91450,91452],{"class":206,"line":1709},[204,91447,54970],{"class":263},[204,91449,51523],{"class":214},[204,91451,90092],{"class":263},[204,91453,1377],{"class":214},[204,91455,91456,91458,91460,91462,91464],{"class":206,"line":1714},[204,91457,55008],{"class":263},[204,91459,51523],{"class":214},[204,91461,1038],{"class":263},[204,91463,51578],{"class":210},[204,91465,1377],{"class":214},[204,91467,91468,91470,91472,91474],{"class":206,"line":1728},[204,91469,57502],{"class":263},[204,91471,51523],{"class":214},[204,91473,60928],{"class":263},[204,91475,1377],{"class":214},[204,91477,91478,91480,91482,91484],{"class":206,"line":1733},[204,91479,57372],{"class":263},[204,91481,51523],{"class":214},[204,91483,51678],{"class":263},[204,91485,1377],{"class":214},[204,91487,91488,91490,91492,91494,91496],{"class":206,"line":1739},[204,91489,90131],{"class":263},[204,91491,51523],{"class":214},[204,91493,532],{"class":263},[204,91495,51578],{"class":210},[204,91497,1377],{"class":214},[204,91499,91500],{"class":206,"line":1760},[204,91501,2273],{"class":214},[204,91503,91504,91506,91508],{"class":206,"line":1765},[204,91505,52503],{"class":214},[204,91507,5213],{"class":51386},[204,91509,51393],{"class":214},[204,91511,91512,91514,91516],{"class":206,"line":1779},[204,91513,51871],{"class":214},[204,91515,51420],{"class":51386},[204,91517,51393],{"class":214},[204,91519,91520],{"class":206,"line":1784},[204,91521,2486],{"emptyLinePlaceholder":135},[204,91523,91524,91526,91528],{"class":206,"line":1813},[204,91525,1123],{"class":214},[204,91527,51886],{"class":51386},[204,91529,51393],{"class":214},[204,91531,91532,91534,91536,91538,91540,91542,91544,91546],{"class":206,"line":1818},[204,91533,52230],{"class":214},[204,91535,51697],{"class":51386},[204,91537,53572],{"class":2049},[204,91539,260],{"class":214},[204,91541,53577],{"class":319},[204,91543,55400],{"class":214},[204,91545,51697],{"class":51386},[204,91547,51393],{"class":214},[204,91549,91550,91552,91554,91556,91558,91560,91562,91564],{"class":206,"line":1835},[204,91551,52230],{"class":214},[204,91553,51899],{"class":51386},[204,91555,55325],{"class":2049},[204,91557,260],{"class":214},[204,91559,88360],{"class":319},[204,91561,55400],{"class":214},[204,91563,51899],{"class":51386},[204,91565,51393],{"class":214},[204,91567,91568,91570,91572],{"class":206,"line":1840},[204,91569,52230],{"class":214},[204,91571,51899],{"class":51386},[204,91573,51393],{"class":214},[204,91575,91576,91578,91580,91582,91584,91586,91588,91590],{"class":206,"line":1845},[204,91577,11308],{"class":210},[204,91579,87019],{"class":263},[204,91581,13651],{"class":210},[204,91583,54482],{"class":214},[204,91585,54485],{"class":2049},[204,91587,215],{"class":214},[204,91589,90232],{"class":319},[204,91591,221],{"class":214},[204,91593,91594,91596,91598,91600],{"class":206,"line":1850},[204,91595,52305],{"class":210},[204,91597,9525],{"class":214},[204,91599,260],{"class":210},[204,91601,47419],{"class":263},[204,91603,91604,91606,91608],{"class":206,"line":1864},[204,91605,70170],{"class":210},[204,91607,90251],{"class":2049},[204,91609,10940],{"class":214},[204,91611,91612,91614,91616,91618],{"class":206,"line":1869},[204,91613,90258],{"class":214},[204,91615,260],{"class":210},[204,91617,3118],{"class":214},[204,91619,2788],{"class":210},[204,91621,91622],{"class":206,"line":2663},[204,91623,90269],{"class":273},[204,91625,91626],{"class":206,"line":2677},[204,91627,2273],{"class":214},[204,91629,91630],{"class":206,"line":2685},[204,91631,90278],{"class":273},[204,91633,91634],{"class":206,"line":2690},[204,91635,91636],{"class":273},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[204,91638,91639],{"class":206,"line":2696},[204,91640,91641],{"class":273},"    \u002F\u002F 1.声明一个定时器变量\n",[204,91643,91644],{"class":206,"line":2702},[204,91645,91646],{"class":273},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[204,91648,91649],{"class":206,"line":2707},[204,91650,91651],{"class":273},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[204,91653,91654],{"class":206,"line":8035},[204,91655,91656],{"class":273},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[204,91658,91659],{"class":206,"line":8059},[204,91660,91661],{"class":273},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[204,91663,91664,91666,91669,91671,91673,91675,91677],{"class":206,"line":8064},[204,91665,70170],{"class":210},[204,91667,91668],{"class":2049}," throttle",[204,91670,215],{"class":214},[204,91672,90723],{"class":5303},[204,91674,12522],{"class":214},[204,91676,933],{"class":5303},[204,91678,12529],{"class":214},[204,91680,91681,91683],{"class":206,"line":8070},[204,91682,79858],{"class":210},[204,91684,90736],{"class":214},[204,91686,91687,91689,91691],{"class":206,"line":8097},[204,91688,74068],{"class":210},[204,91690,59004],{"class":210},[204,91692,54538],{"class":214},[204,91694,91695,91697,91699,91701],{"class":206,"line":8102},[204,91696,2583],{"class":210},[204,91698,1744],{"class":214},[204,91700,440],{"class":210},[204,91702,91703],{"class":214},"timer) {\n",[204,91705,91706,91709,91711,91713,91715,91717],{"class":206,"line":8108},[204,91707,91708],{"class":214},"          timer ",[204,91710,260],{"class":210},[204,91712,90777],{"class":2049},[204,91714,215],{"class":214},[204,91716,54535],{"class":210},[204,91718,54538],{"class":214},[204,91720,91721,91724],{"class":206,"line":8120},[204,91722,91723],{"class":2049},"            fn",[204,91725,2062],{"class":214},[204,91727,91728],{"class":206,"line":8132},[204,91729,91730],{"class":273},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[204,91732,91733],{"class":206,"line":8144},[204,91734,91735],{"class":273},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[204,91737,91738,91741,91743],{"class":206,"line":9803},[204,91739,91740],{"class":214},"            timer ",[204,91742,260],{"class":210},[204,91744,91745],{"class":263}," null\n",[204,91747,91748],{"class":206,"line":9828},[204,91749,91750],{"class":273},"            \u002F\u002F 不能用clearTimeout(timer)\n",[204,91752,91753],{"class":206,"line":9851},[204,91754,91755],{"class":273},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[204,91757,91758],{"class":206,"line":9875},[204,91759,91760],{"class":214},"          }, t)\n",[204,91762,91763],{"class":206,"line":9880},[204,91764,2615],{"class":214},[204,91766,91767],{"class":206,"line":9885},[204,91768,52484],{"class":214},[204,91770,91771],{"class":206,"line":9890},[204,91772,2273],{"class":214},[204,91774,91775,91777,91779,91781,91783,91785,91787,91789,91791],{"class":206,"line":9899},[204,91776,90293],{"class":214},[204,91778,57899],{"class":2049},[204,91780,215],{"class":214},[204,91782,90300],{"class":319},[204,91784,12522],{"class":214},[204,91786,91259],{"class":2049},[204,91788,90309],{"class":214},[204,91790,65160],{"class":263},[204,91792,30583],{"class":214},[204,91794,91795,91797,91799],{"class":206,"line":9904},[204,91796,52503],{"class":214},[204,91798,51899],{"class":51386},[204,91800,51393],{"class":214},[204,91802,91803,91805,91807],{"class":206,"line":9910},[204,91804,51871],{"class":214},[204,91806,51886],{"class":51386},[204,91808,51393],{"class":214},[204,91810,91811],{"class":206,"line":9931},[204,91812,2486],{"emptyLinePlaceholder":135},[204,91814,91815,91817,91819],{"class":206,"line":9937},[204,91816,51871],{"class":214},[204,91818,50721],{"class":51386},[204,91820,51393],{"class":214},[49,91822,91824],{"id":91823},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[196,91826,91828],{"className":53153,"code":91827,"language":53155,"meta":125,"style":125},"\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",[81,91829,91830,91838,91846,91851,91856,91861,91866,91870,91878],{"__ignoreMap":125},[204,91831,91832,91834,91836],{"class":206,"line":207},[204,91833,1123],{"class":214},[204,91835,51886],{"class":51386},[204,91837,51393],{"class":214},[204,91839,91840,91842,91844],{"class":206,"line":126},[204,91841,52230],{"class":214},[204,91843,51899],{"class":51386},[204,91845,51393],{"class":214},[204,91847,91848],{"class":206,"line":131},[204,91849,91850],{"class":214},"    let timer = null\n",[204,91852,91853],{"class":206,"line":1281},[204,91854,91855],{"class":214},"    timer = setTimeout(() => {\n",[204,91857,91858],{"class":206,"line":1287},[204,91859,91860],{"class":214},"      clearTimeout(timer)\n",[204,91862,91863],{"class":206,"line":1301},[204,91864,91865],{"class":214},"      console.log(timer)\n",[204,91867,91868],{"class":206,"line":1307},[204,91869,60311],{"class":214},[204,91871,91872,91874,91876],{"class":206,"line":1398},[204,91873,52503],{"class":214},[204,91875,51899],{"class":51386},[204,91877,51393],{"class":214},[204,91879,91880,91882,91884],{"class":206,"line":1404},[204,91881,51871],{"class":214},[204,91883,51886],{"class":51386},[204,91885,51393],{"class":214},[19,91887,91888],{},"输出为1",[19,91890,91891],{},"在开启的定时器里边写清除定时器",[19,91893,91894],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[49,91896,91898],{"id":91897},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91900,91901],{},"页面打开，可以记录上一次的视频播放位置",[19,91903,91904],{},[23,91905],{"alt":125,"src":91906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91908,91909],{},[23,91910],{"alt":125,"src":91911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[196,91913,91915],{"className":50719,"code":91914,"language":50721,"meta":125,"style":125},"\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",[81,91916,91917,91927,91941,91945,91953,91967,91987,92007,92029,92042,92050,92056,92066,92076,92086,92090,92094,92101,92114,92126,92130,92134,92144,92156,92170,92174,92178,92185,92195,92208,92220,92230,92240,92256,92268,92272,92276,92284,92294,92306,92316,92326,92336,92340,92344,92354,92365,92369,92377,92385,92389,92397,92412,92427,92442,92463,92471,92479,92494,92516,92524,92539,92565,92591,92617,92625,92633,92652,92660,92665,92684,92689,92707,92712,92717,92725,92730,92744,92752,92757,92774,92778,92783,92805,92809,92817,92825,92829],{"__ignoreMap":125},[204,91918,91919,91921,91923,91925],{"class":206,"line":207},[204,91920,51383],{"class":214},[204,91922,51387],{"class":51386},[204,91924,51390],{"class":2049},[204,91926,51393],{"class":214},[204,91928,91929,91931,91933,91935,91937,91939],{"class":206,"line":126},[204,91930,1123],{"class":214},[204,91932,50721],{"class":51386},[204,91934,51402],{"class":2049},[204,91936,260],{"class":214},[204,91938,51407],{"class":319},[204,91940,51393],{"class":214},[204,91942,91943],{"class":206,"line":131},[204,91944,2486],{"emptyLinePlaceholder":135},[204,91946,91947,91949,91951],{"class":206,"line":1281},[204,91948,1123],{"class":214},[204,91950,51420],{"class":51386},[204,91952,51393],{"class":214},[204,91954,91955,91957,91959,91961,91963,91965],{"class":206,"line":1287},[204,91956,52230],{"class":214},[204,91958,51430],{"class":51386},[204,91960,51433],{"class":2049},[204,91962,260],{"class":214},[204,91964,51438],{"class":319},[204,91966,59213],{"class":214},[204,91968,91969,91971,91973,91975,91977,91979,91981,91983,91985],{"class":206,"line":1301},[204,91970,52230],{"class":214},[204,91972,51430],{"class":51386},[204,91974,51449],{"class":2049},[204,91976,260],{"class":214},[204,91978,51454],{"class":319},[204,91980,51457],{"class":2049},[204,91982,260],{"class":214},[204,91984,51462],{"class":319},[204,91986,59213],{"class":214},[204,91988,91989,91991,91993,91995,91997,91999,92001,92003,92005],{"class":206,"line":1307},[204,91990,52230],{"class":214},[204,91992,51430],{"class":51386},[204,91994,15007],{"class":2049},[204,91996,260],{"class":214},[204,91998,51477],{"class":319},[204,92000,51457],{"class":2049},[204,92002,260],{"class":214},[204,92004,51484],{"class":319},[204,92006,59213],{"class":214},[204,92008,92009,92011,92013,92015,92017,92020,92022,92024,92027],{"class":206,"line":1398},[204,92010,52230],{"class":214},[204,92012,51430],{"class":51386},[204,92014,15007],{"class":2049},[204,92016,260],{"class":214},[204,92018,92019],{"class":319},"\"referrer\"",[204,92021,51457],{"class":2049},[204,92023,260],{"class":214},[204,92025,92026],{"class":319},"\"never\"",[204,92028,59213],{"class":214},[204,92030,92031,92033,92035,92038,92040],{"class":206,"line":1404},[204,92032,52230],{"class":214},[204,92034,51493],{"class":51386},[204,92036,92037],{"class":214},">综合案例\u003C\u002F",[204,92039,51493],{"class":51386},[204,92041,51393],{"class":214},[204,92043,92044,92046,92048],{"class":206,"line":1416},[204,92045,52230],{"class":214},[204,92047,5213],{"class":51386},[204,92049,51393],{"class":214},[204,92051,92052,92054],{"class":206,"line":1698},[204,92053,6490],{"class":51386},[204,92055,15659],{"class":214},[204,92057,92058,92060,92062,92064],{"class":206,"line":1703},[204,92059,54781],{"class":263},[204,92061,51523],{"class":214},[204,92063,405],{"class":263},[204,92065,1377],{"class":214},[204,92067,92068,92070,92072,92074],{"class":206,"line":1709},[204,92069,54792],{"class":263},[204,92071,51523],{"class":214},[204,92073,405],{"class":263},[204,92075,1377],{"class":214},[204,92077,92078,92080,92082,92084],{"class":206,"line":1714},[204,92079,72682],{"class":263},[204,92081,51523],{"class":214},[204,92083,60591],{"class":263},[204,92085,1377],{"class":214},[204,92087,92088],{"class":206,"line":1728},[204,92089,2273],{"class":214},[204,92091,92092],{"class":206,"line":1733},[204,92093,2486],{"emptyLinePlaceholder":135},[204,92095,92096,92099],{"class":206,"line":1739},[204,92097,92098],{"class":2049},"    .container",[204,92100,15659],{"class":214},[204,92102,92103,92105,92107,92110,92112],{"class":206,"line":1760},[204,92104,54857],{"class":263},[204,92106,51523],{"class":214},[204,92108,92109],{"class":263},"1200",[204,92111,51578],{"class":210},[204,92113,1377],{"class":214},[204,92115,92116,92118,92120,92122,92124],{"class":206,"line":1765},[204,92117,54792],{"class":263},[204,92119,51523],{"class":214},[204,92121,405],{"class":263},[204,92123,51642],{"class":263},[204,92125,1377],{"class":214},[204,92127,92128],{"class":206,"line":1779},[204,92129,2273],{"class":214},[204,92131,92132],{"class":206,"line":1784},[204,92133,2486],{"emptyLinePlaceholder":135},[204,92135,92136,92139,92142],{"class":206,"line":1813},[204,92137,92138],{"class":2049},"    .video",[204,92140,92141],{"class":51386}," video",[204,92143,15659],{"class":214},[204,92145,92146,92148,92150,92152,92154],{"class":206,"line":1818},[204,92147,54857],{"class":263},[204,92149,51523],{"class":214},[204,92151,524],{"class":263},[204,92153,541],{"class":210},[204,92155,1377],{"class":214},[204,92157,92158,92160,92162,92164,92166,92168],{"class":206,"line":1835},[204,92159,54781],{"class":263},[204,92161,51523],{"class":214},[204,92163,913],{"class":263},[204,92165,51578],{"class":210},[204,92167,4179],{"class":263},[204,92169,1377],{"class":214},[204,92171,92172],{"class":206,"line":1840},[204,92173,2273],{"class":214},[204,92175,92176],{"class":206,"line":1845},[204,92177,2486],{"emptyLinePlaceholder":135},[204,92179,92180,92183],{"class":206,"line":1850},[204,92181,92182],{"class":2049},"    .elevator",[204,92184,15659],{"class":214},[204,92186,92187,92189,92191,92193],{"class":206,"line":1864},[204,92188,54845],{"class":263},[204,92190,51523],{"class":214},[204,92192,86319],{"class":263},[204,92194,1377],{"class":214},[204,92196,92197,92199,92201,92204,92206],{"class":206,"line":1869},[204,92198,55033],{"class":263},[204,92200,51523],{"class":214},[204,92202,92203],{"class":263},"280",[204,92205,51578],{"class":210},[204,92207,1377],{"class":214},[204,92209,92210,92212,92214,92216,92218],{"class":206,"line":2663},[204,92211,86513],{"class":263},[204,92213,51523],{"class":214},[204,92215,913],{"class":263},[204,92217,51578],{"class":210},[204,92219,1377],{"class":214},[204,92221,92222,92224,92226,92228],{"class":206,"line":2677},[204,92223,86326],{"class":263},[204,92225,51523],{"class":214},[204,92227,86331],{"class":263},[204,92229,1377],{"class":214},[204,92231,92232,92234,92236,92238],{"class":206,"line":2685},[204,92233,61807],{"class":263},[204,92235,51523],{"class":214},[204,92237,60928],{"class":263},[204,92239,1377],{"class":214},[204,92241,92242,92244,92246,92248,92250,92252,92254],{"class":206,"line":2690},[204,92243,62063],{"class":263},[204,92245,51523],{"class":214},[204,92247,431],{"class":263},[204,92249,51578],{"class":210},[204,92251,51607],{"class":263},[204,92253,62330],{"class":263},[204,92255,1377],{"class":214},[204,92257,92258,92260,92262,92264,92266],{"class":206,"line":2696},[204,92259,54857],{"class":263},[204,92261,51523],{"class":214},[204,92263,1120],{"class":263},[204,92265,51578],{"class":210},[204,92267,1377],{"class":214},[204,92269,92270],{"class":206,"line":2702},[204,92271,2273],{"class":214},[204,92273,92274],{"class":206,"line":2707},[204,92275,2486],{"emptyLinePlaceholder":135},[204,92277,92278,92280,92282],{"class":206,"line":8035},[204,92279,92182],{"class":2049},[204,92281,1485],{"class":51386},[204,92283,15659],{"class":214},[204,92285,92286,92288,92290,92292],{"class":206,"line":8059},[204,92287,55095],{"class":263},[204,92289,51523],{"class":214},[204,92291,60955],{"class":263},[204,92293,1377],{"class":214},[204,92295,92296,92298,92300,92302,92304],{"class":206,"line":8064},[204,92297,54781],{"class":263},[204,92299,51523],{"class":214},[204,92301,659],{"class":263},[204,92303,51578],{"class":210},[204,92305,1377],{"class":214},[204,92307,92308,92310,92312,92314],{"class":206,"line":8070},[204,92309,64056],{"class":263},[204,92311,51523],{"class":214},[204,92313,54823],{"class":263},[204,92315,1377],{"class":214},[204,92317,92318,92320,92322,92324],{"class":206,"line":8097},[204,92319,57372],{"class":263},[204,92321,51523],{"class":214},[204,92323,51678],{"class":263},[204,92325,1377],{"class":214},[204,92327,92328,92330,92332,92334],{"class":206,"line":8102},[204,92329,57502],{"class":263},[204,92331,51523],{"class":214},[204,92333,62156],{"class":263},[204,92335,1377],{"class":214},[204,92337,92338],{"class":206,"line":8108},[204,92339,2273],{"class":214},[204,92341,92342],{"class":206,"line":8120},[204,92343,2486],{"emptyLinePlaceholder":135},[204,92345,92346,92348,92350,92352],{"class":206,"line":8132},[204,92347,92182],{"class":2049},[204,92349,1485],{"class":51386},[204,92351,64110],{"class":2049},[204,92353,15659],{"class":214},[204,92355,92356,92358,92360,92363],{"class":206,"line":8144},[204,92357,57502],{"class":263},[204,92359,51523],{"class":214},[204,92361,92362],{"class":263},"#1286ff",[204,92364,1377],{"class":214},[204,92366,92367],{"class":206,"line":9803},[204,92368,2273],{"class":214},[204,92370,92371,92373,92375],{"class":206,"line":9828},[204,92372,52503],{"class":214},[204,92374,5213],{"class":51386},[204,92376,51393],{"class":214},[204,92378,92379,92381,92383],{"class":206,"line":9851},[204,92380,51871],{"class":214},[204,92382,51420],{"class":51386},[204,92384,51393],{"class":214},[204,92386,92387],{"class":206,"line":9875},[204,92388,2486],{"emptyLinePlaceholder":135},[204,92390,92391,92393,92395],{"class":206,"line":9880},[204,92392,1123],{"class":214},[204,92394,51886],{"class":51386},[204,92396,51393],{"class":214},[204,92398,92399,92401,92403,92405,92407,92410],{"class":206,"line":9885},[204,92400,52230],{"class":214},[204,92402,51697],{"class":51386},[204,92404,53572],{"class":2049},[204,92406,260],{"class":214},[204,92408,92409],{"class":319},"\"container\"",[204,92411,51393],{"class":214},[204,92413,92414,92416,92418,92420,92422,92425],{"class":206,"line":9890},[204,92415,51427],{"class":214},[204,92417,51697],{"class":51386},[204,92419,53572],{"class":2049},[204,92421,260],{"class":214},[204,92423,92424],{"class":319},"\"header\"",[204,92426,51393],{"class":214},[204,92428,92429,92431,92433,92435,92437,92440],{"class":206,"line":9899},[204,92430,55320],{"class":214},[204,92432,62],{"class":51386},[204,92434,61143],{"class":2049},[204,92436,260],{"class":214},[204,92438,92439],{"class":319},"\"http:\u002F\u002Fpip.itcast.cn\"",[204,92441,51393],{"class":214},[204,92443,92444,92446,92448,92450,92452,92455,92457,92459,92461],{"class":206,"line":9904},[204,92445,55388],{"class":214},[204,92447,23],{"class":51386},[204,92449,55325],{"class":2049},[204,92451,260],{"class":214},[204,92453,92454],{"class":319},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[204,92456,55333],{"class":2049},[204,92458,260],{"class":214},[204,92460,7739],{"class":319},[204,92462,59213],{"class":214},[204,92464,92465,92467,92469],{"class":206,"line":9910},[204,92466,55493],{"class":214},[204,92468,62],{"class":51386},[204,92470,51393],{"class":214},[204,92472,92473,92475,92477],{"class":206,"line":9931},[204,92474,51862],{"class":214},[204,92476,51697],{"class":51386},[204,92478,51393],{"class":214},[204,92480,92481,92483,92485,92487,92489,92492],{"class":206,"line":9937},[204,92482,51427],{"class":214},[204,92484,51697],{"class":51386},[204,92486,53572],{"class":2049},[204,92488,260],{"class":214},[204,92490,92491],{"class":319},"\"video\"",[204,92493,51393],{"class":214},[204,92495,92496,92498,92500,92502,92504,92507,92510,92512,92514],{"class":206,"line":9951},[204,92497,55320],{"class":214},[204,92499,28269],{"class":51386},[204,92501,55325],{"class":2049},[204,92503,260],{"class":214},[204,92505,92506],{"class":319},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[204,92508,92509],{"class":2049}," controls",[204,92511,55400],{"class":214},[204,92513,28269],{"class":51386},[204,92515,51393],{"class":214},[204,92517,92518,92520,92522],{"class":206,"line":9957},[204,92519,51862],{"class":214},[204,92521,51697],{"class":51386},[204,92523,51393],{"class":214},[204,92525,92526,92528,92530,92532,92534,92537],{"class":206,"line":9984},[204,92527,51427],{"class":214},[204,92529,51697],{"class":51386},[204,92531,53572],{"class":2049},[204,92533,260],{"class":214},[204,92535,92536],{"class":319},"\"elevator\"",[204,92538,51393],{"class":214},[204,92540,92541,92543,92545,92547,92549,92551,92554,92556,92558,92561,92563],{"class":206,"line":9993},[204,92542,55320],{"class":214},[204,92544,62],{"class":51386},[204,92546,61143],{"class":2049},[204,92548,260],{"class":214},[204,92550,64322],{"class":319},[204,92552,92553],{"class":2049}," data-ref",[204,92555,260],{"class":214},[204,92557,92491],{"class":319},[204,92559,92560],{"class":214},">视频介绍\u003C\u002F",[204,92562,62],{"class":51386},[204,92564,51393],{"class":214},[204,92566,92567,92569,92571,92573,92575,92577,92579,92581,92584,92587,92589],{"class":206,"line":9999},[204,92568,55320],{"class":214},[204,92570,62],{"class":51386},[204,92572,61143],{"class":2049},[204,92574,260],{"class":214},[204,92576,64322],{"class":319},[204,92578,92553],{"class":2049},[204,92580,260],{"class":214},[204,92582,92583],{"class":319},"\"intro\"",[204,92585,92586],{"class":214},">课程简介\u003C\u002F",[204,92588,62],{"class":51386},[204,92590,51393],{"class":214},[204,92592,92593,92595,92597,92599,92601,92603,92605,92607,92610,92613,92615],{"class":206,"line":10007},[204,92594,55320],{"class":214},[204,92596,62],{"class":51386},[204,92598,61143],{"class":2049},[204,92600,260],{"class":214},[204,92602,64322],{"class":319},[204,92604,92553],{"class":2049},[204,92606,260],{"class":214},[204,92608,92609],{"class":319},"\"outline\"",[204,92611,92612],{"class":214},">评论列表\u003C\u002F",[204,92614,62],{"class":51386},[204,92616,51393],{"class":214},[204,92618,92619,92621,92623],{"class":206,"line":10012},[204,92620,51862],{"class":214},[204,92622,51697],{"class":51386},[204,92624,51393],{"class":214},[204,92626,92627,92629,92631],{"class":206,"line":16691},[204,92628,52503],{"class":214},[204,92630,51697],{"class":51386},[204,92632,51393],{"class":214},[204,92634,92635,92637,92639,92641,92643,92646,92648,92650],{"class":206,"line":16697},[204,92636,52230],{"class":214},[204,92638,51899],{"class":51386},[204,92640,55325],{"class":2049},[204,92642,260],{"class":214},[204,92644,92645],{"class":319},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[204,92647,55400],{"class":214},[204,92649,51899],{"class":51386},[204,92651,51393],{"class":214},[204,92653,92654,92656,92658],{"class":206,"line":16720},[204,92655,52230],{"class":214},[204,92657,51899],{"class":51386},[204,92659,51393],{"class":214},[204,92661,92662],{"class":206,"line":16726},[204,92663,92664],{"class":273},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[204,92666,92667,92669,92671,92673,92675,92677,92679,92682],{"class":206,"line":16749},[204,92668,11308],{"class":210},[204,92670,92141],{"class":263},[204,92672,13651],{"class":210},[204,92674,54482],{"class":214},[204,92676,54485],{"class":2049},[204,92678,215],{"class":214},[204,92680,92681],{"class":319},"'video'",[204,92683,221],{"class":214},[204,92685,92686],{"class":206,"line":16763},[204,92687,92688],{"class":273},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[204,92690,92691,92694,92696,92698,92700,92703,92705],{"class":206,"line":16783},[204,92692,92693],{"class":214},"    video.ontimeupdate ",[204,92695,260],{"class":210},[204,92697,88441],{"class":214},[204,92699,91259],{"class":2049},[204,92701,92702],{"class":214},"(() ",[204,92704,84808],{"class":210},[204,92706,15659],{"class":214},[204,92708,92709],{"class":206,"line":16789},[204,92710,92711],{"class":273},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[204,92713,92714],{"class":206,"line":16800},[204,92715,92716],{"class":273},"      \u002F\u002F 控制台输出当前的时间\n",[204,92718,92719,92722],{"class":206,"line":16823},[204,92720,92721],{"class":273},"      \u002F\u002F console.log(video.currentTime)",[204,92723,92724],{"class":273},"  \u002F\u002F获得当前的视频时间\n",[204,92726,92727],{"class":206,"line":16845},[204,92728,92729],{"class":273},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[204,92731,92732,92734,92736,92738,92741],{"class":206,"line":16850},[204,92733,74769],{"class":214},[204,92735,71740],{"class":2049},[204,92737,215],{"class":214},[204,92739,92740],{"class":319},"'currentTime'",[204,92742,92743],{"class":214},", video.currentTime)\n",[204,92745,92746,92748,92750],{"class":206,"line":16856},[204,92747,54621],{"class":214},[204,92749,6497],{"class":263},[204,92751,221],{"class":214},[204,92753,92754],{"class":206,"line":16870},[204,92755,92756],{"class":273},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[204,92758,92759,92762,92765,92767,92770,92772],{"class":206,"line":16883},[204,92760,92761],{"class":214},"    video.",[204,92763,92764],{"class":2049},"onloadeddata",[204,92766,13651],{"class":210},[204,92768,92769],{"class":214}," () ",[204,92771,84808],{"class":210},[204,92773,15659],{"class":214},[204,92775,92776],{"class":206,"line":16888},[204,92777,60098],{"class":273},[204,92779,92780],{"class":206,"line":16902},[204,92781,92782],{"class":273},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[204,92784,92785,92788,92790,92793,92795,92797,92799,92801,92803],{"class":206,"line":16907},[204,92786,92787],{"class":214},"      video.currentTime ",[204,92789,260],{"class":210},[204,92791,92792],{"class":214}," localStorage.",[204,92794,71771],{"class":2049},[204,92796,215],{"class":214},[204,92798,92740],{"class":319},[204,92800,13801],{"class":214},[204,92802,71443],{"class":210},[204,92804,47419],{"class":263},[204,92806,92807],{"class":206,"line":16913},[204,92808,2273],{"class":214},[204,92810,92811,92813,92815],{"class":206,"line":16918},[204,92812,52503],{"class":214},[204,92814,51899],{"class":51386},[204,92816,51393],{"class":214},[204,92818,92819,92821,92823],{"class":206,"line":16932},[204,92820,51871],{"class":214},[204,92822,51886],{"class":51386},[204,92824,51393],{"class":214},[204,92826,92827],{"class":206,"line":16937},[204,92828,2486],{"emptyLinePlaceholder":135},[204,92830,92831,92833,92835],{"class":206,"line":16942},[204,92832,51871],{"class":214},[204,92834,50721],{"class":51386},[204,92836,51393],{"class":214},[5213,92838,92839],{},"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":125,"searchDepth":126,"depth":126,"links":92841},[92842,92847,92851,92852,92853,92858,92863,92864,92865,92866,92873,92878,92879,92889,92893,92894,92898],{"id":76777,"depth":126,"text":76778,"children":92843},[92844,92845,92846],{"id":76781,"depth":131,"text":76782},{"id":76806,"depth":131,"text":76807},{"id":76818,"depth":131,"text":76819},{"id":76830,"depth":126,"text":76831,"children":92848},[92849,92850],{"id":76834,"depth":131,"text":76835},{"id":76849,"depth":131,"text":76850},{"id":76901,"depth":126,"text":76902},{"id":76945,"depth":126,"text":76946},{"id":76962,"depth":126,"text":76963,"children":92854},[92855,92856,92857],{"id":76966,"depth":131,"text":76967},{"id":76979,"depth":131,"text":76980},{"id":77084,"depth":131,"text":77085},{"id":77373,"depth":126,"text":77374,"children":92859},[92860,92861,92862],{"id":77377,"depth":131,"text":77378},{"id":77820,"depth":131,"text":77821},{"id":78231,"depth":131,"text":78232},{"id":78294,"depth":126,"text":78295},{"id":78373,"depth":126,"text":78374},{"id":78466,"depth":126,"text":78467},{"id":80311,"depth":126,"text":80312,"children":92867},[92868,92869,92870,92871,92872],{"id":80315,"depth":131,"text":80316},{"id":80327,"depth":131,"text":80328},{"id":80546,"depth":131,"text":80547},{"id":80564,"depth":131,"text":80565},{"id":80624,"depth":131,"text":80625},{"id":84892,"depth":126,"text":84893,"children":92874},[92875,92876,92877],{"id":84896,"depth":131,"text":84897},{"id":84914,"depth":131,"text":84915},{"id":84940,"depth":131,"text":84941},{"id":84949,"depth":126,"text":84950},{"id":84971,"depth":126,"text":84972,"children":92880},[92881,92882,92883,92884,92885,92886,92887,92888],{"id":84975,"depth":131,"text":84976},{"id":85236,"depth":131,"text":85237},{"id":85422,"depth":131,"text":85423},{"id":85789,"depth":131,"text":85790},{"id":85905,"depth":131,"text":85906},{"id":85941,"depth":131,"text":85942},{"id":85988,"depth":131,"text":85989},{"id":86022,"depth":131,"text":86023},{"id":87385,"depth":126,"text":87386,"children":92890},[92891,92892],{"id":87389,"depth":131,"text":87390},{"id":87426,"depth":131,"text":87427},{"id":88781,"depth":126,"text":88782},{"id":89152,"depth":126,"text":89153,"children":92895},[92896,92897],{"id":89156,"depth":131,"text":89157},{"id":89190,"depth":131,"text":89191},{"id":89919,"depth":126,"text":89920,"children":92899},[92900,92901,92902,92903],{"id":89923,"depth":131,"text":89924},{"id":90881,"depth":131,"text":90882},{"id":91823,"depth":131,"text":91824},{"id":91897,"depth":131,"text":91898},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76766,"description":132},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92910,"title":92911,"body":92912,"description":92923,"extension":133,"meta":92924,"navigation":135,"path":92926,"seo":92927,"stem":92928,"__hash__":92929},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92913,"toc":92921},[92914],[19,92915,92916,92917],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[62,92918,92919],{"href":92919,"rel":92920},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[66],{"title":125,"searchDepth":126,"depth":126,"links":92922},[],"三件套第三套学习",{"category":92925},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92911,"description":92923},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92931,"title":92932,"body":92933,"description":132,"extension":133,"meta":93038,"navigation":135,"path":93039,"seo":93040,"stem":93041,"__hash__":93042},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92934,"toc":93033},[92935,92942,92945,92948,92951,92955,92964,92967,92970,92974,92983,92986,92990,92993,93013,93016,93030],[19,92936,92937],{},[62,92938,92941],{"href":92939,"rel":92940},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[66],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92943,92932],{"id":92944},"_1安装",[19,92946,92947],{},"numpy是科学计算基础库,底层是C语言",[19,92949,92950],{},"三种方式：",[14,92952,92954],{"id":92953},"_11-通过pip安装","1.1 通过pip安装",[196,92956,92958],{"className":30464,"code":92957,"language":30466,"meta":125,"style":125},"pip install numpy\n",[81,92959,92960],{"__ignoreMap":125},[204,92961,92962],{"class":206,"line":207},[204,92963,92957],{"class":214},[19,92965,92966],{},"首选方式，自动处理依赖项",[19,92968,92969],{},"在提示系统命令符中使用cmd",[14,92971,92973],{"id":92972},"_12-通过anaconda安装","1.2 通过Anaconda安装",[196,92975,92977],{"className":30464,"code":92976,"language":30466,"meta":125,"style":125},"conda install numpy\n",[81,92978,92979],{"__ignoreMap":125},[204,92980,92981],{"class":206,"line":207},[204,92982,92976],{"class":214},[19,92984,92985],{},"自动解决环境依赖",[14,92987,92989],{"id":92988},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,92991,92992],{},"对于Debian\u002FUbuntu",[196,92994,92996],{"className":30464,"code":92995,"language":30466,"meta":125,"style":125},"sudo apt-get install python3-numpy\n",[81,92997,92998],{"__ignoreMap":125},[204,92999,93000,93003,93005,93008,93010],{"class":206,"line":207},[204,93001,93002],{"class":214},"sudo apt",[204,93004,745],{"class":210},[204,93006,93007],{"class":214},"get install python3",[204,93009,745],{"class":210},[204,93011,93012],{"class":214},"numpy\n",[19,93014,93015],{},"对于Fedora:",[196,93017,93019],{"className":30464,"code":93018,"language":30466,"meta":125,"style":125},"sudo dnf install python3-numpy\n",[81,93020,93021],{"__ignoreMap":125},[204,93022,93023,93026,93028],{"class":206,"line":207},[204,93024,93025],{"class":214},"sudo dnf install python3",[204,93027,745],{"class":210},[204,93029,93012],{"class":214},[5213,93031,93032],{},"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":125,"searchDepth":126,"depth":126,"links":93034},[93035,93036,93037],{"id":92953,"depth":126,"text":92954},{"id":92972,"depth":126,"text":92973},{"id":92988,"depth":126,"text":92989},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92932,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93044,"title":93045,"body":93046,"description":132,"extension":133,"meta":93159,"navigation":135,"path":93160,"seo":93161,"stem":93162,"__hash__":93163},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93047,"toc":93157},[93048,93051,93054,93057,93060,93063,93066,93069,93072,93075,93151,93154],[10,93049,93045],{"id":93050},"_10算数函数",[19,93052,93053],{},"加减乘除运算跟python基础语法没区别",[19,93055,93056],{},"除了python那种方法外还可以使用函数",[19,93058,93059],{},"加：np.add(a,b)",[19,93061,93062],{},"减：np.subtract(a,b)",[19,93064,93065],{},"乘：np.multiply(a,b)",[19,93067,93068],{},"除：np.divide(a,b) == a\u002Fb",[19,93070,93071],{},"取余：np.mod(a,b) == a%b",[19,93073,93074],{},"必须会的用法：",[196,93076,93078],{"className":30464,"code":93077,"language":30466,"meta":125,"style":125},"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",[81,93079,93080,93102,93123,93133,93146],{"__ignoreMap":125},[204,93081,93082,93084,93086,93089,93091,93094,93096,93098,93100],{"class":206,"line":207},[204,93083,62],{"class":214},[204,93085,260],{"class":210},[204,93087,93088],{"class":214},"np.arange(",[204,93090,633],{"class":263},[204,93092,93093],{"class":214},").reshape(",[204,93095,286],{"class":263},[204,93097,591],{"class":214},[204,93099,286],{"class":263},[204,93101,221],{"class":214},[204,93103,93104,93106,93108,93111,93113,93115,93117,93119,93121],{"class":206,"line":126},[204,93105,476],{"class":214},[204,93107,260],{"class":210},[204,93109,93110],{"class":214},"np.array([",[204,93112,659],{"class":263},[204,93114,591],{"class":214},[204,93116,659],{"class":263},[204,93118,591],{"class":214},[204,93120,659],{"class":263},[204,93122,4743],{"class":214},[204,93124,93125,93128,93130],{"class":206,"line":131},[204,93126,93127],{"class":214},"result",[204,93129,260],{"class":210},[204,93131,93132],{"class":214},"np.empty_like(a)\n",[204,93134,93135,93138,93141,93143],{"class":206,"line":1281},[204,93136,93137],{"class":214},"np.add(a,b,",[204,93139,93140],{"class":5303},"out",[204,93142,260],{"class":210},[204,93144,93145],{"class":214},"result)\n",[204,93147,93148],{"class":206,"line":1287},[204,93149,93150],{"class":214},"result\n",[19,93152,93153],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5213,93155,93156],{},"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":125,"searchDepth":126,"depth":126,"links":93158},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93045,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93165,"title":93166,"body":93167,"description":132,"extension":133,"meta":93929,"navigation":135,"path":93930,"seo":93931,"stem":93932,"__hash__":93933},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93168,"toc":93916},[93169,93172,93175,93178,93182,93221,93225,93269,93329,93333,93336,93375,93378,93423,93427,93463,93467,93536,93540,93604,93608,93611,93614,93617,93620,93656,93660,93700,93704,93776,93779,93783,93846,93850,93913],[10,93170,93166],{"id":93171},"_11统计函数",[19,93173,93174],{},"sum max min mean",[19,93176,93177],{},"这些有axis参数，可以指定方向",[14,93179,93181],{"id":93180},"_111-sum求和函数","11.1 sum()求和函数",[196,93183,93185],{"className":30464,"code":93184,"language":30466,"meta":125,"style":125},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[81,93186,93187,93192,93213],{"__ignoreMap":125},[204,93188,93189],{"class":206,"line":207},[204,93190,93191],{"class":273},"#创建一维数组\n",[204,93193,93194,93196,93198,93201,93203,93205,93207,93209,93211],{"class":206,"line":126},[204,93195,62],{"class":214},[204,93197,260],{"class":210},[204,93199,93200],{"class":214},"np.random.randint(",[204,93202,431],{"class":263},[204,93204,591],{"class":214},[204,93206,524],{"class":263},[204,93208,591],{"class":214},[204,93210,913],{"class":263},[204,93212,221],{"class":214},[204,93214,93215,93218],{"class":206,"line":131},[204,93216,93217],{"class":214},"np.sum(a)",[204,93219,93220],{"class":273},"#求和\n",[14,93222,93224],{"id":93223},"_112-max求最大值函数","11.2 max()求最大值函数",[196,93226,93228],{"className":30464,"code":93227,"language":30466,"meta":125,"style":125},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[81,93229,93230,93234,93254,93259,93264],{"__ignoreMap":125},[204,93231,93232],{"class":206,"line":207},[204,93233,93191],{"class":273},[204,93235,93236,93238,93240,93242,93244,93246,93248,93250,93252],{"class":206,"line":126},[204,93237,62],{"class":214},[204,93239,260],{"class":210},[204,93241,93200],{"class":214},[204,93243,431],{"class":263},[204,93245,591],{"class":214},[204,93247,524],{"class":263},[204,93249,591],{"class":214},[204,93251,913],{"class":263},[204,93253,221],{"class":214},[204,93255,93256],{"class":206,"line":131},[204,93257,93258],{"class":214},"np.max(a)\n",[204,93260,93261],{"class":206,"line":1281},[204,93262,93263],{"class":273},"#最大索引(求最大元素的索引)arg\n",[204,93265,93266],{"class":206,"line":1287},[204,93267,93268],{"class":214},"np.argmax(a)\n",[196,93270,93272],{"className":30464,"code":93271,"language":30466,"meta":125,"style":125},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[81,93273,93274,93295,93315,93319],{"__ignoreMap":125},[204,93275,93276,93278,93280,93283,93285,93287,93289,93291,93293],{"class":206,"line":207},[204,93277,11006],{"class":214},[204,93279,260],{"class":210},[204,93281,93282],{"class":214}," np.array([",[204,93284,431],{"class":263},[204,93286,12522],{"class":214},[204,93288,532],{"class":263},[204,93290,12522],{"class":214},[204,93292,286],{"class":263},[204,93294,4743],{"class":214},[204,93296,93297,93299,93301,93303,93305,93307,93309,93311,93313],{"class":206,"line":126},[204,93298,11032],{"class":214},[204,93300,260],{"class":210},[204,93302,93282],{"class":214},[204,93304,286],{"class":263},[204,93306,12522],{"class":214},[204,93308,292],{"class":263},[204,93310,12522],{"class":214},[204,93312,506],{"class":263},[204,93314,4743],{"class":214},[204,93316,93317],{"class":206,"line":131},[204,93318,2486],{"emptyLinePlaceholder":135},[204,93320,93321,93323,93326],{"class":206,"line":1281},[204,93322,30501],{"class":263},[204,93324,93325],{"class":214},"(np.maximum(a, b))   ",[204,93327,93328],{"class":273},"# [3 5 4]，每个位置上取较大值\n",[14,93330,93332],{"id":93331},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93334,93335],{},"①一维数组：",[196,93337,93339],{"className":30464,"code":93338,"language":30466,"meta":125,"style":125},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[81,93340,93341,93345,93365,93370],{"__ignoreMap":125},[204,93342,93343],{"class":206,"line":207},[204,93344,93191],{"class":273},[204,93346,93347,93349,93351,93353,93355,93357,93359,93361,93363],{"class":206,"line":126},[204,93348,62],{"class":214},[204,93350,260],{"class":210},[204,93352,93200],{"class":214},[204,93354,431],{"class":263},[204,93356,591],{"class":214},[204,93358,524],{"class":263},[204,93360,591],{"class":214},[204,93362,913],{"class":263},[204,93364,221],{"class":214},[204,93366,93367],{"class":206,"line":131},[204,93368,93369],{"class":273},"#求平均值\n",[204,93371,93372],{"class":206,"line":1281},[204,93373,93374],{"class":214},"np.mean(a)\n",[19,93376,93377],{},"②二维数组",[196,93379,93381],{"className":30464,"code":93380,"language":30466,"meta":125,"style":125},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[81,93382,93383,93388,93413,93418],{"__ignoreMap":125},[204,93384,93385],{"class":206,"line":207},[204,93386,93387],{"class":273},"#二维数组\n",[204,93389,93390,93393,93395,93397,93399,93401,93403,93405,93407,93409,93411],{"class":206,"line":126},[204,93391,93392],{"class":214},"aa",[204,93394,260],{"class":210},[204,93396,93088],{"class":214},[204,93398,431],{"class":263},[204,93400,591],{"class":214},[204,93402,736],{"class":263},[204,93404,93093],{"class":214},[204,93406,286],{"class":263},[204,93408,591],{"class":214},[204,93410,506],{"class":263},[204,93412,221],{"class":214},[204,93414,93415],{"class":206,"line":131},[204,93416,93417],{"class":273},"#对数组中的所有数求平均\n",[204,93419,93420],{"class":206,"line":1281},[204,93421,93422],{"class":214},"np.mean(aa)\n",[14,93424,93426],{"id":93425},"_114-median求中位数函数","11.4 median()求中位数函数",[196,93428,93430],{"className":30464,"code":93429,"language":30466,"meta":125,"style":125},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[81,93431,93432,93437,93453,93458],{"__ignoreMap":125},[204,93433,93434],{"class":206,"line":207},[204,93435,93436],{"class":273},"#求中位数\n",[204,93438,93439,93441,93443,93445,93447,93449,93451],{"class":206,"line":126},[204,93440,476],{"class":214},[204,93442,260],{"class":210},[204,93444,93088],{"class":214},[204,93446,431],{"class":263},[204,93448,591],{"class":214},[204,93450,659],{"class":263},[204,93452,221],{"class":214},[204,93454,93455],{"class":206,"line":131},[204,93456,93457],{"class":214},"np.median(b)\n",[204,93459,93460],{"class":206,"line":1281},[204,93461,93462],{"class":273},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93464,93466],{"id":93465},"_115-power求幂运算函数","11.5 power()求幂运算函数",[196,93468,93470],{"className":30464,"code":93469,"language":30466,"meta":125,"style":125},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[81,93471,93472,93488,93493,93498,93507,93512,93521],{"__ignoreMap":125},[204,93473,93474,93476,93478,93480,93482,93484,93486],{"class":206,"line":207},[204,93475,476],{"class":214},[204,93477,260],{"class":210},[204,93479,93088],{"class":214},[204,93481,431],{"class":263},[204,93483,591],{"class":214},[204,93485,659],{"class":263},[204,93487,221],{"class":214},[204,93489,93490],{"class":206,"line":126},[204,93491,93492],{"class":273},"#幂运算\n",[204,93494,93495],{"class":206,"line":131},[204,93496,93497],{"class":273},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[204,93499,93500,93503,93505],{"class":206,"line":1281},[204,93501,93502],{"class":214},"np.power(b,",[204,93504,292],{"class":263},[204,93506,221],{"class":214},[204,93508,93509],{"class":206,"line":1287},[204,93510,93511],{"class":273},"#或者以下代码，将数据存储起来\n",[204,93513,93514,93516,93518],{"class":206,"line":1301},[204,93515,1058],{"class":214},[204,93517,260],{"class":210},[204,93519,93520],{"class":214},"np.empty_like(b)\n",[204,93522,93523,93525,93527,93529,93531,93533],{"class":206,"line":1307},[204,93524,93502],{"class":214},[204,93526,292],{"class":263},[204,93528,591],{"class":214},[204,93530,93140],{"class":5303},[204,93532,260],{"class":210},[204,93534,93535],{"class":214},"y)\n",[14,93537,93539],{"id":93538},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[196,93541,93543],{"className":30464,"code":93542,"language":30466,"meta":125,"style":125},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[81,93544,93545,93561,93566,93571,93575,93593],{"__ignoreMap":125},[204,93546,93547,93549,93551,93553,93555,93557,93559],{"class":206,"line":207},[204,93548,476],{"class":214},[204,93550,260],{"class":210},[204,93552,93088],{"class":214},[204,93554,431],{"class":263},[204,93556,591],{"class":214},[204,93558,659],{"class":263},[204,93560,221],{"class":214},[204,93562,93563],{"class":206,"line":126},[204,93564,93565],{"class":273},"#开方\n",[204,93567,93568],{"class":206,"line":131},[204,93569,93570],{"class":214},"np.sqrt(b)\n",[204,93572,93573],{"class":206,"line":1281},[204,93574,93511],{"class":273},[204,93576,93577,93579,93581,93584,93587,93589,93591],{"class":206,"line":1287},[204,93578,1058],{"class":214},[204,93580,260],{"class":210},[204,93582,93583],{"class":214},"np.empty_like(b,",[204,93585,93586],{"class":5303},"dtype",[204,93588,260],{"class":210},[204,93590,254],{"class":263},[204,93592,221],{"class":214},[204,93594,93595,93598,93600,93602],{"class":206,"line":1301},[204,93596,93597],{"class":214},"np.sqrt(b,",[204,93599,93140],{"class":5303},[204,93601,260],{"class":210},[204,93603,93535],{"class":214},[14,93605,93607],{"id":93606},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93609,93610],{},"对数组中的元素累计求和，可指定轴",[19,93612,93613],{},"#累计求和的意思是：",[19,93615,93616],{},"a = np.array([1, 2, 3, 4])",[19,93618,93619],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[196,93621,93623],{"className":30464,"code":93622,"language":30466,"meta":125,"style":125},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[81,93624,93625,93641,93646,93651],{"__ignoreMap":125},[204,93626,93627,93629,93631,93633,93635,93637,93639],{"class":206,"line":207},[204,93628,476],{"class":214},[204,93630,260],{"class":210},[204,93632,93088],{"class":214},[204,93634,431],{"class":263},[204,93636,591],{"class":214},[204,93638,659],{"class":263},[204,93640,221],{"class":214},[204,93642,93643],{"class":206,"line":126},[204,93644,93645],{"class":214},"np.cumsum(b)\n",[204,93647,93648],{"class":206,"line":131},[204,93649,93650],{"class":273},"#结果：\n",[204,93652,93653],{"class":206,"line":1281},[204,93654,93655],{"class":273},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93657,93659],{"id":93658},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[196,93661,93663],{"className":30464,"code":93662,"language":30466,"meta":125,"style":125},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[81,93664,93665,93681,93686,93691,93695],{"__ignoreMap":125},[204,93666,93667,93669,93671,93673,93675,93677,93679],{"class":206,"line":207},[204,93668,476],{"class":214},[204,93670,260],{"class":210},[204,93672,93088],{"class":214},[204,93674,431],{"class":263},[204,93676,591],{"class":214},[204,93678,659],{"class":263},[204,93680,221],{"class":214},[204,93682,93683],{"class":206,"line":126},[204,93684,93685],{"class":273},"#对数组中的元素累计求积，可指定轴\n",[204,93687,93688],{"class":206,"line":131},[204,93689,93690],{"class":214},"np.cumprod(b)\n",[204,93692,93693],{"class":206,"line":1281},[204,93694,93650],{"class":273},[204,93696,93697],{"class":206,"line":1287},[204,93698,93699],{"class":273},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93701,93703],{"id":93702},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[196,93705,93707],{"className":30464,"code":93706,"language":30466,"meta":125,"style":125},"#删除数组中的重复数据，并对数据进行排序\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",[81,93708,93709,93714,93762,93767,93771],{"__ignoreMap":125},[204,93710,93711],{"class":206,"line":207},[204,93712,93713],{"class":273},"#删除数组中的重复数据，并对数据进行排序\n",[204,93715,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742,93744,93746,93748,93750,93752,93754,93756,93758,93760],{"class":206,"line":126},[204,93717,62],{"class":214},[204,93719,260],{"class":210},[204,93721,93110],{"class":214},[204,93723,431],{"class":263},[204,93725,591],{"class":214},[204,93727,292],{"class":263},[204,93729,591],{"class":214},[204,93731,286],{"class":263},[204,93733,591],{"class":214},[204,93735,711],{"class":263},[204,93737,591],{"class":214},[204,93739,286],{"class":263},[204,93741,591],{"class":214},[204,93743,659],{"class":263},[204,93745,591],{"class":214},[204,93747,411],{"class":263},[204,93749,591],{"class":214},[204,93751,405],{"class":263},[204,93753,591],{"class":214},[204,93755,988],{"class":263},[204,93757,591],{"class":214},[204,93759,506],{"class":263},[204,93761,4743],{"class":214},[204,93763,93764],{"class":206,"line":131},[204,93765,93766],{"class":214},"np.unique(a)\n",[204,93768,93769],{"class":206,"line":1281},[204,93770,93650],{"class":273},[204,93772,93773],{"class":206,"line":1287},[204,93774,93775],{"class":273},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93777,93778],{},"升序形式排序",[14,93780,93782],{"id":93781},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[196,93784,93786],{"className":30464,"code":93785,"language":30466,"meta":125,"style":125},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[81,93787,93788,93836,93841],{"__ignoreMap":125},[204,93789,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822,93824,93826,93828,93830,93832,93834],{"class":206,"line":207},[204,93791,62],{"class":214},[204,93793,260],{"class":210},[204,93795,93110],{"class":214},[204,93797,431],{"class":263},[204,93799,591],{"class":214},[204,93801,292],{"class":263},[204,93803,591],{"class":214},[204,93805,286],{"class":263},[204,93807,591],{"class":214},[204,93809,711],{"class":263},[204,93811,591],{"class":214},[204,93813,286],{"class":263},[204,93815,591],{"class":214},[204,93817,659],{"class":263},[204,93819,591],{"class":214},[204,93821,411],{"class":263},[204,93823,591],{"class":214},[204,93825,405],{"class":263},[204,93827,591],{"class":214},[204,93829,988],{"class":263},[204,93831,591],{"class":214},[204,93833,506],{"class":263},[204,93835,4743],{"class":214},[204,93837,93838],{"class":206,"line":126},[204,93839,93840],{"class":273},"#返回数组中非零元素的索引\n",[204,93842,93843],{"class":206,"line":131},[204,93844,93845],{"class":214},"np.nonzero(a)\n",[14,93847,93849],{"id":93848},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[196,93851,93853],{"className":30464,"code":93852,"language":30466,"meta":125,"style":125},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[81,93854,93855,93903,93908],{"__ignoreMap":125},[204,93856,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883,93885,93887,93889,93891,93893,93895,93897,93899,93901],{"class":206,"line":207},[204,93858,62],{"class":214},[204,93860,260],{"class":210},[204,93862,93110],{"class":214},[204,93864,431],{"class":263},[204,93866,591],{"class":214},[204,93868,292],{"class":263},[204,93870,591],{"class":214},[204,93872,286],{"class":263},[204,93874,591],{"class":214},[204,93876,711],{"class":263},[204,93878,591],{"class":214},[204,93880,286],{"class":263},[204,93882,591],{"class":214},[204,93884,659],{"class":263},[204,93886,591],{"class":214},[204,93888,411],{"class":263},[204,93890,591],{"class":214},[204,93892,405],{"class":263},[204,93894,591],{"class":214},[204,93896,988],{"class":263},[204,93898,591],{"class":214},[204,93900,506],{"class":263},[204,93902,4743],{"class":214},[204,93904,93905],{"class":206,"line":126},[204,93906,93907],{"class":273},"#计算一组数中最大值与最小值的差，可指定轴\n",[204,93909,93910],{"class":206,"line":131},[204,93911,93912],{"class":214},"np.ptp(a)\n",[5213,93914,93915],{},"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":125,"searchDepth":126,"depth":126,"links":93917},[93918,93919,93920,93921,93922,93923,93924,93925,93926,93927,93928],{"id":93180,"depth":126,"text":93181},{"id":93223,"depth":126,"text":93224},{"id":93331,"depth":126,"text":93332},{"id":93425,"depth":126,"text":93426},{"id":93465,"depth":126,"text":93466},{"id":93538,"depth":126,"text":93539},{"id":93606,"depth":126,"text":93607},{"id":93658,"depth":126,"text":93659},{"id":93702,"depth":126,"text":93703},{"id":93781,"depth":126,"text":93782},{"id":93848,"depth":126,"text":93849},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93166,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93935,"title":93936,"body":93937,"description":132,"extension":133,"meta":94592,"navigation":135,"path":94593,"seo":94594,"stem":94595,"__hash__":94596},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93938,"toc":94580},[93939,93942,93946,93949,94165,94169,94172,94381,94385,94451,94456,94460,94463,94466,94504,94508,94511,94516,94520,94523,94526,94531,94535,94538,94542,94545,94548,94553,94557,94560,94563,94568,94572,94577],[10,93940,93936],{"id":93941},"_12其他常用函数",[14,93943,93945],{"id":93944},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,93947,93948],{},"将数组的数据按照行列复制扩展",[196,93950,93952],{"className":30464,"code":93951,"language":30466,"meta":125,"style":125},"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",[81,93953,93954,93970,93979,93983,93988,93993,94006,94010,94015,94020,94025,94029,94034,94058,94070,94074,94078,94083,94088,94093,94098,94102,94115,94119,94123,94128,94133,94138,94143,94148,94152,94156,94161],{"__ignoreMap":125},[204,93955,93956,93958,93960,93962,93964,93966,93968],{"class":206,"line":207},[204,93957,62],{"class":214},[204,93959,260],{"class":210},[204,93961,93088],{"class":214},[204,93963,431],{"class":263},[204,93965,591],{"class":214},[204,93967,532],{"class":263},[204,93969,221],{"class":214},[204,93971,93972,93975,93977],{"class":206,"line":126},[204,93973,93974],{"class":214},"np.tile(a,",[204,93976,292],{"class":263},[204,93978,221],{"class":214},[204,93980,93981],{"class":206,"line":131},[204,93982,93650],{"class":273},[204,93984,93985],{"class":206,"line":1281},[204,93986,93987],{"class":273},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[204,93989,93990],{"class":206,"line":1287},[204,93991,93992],{"class":273},"#行复制两次，列复制三次\n",[204,93994,93995,93998,94000,94002,94004],{"class":206,"line":1301},[204,93996,93997],{"class":214},"np.tile(a,(",[204,93999,292],{"class":263},[204,94001,591],{"class":214},[204,94003,286],{"class":263},[204,94005,30583],{"class":214},[204,94007,94008],{"class":206,"line":1307},[204,94009,93650],{"class":273},[204,94011,94012],{"class":206,"line":1398},[204,94013,94014],{"class":319},"'''\n",[204,94016,94017],{"class":206,"line":1404},[204,94018,94019],{"class":319},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[204,94021,94022],{"class":206,"line":1416},[204,94023,94024],{"class":319},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[204,94026,94027],{"class":206,"line":1698},[204,94028,94014],{"class":319},[204,94030,94031],{"class":206,"line":1703},[204,94032,94033],{"class":273},"#创建二维数组\n",[204,94035,94036,94038,94040,94042,94044,94046,94048,94050,94052,94054,94056],{"class":206,"line":1709},[204,94037,93392],{"class":214},[204,94039,260],{"class":210},[204,94041,93088],{"class":214},[204,94043,431],{"class":263},[204,94045,591],{"class":214},[204,94047,736],{"class":263},[204,94049,93093],{"class":214},[204,94051,506],{"class":263},[204,94053,591],{"class":214},[204,94055,286],{"class":263},[204,94057,221],{"class":214},[204,94059,94060,94063,94065,94067],{"class":206,"line":1714},[204,94061,94062],{"class":214},"np.tile(aa,",[204,94064,292],{"class":263},[204,94066,642],{"class":214},[204,94068,94069],{"class":273},"#一个数的时候就是行\n",[204,94071,94072],{"class":206,"line":1728},[204,94073,93650],{"class":273},[204,94075,94076],{"class":206,"line":1733},[204,94077,94014],{"class":319},[204,94079,94080],{"class":206,"line":1739},[204,94081,94082],{"class":319},"array([[ 1,  2,  3,  1,  2,  3],\n",[204,94084,94085],{"class":206,"line":1760},[204,94086,94087],{"class":319},"       [ 4,  5,  6,  4,  5,  6],\n",[204,94089,94090],{"class":206,"line":1765},[204,94091,94092],{"class":319},"       [ 7,  8,  9,  7,  8,  9],\n",[204,94094,94095],{"class":206,"line":1779},[204,94096,94097],{"class":319},"       [10, 11, 12, 10, 11, 12]])\n",[204,94099,94100],{"class":206,"line":1784},[204,94101,94014],{"class":319},[204,94103,94104,94107,94109,94111,94113],{"class":206,"line":1813},[204,94105,94106],{"class":214},"np.tile(aa,(",[204,94108,292],{"class":263},[204,94110,591],{"class":214},[204,94112,286],{"class":263},[204,94114,30583],{"class":214},[204,94116,94117],{"class":206,"line":1818},[204,94118,93650],{"class":273},[204,94120,94121],{"class":206,"line":1835},[204,94122,94014],{"class":319},[204,94124,94125],{"class":206,"line":1840},[204,94126,94127],{"class":319},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[204,94129,94130],{"class":206,"line":1845},[204,94131,94132],{"class":319},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[204,94134,94135],{"class":206,"line":1850},[204,94136,94137],{"class":319},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[204,94139,94140],{"class":206,"line":1864},[204,94141,94142],{"class":319},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[204,94144,94145],{"class":206,"line":1869},[204,94146,94147],{"class":319},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[204,94149,94150],{"class":206,"line":2663},[204,94151,94132],{"class":319},[204,94153,94154],{"class":206,"line":2677},[204,94155,94137],{"class":319},[204,94157,94158],{"class":206,"line":2685},[204,94159,94160],{"class":319},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[204,94162,94163],{"class":206,"line":2690},[204,94164,94014],{"class":319},[14,94166,94168],{"id":94167},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94170,94171],{},"repeat()将数组中的每个元素重复若干次",[196,94173,94175],{"className":30464,"code":94174,"language":30466,"meta":125,"style":125},"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",[81,94176,94177,94193,94202,94206,94211,94235,94240,94249,94253,94258,94262,94267,94283,94287,94291,94296,94301,94306,94310,94315,94319,94324,94329,94333,94349,94353,94357,94362,94367,94372,94377],{"__ignoreMap":125},[204,94178,94179,94181,94183,94185,94187,94189,94191],{"class":206,"line":207},[204,94180,62],{"class":214},[204,94182,260],{"class":210},[204,94184,93088],{"class":214},[204,94186,431],{"class":263},[204,94188,591],{"class":214},[204,94190,532],{"class":263},[204,94192,221],{"class":214},[204,94194,94195,94198,94200],{"class":206,"line":126},[204,94196,94197],{"class":214},"np.repeat(a,",[204,94199,286],{"class":263},[204,94201,221],{"class":214},[204,94203,94204],{"class":206,"line":131},[204,94205,93650],{"class":273},[204,94207,94208],{"class":206,"line":1281},[204,94209,94210],{"class":273},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[204,94212,94213,94215,94217,94219,94221,94223,94225,94227,94229,94231,94233],{"class":206,"line":1287},[204,94214,93392],{"class":214},[204,94216,260],{"class":210},[204,94218,93088],{"class":214},[204,94220,431],{"class":263},[204,94222,591],{"class":214},[204,94224,736],{"class":263},[204,94226,93093],{"class":214},[204,94228,506],{"class":263},[204,94230,591],{"class":214},[204,94232,286],{"class":263},[204,94234,221],{"class":214},[204,94236,94237],{"class":206,"line":1301},[204,94238,94239],{"class":273},"#这个重复之后二维变成一维\n",[204,94241,94242,94245,94247],{"class":206,"line":1307},[204,94243,94244],{"class":214},"np.repeat(aa,",[204,94246,292],{"class":263},[204,94248,221],{"class":214},[204,94250,94251],{"class":206,"line":1398},[204,94252,94014],{"class":319},[204,94254,94255],{"class":206,"line":1404},[204,94256,94257],{"class":319},"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",[204,94259,94260],{"class":206,"line":1416},[204,94261,94014],{"class":319},[204,94263,94264],{"class":206,"line":1698},[204,94265,94266],{"class":273},"#指定axis\n",[204,94268,94269,94271,94273,94275,94277,94279,94281],{"class":206,"line":1703},[204,94270,94244],{"class":214},[204,94272,292],{"class":263},[204,94274,591],{"class":214},[204,94276,47600],{"class":5303},[204,94278,260],{"class":210},[204,94280,405],{"class":263},[204,94282,221],{"class":214},[204,94284,94285],{"class":206,"line":1709},[204,94286,93650],{"class":273},[204,94288,94289],{"class":206,"line":1714},[204,94290,94014],{"class":319},[204,94292,94293],{"class":206,"line":1728},[204,94294,94295],{"class":319},"array([[ 1,  2,  3],\n",[204,94297,94298],{"class":206,"line":1733},[204,94299,94300],{"class":319},"       [ 1,  2,  3],\n",[204,94302,94303],{"class":206,"line":1739},[204,94304,94305],{"class":319},"       [ 4,  5,  6],\n",[204,94307,94308],{"class":206,"line":1760},[204,94309,94305],{"class":319},[204,94311,94312],{"class":206,"line":1765},[204,94313,94314],{"class":319},"       [ 7,  8,  9],\n",[204,94316,94317],{"class":206,"line":1779},[204,94318,94314],{"class":319},[204,94320,94321],{"class":206,"line":1784},[204,94322,94323],{"class":319},"       [10, 11, 12],\n",[204,94325,94326],{"class":206,"line":1813},[204,94327,94328],{"class":319},"       [10, 11, 12]])\n",[204,94330,94331],{"class":206,"line":1818},[204,94332,94014],{"class":319},[204,94334,94335,94337,94339,94341,94343,94345,94347],{"class":206,"line":1835},[204,94336,94244],{"class":214},[204,94338,292],{"class":263},[204,94340,591],{"class":214},[204,94342,47600],{"class":5303},[204,94344,260],{"class":210},[204,94346,431],{"class":263},[204,94348,221],{"class":214},[204,94350,94351],{"class":206,"line":1840},[204,94352,93650],{"class":273},[204,94354,94355],{"class":206,"line":1845},[204,94356,94014],{"class":319},[204,94358,94359],{"class":206,"line":1850},[204,94360,94361],{"class":319},"array([[ 1,  1,  2,  2,  3,  3],\n",[204,94363,94364],{"class":206,"line":1864},[204,94365,94366],{"class":319},"       [ 4,  4,  5,  5,  6,  6],\n",[204,94368,94369],{"class":206,"line":1869},[204,94370,94371],{"class":319},"       [ 7,  7,  8,  8,  9,  9],\n",[204,94373,94374],{"class":206,"line":2663},[204,94375,94376],{"class":319},"       [10, 10, 11, 11, 12, 12]])\n",[204,94378,94379],{"class":206,"line":2677},[204,94380,94014],{"class":319},[14,94382,94384],{"id":94383},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[196,94386,94388],{"className":30464,"code":94387,"language":30466,"meta":125,"style":125},"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",[81,94389,94390,94406,94411,94423,94427,94432,94442,94446],{"__ignoreMap":125},[204,94391,94392,94394,94396,94398,94400,94402,94404],{"class":206,"line":207},[204,94393,62],{"class":214},[204,94395,260],{"class":210},[204,94397,93088],{"class":214},[204,94399,431],{"class":263},[204,94401,591],{"class":214},[204,94403,532],{"class":263},[204,94405,221],{"class":214},[204,94407,94408],{"class":206,"line":126},[204,94409,94410],{"class":273},"#array([，2，3，4])\n",[204,94412,94413,94416,94418,94420],{"class":206,"line":131},[204,94414,94415],{"class":214},"np.roll(a,",[204,94417,292],{"class":263},[204,94419,642],{"class":214},[204,94421,94422],{"class":273},"#传正数向后调多少位，传负数向前调多少位\n",[204,94424,94425],{"class":206,"line":1281},[204,94426,93650],{"class":273},[204,94428,94429],{"class":206,"line":1287},[204,94430,94431],{"class":273},"#array([3, 4, 1, 2])\n",[204,94433,94434,94436,94438,94440],{"class":206,"line":1301},[204,94435,94415],{"class":214},[204,94437,745],{"class":210},[204,94439,431],{"class":263},[204,94441,221],{"class":214},[204,94443,94444],{"class":206,"line":1307},[204,94445,93650],{"class":273},[204,94447,94448],{"class":206,"line":1398},[204,94449,94450],{"class":273},"#array([2, 3, 4, 1])\n",[19,94452,94453],{},[23,94454],{"alt":125,"src":94455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94457,94459],{"id":94458},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94461,94462],{},"resize()重新调整数组的大小",[19,94464,94465],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[196,94467,94469],{"className":30464,"code":94468,"language":30466,"meta":125,"style":125},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[81,94470,94471,94476,94489],{"__ignoreMap":125},[204,94472,94473],{"class":206,"line":207},[204,94474,94475],{"class":273},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[204,94477,94478,94481,94483,94485,94487],{"class":206,"line":126},[204,94479,94480],{"class":214},"np.resize(aa,(",[204,94482,292],{"class":263},[204,94484,591],{"class":214},[204,94486,557],{"class":263},[204,94488,30583],{"class":214},[204,94490,94491,94493,94495,94497,94499,94501],{"class":206,"line":131},[204,94492,94480],{"class":214},[204,94494,292],{"class":263},[204,94496,591],{"class":214},[204,94498,633],{"class":263},[204,94500,82857],{"class":214},[204,94502,94503],{"class":273},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94505,94507],{"id":94506},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94509,94510],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94512,94513],{},[23,94514],{"alt":125,"src":94515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94517,94519],{"id":94518},"_126-保存加载文件","12.6 保存加载文件",[19,94521,94522],{},"savetxt():将数据保存到txt文件中",[19,94524,94525],{},"loadtxt():从文件加载数据",[19,94527,94528],{},[23,94529],{"alt":125,"src":94530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94532,94534],{"id":94533},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94536,94537],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94539,94541],{"id":94540},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94543,94544],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94546,94547],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94549,94550],{},[23,94551],{"alt":125,"src":94552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94554,94556],{"id":94555},"_129-where语句","12.9 where语句",[19,94558,94559],{},"np.where(条件,x,y)",[19,94561,94562],{},"如果条件为True,对应值为x,否则对应值为y",[19,94564,94565],{},[23,94566],{"alt":125,"src":94567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94569,94571],{"id":94570},"_1210-dot矩阵","12.10 dot()矩阵",[19,94573,94574],{},[23,94575],{"alt":125,"src":94576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5213,94578,94579],{},"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":125,"searchDepth":126,"depth":126,"links":94581},[94582,94583,94584,94585,94586,94587,94588,94589,94590,94591],{"id":93944,"depth":126,"text":93945},{"id":94167,"depth":126,"text":94168},{"id":94383,"depth":126,"text":94384},{"id":94458,"depth":126,"text":94459},{"id":94506,"depth":126,"text":94507},{"id":94518,"depth":126,"text":94519},{"id":94533,"depth":126,"text":94534},{"id":94540,"depth":126,"text":94541},{"id":94555,"depth":126,"text":94556},{"id":94570,"depth":126,"text":94571},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93936,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94598,"title":94599,"body":94600,"description":132,"extension":133,"meta":94953,"navigation":135,"path":94954,"seo":94955,"stem":94956,"__hash__":94957},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94601,"toc":94951},[94602,94605,94608,94611,94614,94617,94682,94684,94948],[10,94603,94599],{"id":94604},"_13数组排序",[19,94606,94607],{},"排序主要用到的方法是np.sort和np.argsort",[19,94609,94610],{},"其中np.sort()对数组直接排序",[19,94612,94613],{},"而np.argsort()是返回排序后的原始索引",[19,94615,94616],{},"①一维数组",[196,94618,94620],{"className":30464,"code":94619,"language":30466,"meta":125,"style":125},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[81,94621,94622,94626,94666,94674],{"__ignoreMap":125},[204,94623,94624],{"class":206,"line":207},[204,94625,93191],{"class":273},[204,94627,94628,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648,94650,94652,94654,94656,94658,94660,94662,94664],{"class":206,"line":126},[204,94629,62],{"class":214},[204,94631,260],{"class":210},[204,94633,93110],{"class":214},[204,94635,286],{"class":263},[204,94637,591],{"class":214},[204,94639,711],{"class":263},[204,94641,591],{"class":214},[204,94643,608],{"class":263},[204,94645,591],{"class":214},[204,94647,988],{"class":263},[204,94649,591],{"class":214},[204,94651,492],{"class":263},[204,94653,591],{"class":214},[204,94655,1106],{"class":263},[204,94657,591],{"class":214},[204,94659,557],{"class":263},[204,94661,591],{"class":214},[204,94663,659],{"class":263},[204,94665,4743],{"class":214},[204,94667,94668,94671],{"class":206,"line":131},[204,94669,94670],{"class":214},"np.sort(a)",[204,94672,94673],{"class":273},"#升序排序\n",[204,94675,94676,94679],{"class":206,"line":1281},[204,94677,94678],{"class":214},"np.argsort(a)",[204,94680,94681],{"class":273},"#按照元素大小来索引排序\n",[19,94683,93377],{},[196,94685,94687],{"className":30464,"code":94686,"language":30466,"meta":125,"style":125},"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",[81,94688,94689,94701,94727,94732,94736,94741,94746,94751,94756,94760,94768,94772,94777,94782,94787,94792,94796,94801,94814,94818,94823,94828,94833,94838,94842,94847,94859,94863,94867,94871,94875,94879,94883,94888,94903,94908,94917,94922,94926,94930,94935,94939,94944],{"__ignoreMap":125},[204,94690,94691,94694,94696,94698],{"class":206,"line":207},[204,94692,94693],{"class":214},"np.random.seed(",[204,94695,405],{"class":263},[204,94697,642],{"class":214},[204,94699,94700],{"class":273},"#保证每次值一样\n",[204,94702,94703,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723,94725],{"class":206,"line":126},[204,94704,93392],{"class":214},[204,94706,260],{"class":210},[204,94708,93200],{"class":214},[204,94710,524],{"class":263},[204,94712,591],{"class":214},[204,94714,31582],{"class":5303},[204,94716,260],{"class":210},[204,94718,215],{"class":214},[204,94720,506],{"class":263},[204,94722,591],{"class":214},[204,94724,557],{"class":263},[204,94726,30583],{"class":214},[204,94728,94729],{"class":206,"line":131},[204,94730,94731],{"class":273},"#原数组：\n",[204,94733,94734],{"class":206,"line":1281},[204,94735,94014],{"class":319},[204,94737,94738],{"class":206,"line":1287},[204,94739,94740],{"class":319},"array([[44, 47, 64, 67, 67,  9],\n",[204,94742,94743],{"class":206,"line":1301},[204,94744,94745],{"class":319},"       [83, 21, 36, 87, 70, 88],\n",[204,94747,94748],{"class":206,"line":1307},[204,94749,94750],{"class":319},"       [88, 12, 58, 65, 39, 87],\n",[204,94752,94753],{"class":206,"line":1398},[204,94754,94755],{"class":319},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[204,94757,94758],{"class":206,"line":1404},[204,94759,94014],{"class":319},[204,94761,94762,94765],{"class":206,"line":1416},[204,94763,94764],{"class":214},"np.sort(aa)",[204,94766,94767],{"class":273},"#每行进行了排序\n",[204,94769,94770],{"class":206,"line":1698},[204,94771,94014],{"class":319},[204,94773,94774],{"class":206,"line":1703},[204,94775,94776],{"class":319},"array([[ 9, 44, 47, 64, 67, 67],\n",[204,94778,94779],{"class":206,"line":1709},[204,94780,94781],{"class":319},"       [21, 36, 70, 83, 87, 88],\n",[204,94783,94784],{"class":206,"line":1714},[204,94785,94786],{"class":319},"       [12, 39, 58, 65, 87, 88],\n",[204,94788,94789],{"class":206,"line":1728},[204,94790,94791],{"class":319},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[204,94793,94794],{"class":206,"line":1733},[204,94795,94014],{"class":319},[204,94797,94798],{"class":206,"line":1739},[204,94799,94800],{"class":273},"#axis=0时\n",[204,94802,94803,94806,94808,94810,94812],{"class":206,"line":1760},[204,94804,94805],{"class":214},"np.sort(aa,",[204,94807,47600],{"class":5303},[204,94809,260],{"class":210},[204,94811,405],{"class":263},[204,94813,221],{"class":214},[204,94815,94816],{"class":206,"line":1765},[204,94817,94014],{"class":319},[204,94819,94820],{"class":206,"line":1779},[204,94821,94822],{"class":319},"array([[44, 12, 36, 37, 25,  9],\n",[204,94824,94825],{"class":206,"line":1784},[204,94826,94827],{"class":319},"       [46, 21, 58, 65, 39, 77],\n",[204,94829,94830],{"class":206,"line":1813},[204,94831,94832],{"class":319},"       [83, 47, 64, 67, 67, 87],\n",[204,94834,94835],{"class":206,"line":1818},[204,94836,94837],{"class":319},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[204,94839,94840],{"class":206,"line":1835},[204,94841,94014],{"class":319},[204,94843,94844],{"class":206,"line":1840},[204,94845,94846],{"class":273},"#axis=1时,为默认值\n",[204,94848,94849,94851,94853,94855,94857],{"class":206,"line":1845},[204,94850,94805],{"class":214},[204,94852,47600],{"class":5303},[204,94854,260],{"class":210},[204,94856,431],{"class":263},[204,94858,221],{"class":214},[204,94860,94861],{"class":206,"line":1850},[204,94862,94014],{"class":319},[204,94864,94865],{"class":206,"line":1864},[204,94866,94776],{"class":319},[204,94868,94869],{"class":206,"line":1869},[204,94870,94781],{"class":319},[204,94872,94873],{"class":206,"line":2663},[204,94874,94786],{"class":319},[204,94876,94877],{"class":206,"line":2677},[204,94878,94791],{"class":319},[204,94880,94881],{"class":206,"line":2685},[204,94882,94014],{"class":319},[204,94884,94885],{"class":206,"line":2690},[204,94886,94887],{"class":273},"#按最后一列排序\n",[204,94889,94890,94892,94894,94897,94899,94901],{"class":206,"line":2696},[204,94891,476],{"class":214},[204,94893,260],{"class":210},[204,94895,94896],{"class":214},"aa[:,",[204,94898,745],{"class":210},[204,94900,431],{"class":263},[204,94902,33332],{"class":214},[204,94904,94905],{"class":206,"line":2702},[204,94906,94907],{"class":273},"#获取最后一列排好序的索引\n",[204,94909,94910,94912,94914],{"class":206,"line":2707},[204,94911,74144],{"class":214},[204,94913,260],{"class":210},[204,94915,94916],{"class":214},"np.argsort(b)\n",[204,94918,94919],{"class":206,"line":8035},[204,94920,94921],{"class":214},"aa[index]\n",[204,94923,94924],{"class":206,"line":8059},[204,94925,94014],{"class":319},[204,94927,94928],{"class":206,"line":8064},[204,94929,94740],{"class":319},[204,94931,94932],{"class":206,"line":8070},[204,94933,94934],{"class":319},"       [46, 88, 81, 37, 25, 77],\n",[204,94936,94937],{"class":206,"line":8097},[204,94938,94750],{"class":319},[204,94940,94941],{"class":206,"line":8102},[204,94942,94943],{"class":319},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[204,94945,94946],{"class":206,"line":8108},[204,94947,94014],{"class":319},[5213,94949,94950],{},"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":125,"searchDepth":126,"depth":126,"links":94952},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94599,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94959,"title":94960,"body":94961,"description":132,"extension":133,"meta":94991,"navigation":135,"path":94992,"seo":94993,"stem":94994,"__hash__":94995},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94962,"toc":94989},[94963,94966,94969,94972,94975,94978,94981,94984],[10,94964,94960],{"id":94965},"_14广播机制",[19,94967,94968],{},"广播的规则：",[19,94970,94971],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,94973,94974],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,94976,94977],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,94979,94980],{},"3.如果没有维度形状为1，则会引发异常",[19,94982,94983],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,94985,94986],{},[23,94987],{"alt":125,"src":94988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":125,"searchDepth":126,"depth":126,"links":94990},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94960,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94997,"title":94998,"body":94999,"description":132,"extension":133,"meta":95097,"navigation":135,"path":95098,"seo":95099,"stem":95100,"__hash__":95101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95000,"toc":95095},[95001,95004,95007,95092],[10,95002,94998],{"id":95003},"_15比较掩码",[19,95005,95006],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[196,95008,95010],{"className":30464,"code":95009,"language":30466,"meta":125,"style":125},"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",[81,95011,95012,95058,95069,95083,95087],{"__ignoreMap":125},[204,95013,95014,95016,95018,95021,95023,95025,95027,95029,95031,95033,95035,95037,95039,95041,95043,95045,95047,95049,95051,95053,95055],{"class":206,"line":207},[204,95015,62],{"class":214},[204,95017,260],{"class":210},[204,95019,95020],{"class":214},"np.array([[",[204,95022,431],{"class":263},[204,95024,591],{"class":214},[204,95026,292],{"class":263},[204,95028,591],{"class":214},[204,95030,286],{"class":263},[204,95032,48116],{"class":214},[204,95034,685],{"class":263},[204,95036,591],{"class":214},[204,95038,711],{"class":263},[204,95040,591],{"class":214},[204,95042,736],{"class":263},[204,95044,48116],{"class":214},[204,95046,938],{"class":263},[204,95048,591],{"class":214},[204,95050,963],{"class":263},[204,95052,591],{"class":214},[204,95054,988],{"class":263},[204,95056,95057],{"class":214},"]])\n",[204,95059,95060,95062,95064,95066],{"class":206,"line":126},[204,95061,62],{"class":214},[204,95063,1123],{"class":210},[204,95065,913],{"class":263},[204,95067,95068],{"class":273},"#结果是一个由True,False组成的数组\n",[204,95070,95071,95074,95076,95078,95080],{"class":206,"line":131},[204,95072,95073],{"class":214},"a[a",[204,95075,1123],{"class":210},[204,95077,913],{"class":263},[204,95079,1153],{"class":214},[204,95081,95082],{"class":273},"#小于20的元素会存到这个数组中\n",[204,95084,95085],{"class":206,"line":1281},[204,95086,93650],{"class":273},[204,95088,95089],{"class":206,"line":1287},[204,95090,95091],{"class":273},"#array([ 1,  2,  3, 11, 12, 13])\n",[5213,95093,95094],{},"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":125,"searchDepth":126,"depth":126,"links":95096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94998,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95103,"title":95104,"body":95105,"description":132,"extension":133,"meta":95197,"navigation":135,"path":95198,"seo":95199,"stem":95200,"__hash__":95201},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95106,"toc":95195},[95107,95110,95113,95116,95119,95122,95187,95192],[10,95108,95104],{"id":95109},"_16魔法命令time",[19,95111,95112],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95114,95115],{},"%:行模式",[19,95117,95118],{},"%%:单元格模式",[19,95120,95121],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[196,95123,95125],{"className":30464,"code":95124,"language":30466,"meta":125,"style":125},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[81,95126,95127,95132,95139,95144,95153,95166,95170,95178],{"__ignoreMap":125},[204,95128,95129],{"class":206,"line":207},[204,95130,95131],{"class":273},"#程序执行时间\n",[204,95133,95134,95136],{"class":206,"line":126},[204,95135,30478],{"class":210},[204,95137,95138],{"class":214}," time \n",[204,95140,95141],{"class":206,"line":131},[204,95142,95143],{"class":273},"#获取时间\n",[204,95145,95146,95149,95151],{"class":206,"line":1281},[204,95147,95148],{"class":214},"start",[204,95150,260],{"class":210},[204,95152,32504],{"class":214},[204,95154,95155,95158,95161,95163],{"class":206,"line":1287},[204,95156,95157],{"class":214},"time.sleep(",[204,95159,95160],{"class":263},"0.4",[204,95162,642],{"class":214},[204,95164,95165],{"class":273},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[204,95167,95168],{"class":206,"line":1301},[204,95169,95143],{"class":273},[204,95171,95172,95174,95176],{"class":206,"line":1307},[204,95173,45887],{"class":214},[204,95175,260],{"class":210},[204,95177,32504],{"class":214},[204,95179,95180,95182,95184],{"class":206,"line":1398},[204,95181,45887],{"class":214},[204,95183,745],{"class":210},[204,95185,95186],{"class":214},"start\n",[19,95188,95189],{},[23,95190],{"alt":125,"src":95191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5213,95193,95194],{},"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":125,"searchDepth":126,"depth":126,"links":95196},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95104,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95203,"title":95204,"body":95205,"description":132,"extension":133,"meta":95240,"navigation":135,"path":95241,"seo":95242,"stem":95243,"__hash__":95244},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95206,"toc":95238},[95207,95210,95213,95216,95219,95222,95225,95228,95233],[10,95208,95204],{"id":95209},"_17魔法命令timeit",[19,95211,95212],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95214,95215],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95217,95218],{},"单元格模式：",[19,95220,95221],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95223,95224],{},"初始化语句执行次数由轮数来决定",[19,95226,95227],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95229,95230],{},[23,95231],{"alt":125,"src":95232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95234,95235],{},[23,95236],{"alt":125,"src":95237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":125,"searchDepth":126,"depth":126,"links":95239},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95204,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95246,"title":95247,"body":95248,"description":132,"extension":133,"meta":95266,"navigation":135,"path":95267,"seo":95268,"stem":95269,"__hash__":95270},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95249,"toc":95264},[95250,95253,95256,95259],[10,95251,95247],{"id":95252},"_18魔法命令writefile和run",[19,95254,95255],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95257,95258],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95260,95261],{},[23,95262],{"alt":125,"src":95263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":125,"searchDepth":126,"depth":126,"links":95265},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95247,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95272,"title":95273,"body":95274,"description":132,"extension":133,"meta":95327,"navigation":135,"path":95328,"seo":95329,"stem":95330,"__hash__":95331},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95275,"toc":95325},[95276,95279,95282,95284,95287,95290,95295,95298,95301,95304,95307,95310,95313,95316,95319,95322],[10,95277,95273],{"id":95278},"_19魔法命令memit",[19,95280,95281],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95283,24686],{},[19,95285,95286],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95288,95289],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95291,95292],{},[23,95293],{"alt":125,"src":95294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95296,95297],{},"补充：",[19,95299,95300],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95302,95303],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95305,95306],{},"解决方法：",[19,95308,95309],{},"1.cmd",[19,95311,95312],{},"2.依次输入以下代码：",[19,95314,95315],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95317,95318],{},"pip install --upgrade ipython",[19,95320,95321],{},"#升级 memory_profiler 和 setuptools",[19,95323,95324],{},"pip install --upgrade memory_profiler setuptools",{"title":125,"searchDepth":126,"depth":126,"links":95326},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95273,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95333,"title":95334,"body":95335,"description":132,"extension":133,"meta":96981,"navigation":135,"path":96982,"seo":96983,"stem":96984,"__hash__":96985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95336,"toc":96951},[95337,95340,95344,95348,95409,95412,95417,95421,95426,95431,95436,95441,95444,95449,95453,95457,95490,95493,95496,95499,95551,95554,95590,95593,95635,95639,95660,95662,95699,95701,95706,95708,95713,95717,95720,95748,95752,95756,95809,95813,95905,95909,95913,95916,95921,95925,95950,95955,95959,95962,95965,95968,95971,95974,95977,95980,95992,95996,96000,96003,96035,96038,96061,96064,96090,96093,96119,96122,96156,96159,96221,96225,96228,96232,96235,96261,96264,96267,96272,96275,96344,96346,96351,96412,96415,96426,96432,96437,96441,96444,96457,96461,96476,96478,96501,96503,96529,96532,96535,96538,96586,96588,96593,96597,96601,96628,96632,96659,96662,96667,96672,96762,96766,96824,96829,96832,96835,96877,96881,96937,96942,96945,96948],[10,95338,95334],{"id":95339},"_2创建数组",[14,95341,95343],{"id":95342},"_21-array函数创建数组","2.1 array()函数创建数组",[49,95345,95347],{"id":95346},"_221-函数语句","2.2.1 函数语句",[196,95349,95351],{"className":30464,"code":95350,"language":30466,"meta":125,"style":125},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[81,95352,95353],{"__ignoreMap":125},[204,95354,95355,95358,95361,95363,95365,95367,95369,95371,95374,95376,95379,95381,95384,95386,95388,95390,95393,95395,95398,95400,95403,95405,95407],{"class":206,"line":207},[204,95356,95357],{"class":214},"numpy.array(",[204,95359,95360],{"class":263},"object",[204,95362,12522],{"class":214},[204,95364,93586],{"class":5303},[204,95366,13651],{"class":210},[204,95368,39019],{"class":263},[204,95370,12522],{"class":214},[204,95372,95373],{"class":5303},"copy",[204,95375,13651],{"class":210},[204,95377,95378],{"class":263}," True",[204,95380,12522],{"class":214},[204,95382,95383],{"class":5303},"order",[204,95385,13651],{"class":210},[204,95387,39019],{"class":263},[204,95389,12522],{"class":214},[204,95391,95392],{"class":5303},"subok",[204,95394,13651],{"class":210},[204,95396,95397],{"class":263}," False",[204,95399,12522],{"class":214},[204,95401,95402],{"class":5303},"ndmin",[204,95404,13651],{"class":210},[204,95406,4179],{"class":263},[204,95408,221],{"class":214},[19,95410,95411],{},"参数：",[19,95413,95414],{},[23,95415],{"alt":125,"src":95416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[49,95418,95420],{"id":95419},"_222-实例","2.2.2 实例",[19,95422,95423],{},[23,95424],{"alt":125,"src":95425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95427,95428],{},[23,95429],{"alt":125,"src":95430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95432,95433],{},[23,95434],{"alt":125,"src":95435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95437,95438],{},[23,95439],{"alt":125,"src":95440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95442,95443],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95445,95446],{},[23,95447],{"alt":125,"src":95448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95450,95452],{"id":95451},"_22-随机数创建数组","2.2 随机数创建数组",[49,95454,95456],{"id":95455},"_221-random语句","2.2.1 random语句",[196,95458,95460],{"className":30464,"code":95459,"language":30466,"meta":125,"style":125},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[81,95461,95462,95467,95472,95480,95485],{"__ignoreMap":125},[204,95463,95464],{"class":206,"line":207},[204,95465,95466],{"class":273},"#random.random()\n",[204,95468,95469],{"class":206,"line":126},[204,95470,95471],{"class":273},"#确定随机种子,就是每次运行结果是相同的\n",[204,95473,95474,95476,95478],{"class":206,"line":131},[204,95475,94693],{"class":214},[204,95477,405],{"class":263},[204,95479,221],{"class":214},[204,95481,95482],{"class":206,"line":1281},[204,95483,95484],{"class":214},"np.random.random()\n",[204,95486,95487],{"class":206,"line":1287},[204,95488,95489],{"class":273},"#生成一个随机的数目\n",[19,95491,95492],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95494,95495],{},"可以指定数组形状 size",[19,95497,95498],{},"①生成一维数组",[196,95500,95502],{"className":30464,"code":95501,"language":30466,"meta":125,"style":125},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[81,95503,95504,95509,95522,95527,95543],{"__ignoreMap":125},[204,95505,95506],{"class":206,"line":207},[204,95507,95508],{"class":273},"#random.random(size())\n",[204,95510,95511,95514,95516,95518,95520],{"class":206,"line":126},[204,95512,95513],{"class":214},"np.random.random(",[204,95515,31582],{"class":5303},[204,95517,260],{"class":210},[204,95519,532],{"class":263},[204,95521,221],{"class":214},[204,95523,95524],{"class":206,"line":131},[204,95525,95526],{"class":273},"#生成一位的五个元素\n",[204,95528,95529,95531,95533,95535,95537,95539,95541],{"class":206,"line":1281},[204,95530,62],{"class":214},[204,95532,260],{"class":210},[204,95534,95513],{"class":214},[204,95536,31582],{"class":5303},[204,95538,260],{"class":210},[204,95540,506],{"class":263},[204,95542,221],{"class":214},[204,95544,95545,95548],{"class":206,"line":1287},[204,95546,95547],{"class":214},"a.shape ",[204,95549,95550],{"class":273},"#输出数组形状\n",[19,95552,95553],{},"②生成二维数组",[196,95555,95557],{"className":30464,"code":95556,"language":30466,"meta":125,"style":125},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[81,95558,95559,95563,95585],{"__ignoreMap":125},[204,95560,95561],{"class":206,"line":207},[204,95562,93387],{"class":273},[204,95564,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583],{"class":206,"line":126},[204,95566,93392],{"class":214},[204,95568,260],{"class":210},[204,95570,95513],{"class":214},[204,95572,31582],{"class":5303},[204,95574,260],{"class":210},[204,95576,215],{"class":214},[204,95578,506],{"class":263},[204,95580,591],{"class":214},[204,95582,532],{"class":263},[204,95584,30583],{"class":214},[204,95586,95587],{"class":206,"line":131},[204,95588,95589],{"class":273},"#生成四行五列的数组\n",[19,95591,95592],{},"③生成三维数组",[196,95594,95596],{"className":30464,"code":95595,"language":30466,"meta":125,"style":125},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[81,95597,95598,95603,95630],{"__ignoreMap":125},[204,95599,95600],{"class":206,"line":207},[204,95601,95602],{"class":273},"#三维数组\n",[204,95604,95605,95608,95610,95612,95614,95616,95618,95620,95622,95624,95626,95628],{"class":206,"line":126},[204,95606,95607],{"class":214},"aaa",[204,95609,260],{"class":210},[204,95611,95513],{"class":214},[204,95613,31582],{"class":5303},[204,95615,260],{"class":210},[204,95617,215],{"class":214},[204,95619,292],{"class":263},[204,95621,591],{"class":214},[204,95623,286],{"class":263},[204,95625,591],{"class":214},[204,95627,506],{"class":263},[204,95629,30583],{"class":214},[204,95631,95632],{"class":206,"line":131},[204,95633,95634],{"class":214},"aaa.shape\n",[49,95636,95638],{"id":95637},"_222-randint语句","2.2.2 randint语句",[196,95640,95642],{"className":30464,"code":95641,"language":30466,"meta":125,"style":125},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[81,95643,95644,95649],{"__ignoreMap":125},[204,95645,95646],{"class":206,"line":207},[204,95647,95648],{"class":273},"#生成随机的整数 random.randint(low,high,size)\n",[204,95650,95651,95653,95655,95657],{"class":206,"line":126},[204,95652,93200],{"class":214},[204,95654,532],{"class":263},[204,95656,13801],{"class":214},[204,95658,95659],{"class":273},"#0~5中的随机一个数\n",[19,95661,95498],{},[196,95663,95665],{"className":30464,"code":95664,"language":30466,"meta":125,"style":125},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[81,95666,95667,95672,95694],{"__ignoreMap":125},[204,95668,95669],{"class":206,"line":207},[204,95670,95671],{"class":273},"#一维\n",[204,95673,95674,95676,95678,95680,95682,95684,95686,95688,95690,95692],{"class":206,"line":126},[204,95675,93200],{"class":214},[204,95677,431],{"class":263},[204,95679,591],{"class":214},[204,95681,685],{"class":263},[204,95683,591],{"class":214},[204,95685,31582],{"class":5303},[204,95687,260],{"class":210},[204,95689,215],{"class":214},[204,95691,659],{"class":263},[204,95693,30583],{"class":214},[204,95695,95696],{"class":206,"line":131},[204,95697,95698],{"class":273},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95700,95553],{},[19,95702,95703],{},[23,95704],{"alt":125,"src":95705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95707,95592],{},[19,95709,95710],{},[23,95711],{"alt":125,"src":95712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[49,95714,95716],{"id":95715},"_222-rand语句","2.2.2 rand语句",[19,95718,95719],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[196,95721,95723],{"className":30464,"code":95722,"language":30466,"meta":125,"style":125},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[81,95724,95725,95738,95743],{"__ignoreMap":125},[204,95726,95727,95730,95732,95734,95736],{"class":206,"line":207},[204,95728,95729],{"class":214},"np.random.rand(",[204,95731,524],{"class":263},[204,95733,591],{"class":214},[204,95735,659],{"class":263},[204,95737,221],{"class":214},[204,95739,95740],{"class":206,"line":126},[204,95741,95742],{"class":273},"#第一个参数100：行数，表示有100个样本\n",[204,95744,95745],{"class":206,"line":131},[204,95746,95747],{"class":273},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95749,95751],{"id":95750},"_23-arange创建数组","2.3 arange()创建数组",[49,95753,95755],{"id":95754},"_231-函数语句","2.3.1 函数语句",[196,95757,95759],{"className":30464,"code":95758,"language":30466,"meta":125,"style":125},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[81,95760,95761,95775,95780,95785,95790,95795,95800,95805],{"__ignoreMap":125},[204,95762,95763,95766,95768,95770,95773],{"class":206,"line":207},[204,95764,95765],{"class":214},"numpy.arange([start,] stop[, step], ",[204,95767,93586],{"class":5303},[204,95769,260],{"class":210},[204,95771,95772],{"class":263},"None",[204,95774,221],{"class":214},[204,95776,95777],{"class":206,"line":126},[204,95778,95779],{"class":273},"#参数\n",[204,95781,95782],{"class":206,"line":131},[204,95783,95784],{"class":319},"\"\"\"\n",[204,95786,95787],{"class":206,"line":1281},[204,95788,95789],{"class":319},"start:起始值，可选，默认从 0 开始。\n",[204,95791,95792],{"class":206,"line":1287},[204,95793,95794],{"class":319},"stop:结束值（不包含该值）。\n",[204,95796,95797],{"class":206,"line":1301},[204,95798,95799],{"class":319},"step:步长，可选，默认是 1。可以为浮点数。\n",[204,95801,95802],{"class":206,"line":1307},[204,95803,95804],{"class":319},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[204,95806,95807],{"class":206,"line":1398},[204,95808,95784],{"class":319},[49,95810,95812],{"id":95811},"_232-实例","2.3.2 实例",[196,95814,95816],{"className":30464,"code":95815,"language":30466,"meta":125,"style":125},"#创建一维数组\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",[81,95817,95818,95822,95846,95851,95856,95860,95883,95887,95891,95896,95901],{"__ignoreMap":125},[204,95819,95820],{"class":206,"line":207},[204,95821,93191],{"class":273},[204,95823,95824,95826,95828,95830,95832,95834,95836,95838,95840,95842,95844],{"class":206,"line":126},[204,95825,93088],{"class":214},[204,95827,431],{"class":263},[204,95829,591],{"class":214},[204,95831,938],{"class":263},[204,95833,591],{"class":214},[204,95835,431],{"class":263},[204,95837,591],{"class":214},[204,95839,93586],{"class":5303},[204,95841,260],{"class":210},[204,95843,218],{"class":263},[204,95845,221],{"class":214},[204,95847,95848],{"class":206,"line":131},[204,95849,95850],{"class":273},"#输出结果：\n",[204,95852,95853],{"class":206,"line":1281},[204,95854,95855],{"class":273},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[204,95857,95858],{"class":206,"line":1287},[204,95859,94033],{"class":273},[204,95861,95862,95865,95867,95869,95871,95874,95876,95878,95880],{"class":206,"line":1301},[204,95863,95864],{"class":214},"np.array([np.arange(",[204,95866,431],{"class":263},[204,95868,591],{"class":214},[204,95870,506],{"class":263},[204,95872,95873],{"class":214},"),np.arange(",[204,95875,506],{"class":263},[204,95877,591],{"class":214},[204,95879,582],{"class":263},[204,95881,95882],{"class":214},")])\n",[204,95884,95885],{"class":206,"line":1307},[204,95886,93650],{"class":273},[204,95888,95889],{"class":206,"line":1398},[204,95890,95784],{"class":319},[204,95892,95893],{"class":206,"line":1404},[204,95894,95895],{"class":319},"array([[1, 2, 3],\n",[204,95897,95898],{"class":206,"line":1416},[204,95899,95900],{"class":319},"       [4, 5, 6]])\n",[204,95902,95903],{"class":206,"line":1698},[204,95904,95784],{"class":319},[14,95906,95908],{"id":95907},"_24-生态分布","2.4 生态分布",[49,95910,95912],{"id":95911},"_241-标准正态分布","2.4.1 标准正态分布",[19,95914,95915],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95917,95918],{},[23,95919],{"alt":125,"src":95920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[49,95922,95924],{"id":95923},"_242-常规正态分布","2.4.2 常规正态分布",[196,95926,95928],{"className":30464,"code":95927,"language":30466,"meta":125,"style":125},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[81,95929,95930,95935,95940,95945],{"__ignoreMap":125},[204,95931,95932],{"class":206,"line":207},[204,95933,95934],{"class":214},"random.normal(loc,scale,size)也可以生成正态分布\n",[204,95936,95937],{"class":206,"line":126},[204,95938,95939],{"class":273},"#loc:期望\n",[204,95941,95942],{"class":206,"line":131},[204,95943,95944],{"class":273},"#scale:方差\n",[204,95946,95947],{"class":206,"line":1281},[204,95948,95949],{"class":273},"#size:用于确定是几维的数列\n",[19,95951,95952],{},[23,95953],{"alt":125,"src":95954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,95956,95958],{"id":95957},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,95960,95961],{},"ndim:秩，维度个数",[19,95963,95964],{},"size:数组元素的个数",[19,95966,95967],{},"shape:数组的形状",[19,95969,95970],{},"dtype:数组元素的类型",[19,95972,95973],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,95975,95976],{},"他们都是属性，通过数组.属性的形式来确定",[19,95978,95979],{},"如果需要输出多个可以通过以下方式：",[196,95981,95983],{"className":30464,"code":95982,"language":30466,"meta":125,"style":125},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[81,95984,95985],{"__ignoreMap":125},[204,95986,95987,95989],{"class":206,"line":207},[204,95988,30501],{"class":263},[204,95990,95991],{"class":214},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,95993,95995],{"id":95994},"_26-其他方式创建数组","2.6 其他方式创建数组",[49,95997,95999],{"id":95998},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96001,96002],{},"①创建一维数组",[196,96004,96006],{"className":30464,"code":96005,"language":30466,"meta":125,"style":125},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[81,96007,96008,96017,96021,96026,96031],{"__ignoreMap":125},[204,96009,96010,96013,96015],{"class":206,"line":207},[204,96011,96012],{"class":214},"np.zeros(",[204,96014,659],{"class":263},[204,96016,221],{"class":214},[204,96018,96019],{"class":206,"line":126},[204,96020,95784],{"class":319},[204,96022,96023],{"class":206,"line":131},[204,96024,96025],{"class":319},"输出结果：\n",[204,96027,96028],{"class":206,"line":1281},[204,96029,96030],{"class":319},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[204,96032,96033],{"class":206,"line":1287},[204,96034,95784],{"class":319},[19,96036,96037],{},"上方代码等价于：",[196,96039,96041],{"className":30464,"code":96040,"language":30466,"meta":125,"style":125},"np.zeros(shape=(10))#创建10个元素的0数组\n",[81,96042,96043],{"__ignoreMap":125},[204,96044,96045,96047,96050,96052,96054,96056,96058],{"class":206,"line":207},[204,96046,96012],{"class":214},[204,96048,96049],{"class":5303},"shape",[204,96051,260],{"class":210},[204,96053,215],{"class":214},[204,96055,659],{"class":263},[204,96057,82857],{"class":214},[204,96059,96060],{"class":273},"#创建10个元素的0数组\n",[19,96062,96063],{},"也可以指定类型",[196,96065,96067],{"className":30464,"code":96066,"language":30466,"meta":125,"style":125},"#指定类型\nnp.zeros(5,dtype=int)\n",[81,96068,96069,96074],{"__ignoreMap":125},[204,96070,96071],{"class":206,"line":207},[204,96072,96073],{"class":273},"#指定类型\n",[204,96075,96076,96078,96080,96082,96084,96086,96088],{"class":206,"line":126},[204,96077,96012],{"class":214},[204,96079,532],{"class":263},[204,96081,591],{"class":214},[204,96083,93586],{"class":5303},[204,96085,260],{"class":210},[204,96087,218],{"class":263},[204,96089,221],{"class":214},[19,96091,96092],{},"②创建二维数组",[196,96094,96096],{"className":30464,"code":96095,"language":30466,"meta":125,"style":125},"np.zeros((3,4),dtype=int)\n",[81,96097,96098],{"__ignoreMap":125},[204,96099,96100,96103,96105,96107,96109,96111,96113,96115,96117],{"class":206,"line":207},[204,96101,96102],{"class":214},"np.zeros((",[204,96104,286],{"class":263},[204,96106,591],{"class":214},[204,96108,506],{"class":263},[204,96110,42342],{"class":214},[204,96112,93586],{"class":5303},[204,96114,260],{"class":210},[204,96116,218],{"class":263},[204,96118,221],{"class":214},[19,96120,96121],{},"③创建三维数组",[196,96123,96125],{"className":30464,"code":96124,"language":30466,"meta":125,"style":125},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[81,96126,96127,96132],{"__ignoreMap":125},[204,96128,96129],{"class":206,"line":207},[204,96130,96131],{"class":273},"#创建三维数组\n",[204,96133,96134,96136,96138,96140,96142,96144,96146,96148,96150,96152,96154],{"class":206,"line":126},[204,96135,96102],{"class":214},[204,96137,286],{"class":263},[204,96139,591],{"class":214},[204,96141,506],{"class":263},[204,96143,591],{"class":214},[204,96145,532],{"class":263},[204,96147,42342],{"class":214},[204,96149,93586],{"class":5303},[204,96151,260],{"class":210},[204,96153,218],{"class":263},[204,96155,221],{"class":214},[19,96157,96158],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[196,96160,96162],{"className":30464,"code":96161,"language":30466,"meta":125,"style":125},"#使用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",[81,96163,96164,96169,96184,96189,96194,96216],{"__ignoreMap":125},[204,96165,96166],{"class":206,"line":207},[204,96167,96168],{"class":273},"#使用zeros_like将创建的一维数组变成全0的数组\n",[204,96170,96171,96173,96175,96177,96179,96181],{"class":206,"line":126},[204,96172,62],{"class":214},[204,96174,260],{"class":210},[204,96176,93088],{"class":214},[204,96178,506],{"class":263},[204,96180,642],{"class":214},[204,96182,96183],{"class":273},"#这个得到的结果：一维数组0，1，2，3\n",[204,96185,96186],{"class":206,"line":131},[204,96187,96188],{"class":214},"np.zeros_like(a)\n",[204,96190,96191],{"class":206,"line":1281},[204,96192,96193],{"class":273},"#使用zeros_like将创建的二维数组变成全0的数组\n",[204,96195,96196,96198,96200,96202,96204,96206,96208,96210,96212,96214],{"class":206,"line":1287},[204,96197,93392],{"class":214},[204,96199,260],{"class":210},[204,96201,95513],{"class":214},[204,96203,31582],{"class":5303},[204,96205,260],{"class":210},[204,96207,215],{"class":214},[204,96209,506],{"class":263},[204,96211,591],{"class":214},[204,96213,532],{"class":263},[204,96215,30583],{"class":214},[204,96217,96218],{"class":206,"line":1301},[204,96219,96220],{"class":214},"np.zeros_like(aa)\n",[49,96222,96224],{"id":96223},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96226,96227],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[49,96229,96231],{"id":96230},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96233,96234],{},"①empty()用法",[196,96236,96238],{"className":30464,"code":96237,"language":30466,"meta":125,"style":125},"numpy.empty(shape,dtype=float,order='c')\n",[81,96239,96240],{"__ignoreMap":125},[204,96241,96242,96245,96247,96249,96251,96253,96255,96257,96259],{"class":206,"line":207},[204,96243,96244],{"class":214},"numpy.empty(shape,",[204,96246,93586],{"class":5303},[204,96248,260],{"class":210},[204,96250,254],{"class":263},[204,96252,591],{"class":214},[204,96254,95383],{"class":5303},[204,96256,260],{"class":210},[204,96258,76114],{"class":319},[204,96260,221],{"class":214},[19,96262,96263],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96265,96266],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96268,96269],{},[23,96270],{"alt":125,"src":96271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96273,96274],{},"②empty()用法",[196,96276,96278],{"className":30464,"code":96277,"language":30466,"meta":125,"style":125},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[81,96279,96280,96301,96313,96334,96339],{"__ignoreMap":125},[204,96281,96282,96284,96286,96289,96291,96293,96295,96297,96299],{"class":206,"line":207},[204,96283,1058],{"class":214},[204,96285,260],{"class":210},[204,96287,96288],{"class":214},"np.empty(",[204,96290,659],{"class":263},[204,96292,591],{"class":214},[204,96294,93586],{"class":5303},[204,96296,260],{"class":210},[204,96298,218],{"class":263},[204,96300,221],{"class":214},[204,96302,96303,96305,96307,96309,96311],{"class":206,"line":126},[204,96304,1033],{"class":214},[204,96306,260],{"class":210},[204,96308,93088],{"class":214},[204,96310,532],{"class":263},[204,96312,221],{"class":214},[204,96314,96315,96318,96320,96323,96325,96327,96330,96332],{"class":206,"line":131},[204,96316,96317],{"class":214},"np.add(",[204,96319,292],{"class":263},[204,96321,96322],{"class":214},",x,",[204,96324,93140],{"class":5303},[204,96326,260],{"class":210},[204,96328,96329],{"class":214},"y[:",[204,96331,532],{"class":263},[204,96333,4743],{"class":214},[204,96335,96336],{"class":206,"line":1281},[204,96337,96338],{"class":273},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[204,96340,96341],{"class":206,"line":1287},[204,96342,96343],{"class":214},"y\n",[19,96345,11601],{},[19,96347,96348],{},[23,96349],{"alt":125,"src":96350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[196,96352,96354],{"className":30464,"code":96353,"language":30466,"meta":125,"style":125},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[81,96355,96356,96372,96392,96407],{"__ignoreMap":125},[204,96357,96358,96360,96362,96364,96366,96368,96370],{"class":206,"line":207},[204,96359,1033],{"class":214},[204,96361,260],{"class":210},[204,96363,93088],{"class":214},[204,96365,431],{"class":263},[204,96367,591],{"class":214},[204,96369,557],{"class":263},[204,96371,221],{"class":214},[204,96373,96374,96376,96378,96380,96382,96384,96386,96388,96390],{"class":206,"line":126},[204,96375,1058],{"class":214},[204,96377,260],{"class":210},[204,96379,96288],{"class":214},[204,96381,532],{"class":263},[204,96383,591],{"class":214},[204,96385,93586],{"class":5303},[204,96387,260],{"class":210},[204,96389,218],{"class":263},[204,96391,221],{"class":214},[204,96393,96394,96397,96399,96401,96403,96405],{"class":206,"line":131},[204,96395,96396],{"class":214},"np.add(x,",[204,96398,292],{"class":263},[204,96400,591],{"class":214},[204,96402,93140],{"class":5303},[204,96404,260],{"class":210},[204,96406,93535],{"class":214},[204,96408,96409],{"class":206,"line":1281},[204,96410,96411],{"class":273},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96413,96414],{},"③empty_like()",[19,96416,96417],{},[30,96418,96419,96420,96425],{},"创建一个",[30,96421,96422],{},[30,96423,96424],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96427,96428,96431],{},[81,96429,96430],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96433,96434],{},[23,96435],{"alt":125,"src":96436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[49,96438,96440],{"id":96439},"_264-用法","2.6.4 ？？用法",[19,96442,96443],{},"当想查看一个函数的参数时，可以通过？？来实现",[196,96445,96447],{"className":30464,"code":96446,"language":30466,"meta":125,"style":125},"np.full??\n",[81,96448,96449],{"__ignoreMap":125},[204,96450,96451,96454],{"class":206,"line":207},[204,96452,96453],{"class":214},"np.full",[204,96455,96456],{"class":77489},"??\n",[49,96458,96460],{"id":96459},"_265-full创建数组","2.6.5 full()创建数组",[196,96462,96464],{"className":30464,"code":96463,"language":30466,"meta":125,"style":125},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[81,96465,96466,96471],{"__ignoreMap":125},[204,96467,96468],{"class":206,"line":207},[204,96469,96470],{"class":214},"full(shape,fill_value)\n",[204,96472,96473],{"class":206,"line":126},[204,96474,96475],{"class":214},"创建全为某个指定值的数组\n",[19,96477,94616],{},[196,96479,96481],{"className":30464,"code":96480,"language":30466,"meta":125,"style":125},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[81,96482,96483,96488],{"__ignoreMap":125},[204,96484,96485],{"class":206,"line":207},[204,96486,96487],{"class":273},"#创建一个一维数组,以20进行填充\n",[204,96489,96490,96493,96495,96497,96499],{"class":206,"line":126},[204,96491,96492],{"class":214},"np.full(",[204,96494,659],{"class":263},[204,96496,591],{"class":214},[204,96498,913],{"class":263},[204,96500,221],{"class":214},[19,96502,93377],{},[196,96504,96506],{"className":30464,"code":96505,"language":30466,"meta":125,"style":125},"#创建二维数组\nnp.full((3,5),11)\n",[81,96507,96508,96512],{"__ignoreMap":125},[204,96509,96510],{"class":206,"line":207},[204,96511,94033],{"class":273},[204,96513,96514,96517,96519,96521,96523,96525,96527],{"class":206,"line":126},[204,96515,96516],{"class":214},"np.full((",[204,96518,286],{"class":263},[204,96520,591],{"class":214},[204,96522,532],{"class":263},[204,96524,42342],{"class":214},[204,96526,685],{"class":263},[204,96528,221],{"class":214},[19,96530,96531],{},"③full_like用法",[19,96533,96534],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96536,96537],{},"这里是指定填充而已",[196,96539,96541],{"className":30464,"code":96540,"language":30466,"meta":125,"style":125},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[81,96542,96543,96548,96572,96577],{"__ignoreMap":125},[204,96544,96545],{"class":206,"line":207},[204,96546,96547],{"class":273},"#创建一个指定形状数组\n",[204,96549,96550,96552,96554,96556,96558,96560,96562,96564,96566,96568,96570],{"class":206,"line":126},[204,96551,62],{"class":214},[204,96553,260],{"class":210},[204,96555,93088],{"class":214},[204,96557,431],{"class":263},[204,96559,591],{"class":214},[204,96561,538],{"class":263},[204,96563,93093],{"class":214},[204,96565,506],{"class":263},[204,96567,591],{"class":214},[204,96569,633],{"class":263},[204,96571,221],{"class":214},[204,96573,96574],{"class":206,"line":131},[204,96575,96576],{"class":273},"#进行指定填充\n",[204,96578,96579,96582,96584],{"class":206,"line":1281},[204,96580,96581],{"class":214},"np.full_like(a,",[204,96583,659],{"class":263},[204,96585,221],{"class":214},[19,96587,11601],{},[19,96589,96590],{},[23,96591],{"alt":125,"src":96592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[49,96594,96596],{"id":96595},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22085,96598,96600],{"id":96599},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[196,96602,96604],{"className":30464,"code":96603,"language":30466,"meta":125,"style":125},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[81,96605,96606,96623],{"__ignoreMap":125},[204,96607,96608,96611,96613,96615,96617,96619,96621],{"class":206,"line":207},[204,96609,96610],{"class":214},"np.eye(",[204,96612,506],{"class":263},[204,96614,591],{"class":214},[204,96616,93586],{"class":5303},[204,96618,260],{"class":210},[204,96620,218],{"class":263},[204,96622,221],{"class":214},[204,96624,96625],{"class":206,"line":126},[204,96626,96627],{"class":273},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22085,96629,96631],{"id":96630},"_2662-法2identity","2.6.6.2 法2：identity()",[196,96633,96635],{"className":30464,"code":96634,"language":30466,"meta":125,"style":125},"#identity()\nnp.identity(5,dtype=int)\n",[81,96636,96637,96642],{"__ignoreMap":125},[204,96638,96639],{"class":206,"line":207},[204,96640,96641],{"class":273},"#identity()\n",[204,96643,96644,96647,96649,96651,96653,96655,96657],{"class":206,"line":126},[204,96645,96646],{"class":214},"np.identity(",[204,96648,532],{"class":263},[204,96650,591],{"class":214},[204,96652,93586],{"class":5303},[204,96654,260],{"class":210},[204,96656,218],{"class":263},[204,96658,221],{"class":214},[19,96660,96661],{},"两个函数是有区别的",[19,96663,96664],{},[23,96665],{"alt":125,"src":96666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96668,96669],{},[23,96670],{"alt":125,"src":96671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[196,96673,96675],{"className":30464,"code":96674,"language":30466,"meta":125,"style":125},"# 创建一个 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",[81,96676,96677,96682,96694,96699,96704,96709,96714,96718,96723,96743,96747,96752,96757],{"__ignoreMap":125},[204,96678,96679],{"class":206,"line":207},[204,96680,96681],{"class":273},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[204,96683,96684,96686,96688,96690,96692],{"class":206,"line":126},[204,96685,96610],{"class":214},[204,96687,286],{"class":263},[204,96689,12522],{"class":214},[204,96691,506],{"class":263},[204,96693,221],{"class":214},[204,96695,96696],{"class":206,"line":131},[204,96697,96698],{"class":273},"# 输出:\n",[204,96700,96701],{"class":206,"line":1281},[204,96702,96703],{"class":273},"# [[1. 0. 0. 0.]\n",[204,96705,96706],{"class":206,"line":1287},[204,96707,96708],{"class":273},"#  [0. 1. 0. 0.]\n",[204,96710,96711],{"class":206,"line":1301},[204,96712,96713],{"class":273},"#  [0. 0. 1. 0.]]\n",[204,96715,96716],{"class":206,"line":1307},[204,96717,2486],{"emptyLinePlaceholder":135},[204,96719,96720],{"class":206,"line":1398},[204,96721,96722],{"class":273},"# 对角线向上偏移1\n",[204,96724,96725,96727,96729,96731,96733,96735,96737,96739,96741],{"class":206,"line":1404},[204,96726,96610],{"class":214},[204,96728,286],{"class":263},[204,96730,12522],{"class":214},[204,96732,506],{"class":263},[204,96734,12522],{"class":214},[204,96736,706],{"class":5303},[204,96738,260],{"class":210},[204,96740,431],{"class":263},[204,96742,221],{"class":214},[204,96744,96745],{"class":206,"line":1416},[204,96746,96698],{"class":273},[204,96748,96749],{"class":206,"line":1698},[204,96750,96751],{"class":273},"# [[0. 1. 0. 0.]\n",[204,96753,96754],{"class":206,"line":1703},[204,96755,96756],{"class":273},"#  [0. 0. 1. 0.]\n",[204,96758,96759],{"class":206,"line":1709},[204,96760,96761],{"class":273},"#  [0. 0. 0. 1.]]\n",[49,96763,96765],{"id":96764},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[196,96767,96769],{"className":30464,"code":96768,"language":30466,"meta":125,"style":125},"#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",[81,96770,96771,96776,96780,96785,96790,96795,96800,96805,96810,96815,96820],{"__ignoreMap":125},[204,96772,96773],{"class":206,"line":207},[204,96774,96775],{"class":273},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[204,96777,96778],{"class":206,"line":126},[204,96779,95784],{"class":319},[204,96781,96782],{"class":206,"line":131},[204,96783,96784],{"class":319},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[204,96786,96787],{"class":206,"line":1281},[204,96788,96789],{"class":319},"参数介绍：\n",[204,96791,96792],{"class":206,"line":1287},[204,96793,96794],{"class":319},"start：序列的起始值\n",[204,96796,96797],{"class":206,"line":1301},[204,96798,96799],{"class":319},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[204,96801,96802],{"class":206,"line":1307},[204,96803,96804],{"class":319},"num：要生长的等步长的样本数量，默认为50\n",[204,96806,96807],{"class":206,"line":1398},[204,96808,96809],{"class":319},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[204,96811,96812],{"class":206,"line":1404},[204,96813,96814],{"class":319},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[204,96816,96817],{"class":206,"line":1416},[204,96818,96819],{"class":319},"dtype：ndarry的数据类型\n",[204,96821,96822],{"class":206,"line":1698},[204,96823,95784],{"class":319},[19,96825,96826],{},[23,96827],{"alt":125,"src":96828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96830,96831],{},"这里num=是可以省略的",[19,96833,96834],{},"也就是下方两行代码结果是一模一样的",[196,96836,96838],{"className":30464,"code":96837,"language":30466,"meta":125,"style":125},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[81,96839,96840,96857],{"__ignoreMap":125},[204,96841,96842,96845,96847,96849,96851,96853,96855],{"class":206,"line":207},[204,96843,96844],{"class":214},"np.linspace(",[204,96846,431],{"class":263},[204,96848,591],{"class":214},[204,96850,532],{"class":263},[204,96852,591],{"class":214},[204,96854,532],{"class":263},[204,96856,221],{"class":214},[204,96858,96859,96861,96863,96865,96867,96869,96871,96873,96875],{"class":206,"line":126},[204,96860,96844],{"class":214},[204,96862,431],{"class":263},[204,96864,591],{"class":214},[204,96866,532],{"class":263},[204,96868,591],{"class":214},[204,96870,1751],{"class":5303},[204,96872,260],{"class":210},[204,96874,532],{"class":263},[204,96876,221],{"class":214},[49,96878,96880],{"id":96879},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[196,96882,96884],{"className":30464,"code":96883,"language":30466,"meta":125,"style":125},"#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",[81,96885,96886,96891,96895,96900,96905,96910,96915,96919,96924,96929,96933],{"__ignoreMap":125},[204,96887,96888],{"class":206,"line":207},[204,96889,96890],{"class":273},"#logspace函数用于创建一个等比数列，格式如下：\n",[204,96892,96893],{"class":206,"line":126},[204,96894,95784],{"class":319},[204,96896,96897],{"class":206,"line":131},[204,96898,96899],{"class":319},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[204,96901,96902],{"class":206,"line":1281},[204,96903,96904],{"class":319},"参数为：\n",[204,96906,96907],{"class":206,"line":1287},[204,96908,96909],{"class":319},"start:序列的起始位置为：base**start\n",[204,96911,96912],{"class":206,"line":1301},[204,96913,96914],{"class":319},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[204,96916,96917],{"class":206,"line":1307},[204,96918,96804],{"class":319},[204,96920,96921],{"class":206,"line":1398},[204,96922,96923],{"class":319},"endpoint：是否包含 stop 这个值，默认是 True\n",[204,96925,96926],{"class":206,"line":1404},[204,96927,96928],{"class":319},"base：对数的底数，默认是 10（常见对数）\n",[204,96930,96931],{"class":206,"line":1416},[204,96932,96819],{"class":319},[204,96934,96935],{"class":206,"line":1698},[204,96936,95784],{"class":319},[19,96938,96939],{},[23,96940],{"alt":125,"src":96941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,96943,96944],{},"logspace()函数中的num参数也是可以不写num=的",[19,96946,96947],{},"endpoint是不可以省略的",[5213,96949,96950],{},"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":125,"searchDepth":126,"depth":126,"links":96952},[96953,96957,96962,96966,96970,96971],{"id":95342,"depth":126,"text":95343,"children":96954},[96955,96956],{"id":95346,"depth":131,"text":95347},{"id":95419,"depth":131,"text":95420},{"id":95451,"depth":126,"text":95452,"children":96958},[96959,96960,96961],{"id":95455,"depth":131,"text":95456},{"id":95637,"depth":131,"text":95638},{"id":95715,"depth":131,"text":95716},{"id":95750,"depth":126,"text":95751,"children":96963},[96964,96965],{"id":95754,"depth":131,"text":95755},{"id":95811,"depth":131,"text":95812},{"id":95907,"depth":126,"text":95908,"children":96967},[96968,96969],{"id":95911,"depth":131,"text":95912},{"id":95923,"depth":131,"text":95924},{"id":95957,"depth":126,"text":95958},{"id":95994,"depth":126,"text":95995,"children":96972},[96973,96974,96975,96976,96977,96978,96979,96980],{"id":95998,"depth":131,"text":95999},{"id":96223,"depth":131,"text":96224},{"id":96230,"depth":131,"text":96231},{"id":96439,"depth":131,"text":96440},{"id":96459,"depth":131,"text":96460},{"id":96595,"depth":131,"text":96596},{"id":96764,"depth":131,"text":96765},{"id":96879,"depth":131,"text":96880},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95334,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96987,"title":96988,"body":96989,"description":132,"extension":133,"meta":97082,"navigation":135,"path":97083,"seo":97084,"stem":97085,"__hash__":97086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96990,"toc":97080},[96991,96994,96997,97000,97003,97006,97009,97012,97015,97018,97021,97024,97026,97029,97032,97037,97040,97043,97077],[10,96992,96988],{"id":96993},"_20魔法命令mprun",[19,96995,96996],{},"逐行分析数据内存的使用情况",[19,96998,96999],{},"语法格式：",[19,97001,97002],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97004,97005],{},"分析结果列如下：",[19,97007,97008],{},"Line行号",[19,97010,97011],{},"Mem usage内存使用大小",[19,97013,97014],{},"increment内存增量",[19,97016,97017],{},"Line content代码内容",[19,97019,97020],{},"补充说明：",[19,97022,97023],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97025,95289],{},[19,97027,97028],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97030,97031],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97033,97034],{},[23,97035],{"alt":125,"src":97036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97038,97039],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97041,97042],{},"这时候需要重新加载模块",[196,97044,97046],{"className":30464,"code":97045,"language":30466,"meta":125,"style":125},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[81,97047,97048,97053,97060,97065],{"__ignoreMap":125},[204,97049,97050],{"class":206,"line":207},[204,97051,97052],{"class":273},"#重新加载模块\n",[204,97054,97055,97057],{"class":206,"line":126},[204,97056,30478],{"class":210},[204,97058,97059],{"class":214}," importlib\n",[204,97061,97062],{"class":206,"line":131},[204,97063,97064],{"class":214},"importlib.reload(mprun_test)\n",[204,97066,97067,97069,97072,97074],{"class":206,"line":1281},[204,97068,541],{"class":210},[204,97070,97071],{"class":214},"mprun ",[204,97073,745],{"class":210},[204,97075,97076],{"class":214},"f mprun_test.fun_test mprun_test.fun_test()\n",[5213,97078,97079],{},"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":125,"searchDepth":126,"depth":126,"links":97081},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96988,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97088,"title":97089,"body":97090,"description":132,"extension":133,"meta":97107,"navigation":135,"path":97108,"seo":97109,"stem":97110,"__hash__":97111},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97091,"toc":97105},[97092,97095,97100],[10,97093,97089],{"id":97094},"_3一维数组的索引和切片",[19,97096,97097],{},[23,97098],{"alt":125,"src":97099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97101,97102],{},[23,97103],{"alt":125,"src":97104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":125,"searchDepth":126,"depth":126,"links":97106},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97089,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97113,"title":97114,"body":97115,"description":132,"extension":133,"meta":97598,"navigation":135,"path":97599,"seo":97600,"stem":97601,"__hash__":97602},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97116,"toc":97596},[97117,97120,97123,97128,97161,97164,97202,97205,97239,97242,97347,97350,97387,97390,97491,97494,97545,97548,97590,97593],[10,97118,97114],{"id":97119},"_4二维数组的索引与切片",[19,97121,97122],{},"①获取指定单个元素",[19,97124,97125],{},[23,97126],{"alt":125,"src":97127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[196,97129,97131],{"className":30464,"code":97130,"language":30466,"meta":125,"style":125},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[81,97132,97133,97138,97143,97148],{"__ignoreMap":125},[204,97134,97135],{"class":206,"line":207},[204,97136,97137],{"class":273},"#获取元素9\n",[204,97139,97140],{"class":206,"line":126},[204,97141,97142],{"class":273},"#先获取所在行，再获取所在列\n",[204,97144,97145],{"class":206,"line":131},[204,97146,97147],{"class":273},"#数组[行索引号，列索引号]\n",[204,97149,97150,97153,97155,97157,97159],{"class":206,"line":1281},[204,97151,97152],{"class":214},"a[",[204,97154,431],{"class":263},[204,97156,591],{"class":214},[204,97158,292],{"class":263},[204,97160,33332],{"class":214},[19,97162,97163],{},"②获取整行元素",[196,97165,97167],{"className":30464,"code":97166,"language":30466,"meta":125,"style":125},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[81,97168,97169,97174,97179,97187,97192],{"__ignoreMap":125},[204,97170,97171],{"class":206,"line":207},[204,97172,97173],{"class":273},"#获取整行 数组[行索引号]\n",[204,97175,97176],{"class":206,"line":126},[204,97177,97178],{"class":273},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[204,97180,97181,97183,97185],{"class":206,"line":131},[204,97182,97152],{"class":214},[204,97184,292],{"class":263},[204,97186,33332],{"class":214},[204,97188,97189],{"class":206,"line":1281},[204,97190,97191],{"class":273},"#也可以负索引获取一行\n",[204,97193,97194,97196,97198,97200],{"class":206,"line":1287},[204,97195,97152],{"class":214},[204,97197,745],{"class":210},[204,97199,431],{"class":263},[204,97201,33332],{"class":214},[19,97203,97204],{},"③获取整列元素",[196,97206,97208],{"className":30464,"code":97207,"language":30466,"meta":125,"style":125},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[81,97209,97210,97215,97224,97229],{"__ignoreMap":125},[204,97211,97212],{"class":206,"line":207},[204,97213,97214],{"class":273},"#获取整列 数组名[:,列索引]\n",[204,97216,97217,97220,97222],{"class":206,"line":126},[204,97218,97219],{"class":214},"a[:,",[204,97221,292],{"class":263},[204,97223,33332],{"class":214},[204,97225,97226],{"class":206,"line":131},[204,97227,97228],{"class":273},"#也可以负索引获取一列\n",[204,97230,97231,97233,97235,97237],{"class":206,"line":1281},[204,97232,97219],{"class":214},[204,97234,745],{"class":210},[204,97236,431],{"class":263},[204,97238,33332],{"class":214},[19,97240,97241],{},"④部分行部分列的元素",[196,97243,97245],{"className":30464,"code":97244,"language":30466,"meta":125,"style":125},"#部分行部分列 数组名[行切片，列切片]\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",[81,97246,97247,97252,97262,97266,97270,97275,97280,97284,97296,97300,97304,97309,97314,97319,97324,97328,97333],{"__ignoreMap":125},[204,97248,97249],{"class":206,"line":207},[204,97250,97251],{"class":273},"#部分行部分列 数组名[行切片，列切片]\n",[204,97253,97254,97257,97259],{"class":206,"line":126},[204,97255,97256],{"class":214},"a[:",[204,97258,292],{"class":263},[204,97260,97261],{"class":214},",:]\n",[204,97263,97264],{"class":206,"line":131},[204,97265,93650],{"class":273},[204,97267,97268],{"class":206,"line":1281},[204,97269,94014],{"class":319},[204,97271,97272],{"class":206,"line":1287},[204,97273,97274],{"class":319},"array([[ 1,  2,  3,  4,  5,  6],\n",[204,97276,97277],{"class":206,"line":1301},[204,97278,97279],{"class":319},"       [ 7,  8,  9, 10, 11, 12]])\n",[204,97281,97282],{"class":206,"line":1307},[204,97283,94014],{"class":319},[204,97285,97286,97288,97290,97292,97294],{"class":206,"line":1398},[204,97287,97219],{"class":214},[204,97289,431],{"class":263},[204,97291,1072],{"class":214},[204,97293,506],{"class":263},[204,97295,33332],{"class":214},[204,97297,97298],{"class":206,"line":1404},[204,97299,93650],{"class":273},[204,97301,97302],{"class":206,"line":1416},[204,97303,94014],{"class":319},[204,97305,97306],{"class":206,"line":1698},[204,97307,97308],{"class":319},"array([[ 2,  3,  4],\n",[204,97310,97311],{"class":206,"line":1703},[204,97312,97313],{"class":319},"       [ 8,  9, 10],\n",[204,97315,97316],{"class":206,"line":1709},[204,97317,97318],{"class":319},"       [14, 15, 16],\n",[204,97320,97321],{"class":206,"line":1714},[204,97322,97323],{"class":319},"       [20, 21, 22]])\n",[204,97325,97326],{"class":206,"line":1728},[204,97327,94014],{"class":319},[204,97329,97330],{"class":206,"line":1733},[204,97331,97332],{"class":273},"#对列行同时进行切片，使用了step参数\n",[204,97334,97335,97338,97340,97343,97345],{"class":206,"line":1739},[204,97336,97337],{"class":214},"a[::",[204,97339,292],{"class":263},[204,97341,97342],{"class":214},",::",[204,97344,292],{"class":263},[204,97346,33332],{"class":214},[19,97348,97349],{},"⑤同时获取两个元素",[196,97351,97353],{"className":30464,"code":97352,"language":30466,"meta":125,"style":125},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[81,97354,97355,97360,97365],{"__ignoreMap":125},[204,97356,97357],{"class":206,"line":207},[204,97358,97359],{"class":273},"#同时获取第三行第二列，第四行第一列\n",[204,97361,97362],{"class":206,"line":126},[204,97363,97364],{"class":273},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[204,97366,97367,97370,97372,97374,97376,97378,97380,97382,97384],{"class":206,"line":131},[204,97368,97369],{"class":214},"a[(",[204,97371,292],{"class":263},[204,97373,591],{"class":214},[204,97375,286],{"class":263},[204,97377,42333],{"class":214},[204,97379,431],{"class":263},[204,97381,591],{"class":214},[204,97383,405],{"class":263},[204,97385,97386],{"class":214},")]\n",[19,97388,97389],{},"⑥切片，对行进行反向获取",[196,97391,97393],{"className":30464,"code":97392,"language":30466,"meta":125,"style":125},"#切片 对所有行进行反向获取\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",[81,97394,97395,97400,97410,97414,97418,97423,97428,97433,97438,97442,97447,97463,97467,97472,97477,97482,97487],{"__ignoreMap":125},[204,97396,97397],{"class":206,"line":207},[204,97398,97399],{"class":273},"#切片 对所有行进行反向获取\n",[204,97401,97402,97404,97406,97408],{"class":206,"line":126},[204,97403,97337],{"class":214},[204,97405,745],{"class":210},[204,97407,431],{"class":263},[204,97409,33332],{"class":214},[204,97411,97412],{"class":206,"line":131},[204,97413,93650],{"class":273},[204,97415,97416],{"class":206,"line":1281},[204,97417,94014],{"class":319},[204,97419,97420],{"class":206,"line":1287},[204,97421,97422],{"class":319},"array([[19, 20, 21, 22, 23, 24],\n",[204,97424,97425],{"class":206,"line":1301},[204,97426,97427],{"class":319},"       [13, 14, 15, 16, 17, 18],\n",[204,97429,97430],{"class":206,"line":1307},[204,97431,97432],{"class":319},"       [ 7,  8,  9, 10, 11, 12],\n",[204,97434,97435],{"class":206,"line":1398},[204,97436,97437],{"class":319},"       [ 1,  2,  3,  4,  5,  6]])\n",[204,97439,97440],{"class":206,"line":1404},[204,97441,94014],{"class":319},[204,97443,97444],{"class":206,"line":1416},[204,97445,97446],{"class":273},"#对行列都进行反向切片获取\n",[204,97448,97449,97451,97453,97455,97457,97459,97461],{"class":206,"line":1698},[204,97450,97337],{"class":214},[204,97452,745],{"class":210},[204,97454,431],{"class":263},[204,97456,97342],{"class":214},[204,97458,745],{"class":210},[204,97460,431],{"class":263},[204,97462,33332],{"class":214},[204,97464,97465],{"class":206,"line":1703},[204,97466,94014],{"class":319},[204,97468,97469],{"class":206,"line":1709},[204,97470,97471],{"class":319},"array([[24, 23, 22, 21, 20, 19],\n",[204,97473,97474],{"class":206,"line":1714},[204,97475,97476],{"class":319},"       [18, 17, 16, 15, 14, 13],\n",[204,97478,97479],{"class":206,"line":1728},[204,97480,97481],{"class":319},"       [12, 11, 10,  9,  8,  7],\n",[204,97483,97484],{"class":206,"line":1733},[204,97485,97486],{"class":319},"       [ 6,  5,  4,  3,  2,  1]])\n",[204,97488,97489],{"class":206,"line":1739},[204,97490,94014],{"class":319},[19,97492,97493],{},"⑦修改元素",[196,97495,97497],{"className":30464,"code":97496,"language":30466,"meta":125,"style":125},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[81,97498,97499,97504,97522,97527],{"__ignoreMap":125},[204,97500,97501],{"class":206,"line":207},[204,97502,97503],{"class":273},"#获取前两行和前两列\n",[204,97505,97506,97509,97511,97513,97515,97518,97520],{"class":206,"line":126},[204,97507,97508],{"class":214},"sub_a",[204,97510,260],{"class":210},[204,97512,97256],{"class":214},[204,97514,292],{"class":263},[204,97516,97517],{"class":214},",:",[204,97519,292],{"class":263},[204,97521,33332],{"class":214},[204,97523,97524],{"class":206,"line":131},[204,97525,97526],{"class":273},"#修改sub_a第一个元素的值\n",[204,97528,97529,97532,97534,97536,97538,97540,97542],{"class":206,"line":1281},[204,97530,97531],{"class":214},"sub_a[",[204,97533,405],{"class":263},[204,97535,591],{"class":214},[204,97537,405],{"class":263},[204,97539,1153],{"class":214},[204,97541,260],{"class":210},[204,97543,97544],{"class":263},"100\n",[19,97546,97547],{},"⑧数组复制copy()",[196,97549,97551],{"className":30464,"code":97550,"language":30466,"meta":125,"style":125},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[81,97552,97553,97558,97568,97573],{"__ignoreMap":125},[204,97554,97555],{"class":206,"line":207},[204,97556,97557],{"class":273},"#数组复制\n",[204,97559,97560,97563,97565],{"class":206,"line":126},[204,97561,97562],{"class":214},"copy_a",[204,97564,260],{"class":210},[204,97566,97567],{"class":214},"np.copy(sub_a)\n",[204,97569,97570],{"class":206,"line":131},[204,97571,97572],{"class":273},"#修改copy_a后不影响原数组\n",[204,97574,97575,97578,97580,97582,97584,97586,97588],{"class":206,"line":1281},[204,97576,97577],{"class":214},"copy_a[",[204,97579,405],{"class":263},[204,97581,591],{"class":214},[204,97583,405],{"class":263},[204,97585,1153],{"class":214},[204,97587,260],{"class":210},[204,97589,97544],{"class":263},[19,97591,97592],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5213,97594,97595],{},"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":125,"searchDepth":126,"depth":126,"links":97597},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97114,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97604,"title":97605,"body":97606,"description":132,"extension":133,"meta":98098,"navigation":135,"path":98099,"seo":98100,"stem":98101,"__hash__":98102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97607,"toc":98090},[97608,97611,97615,97618,97621,97674,97677,97702,97705,97724,97744,97747,97763,97767,97813,97817,97859,97863,97866,97869,97872,97875,97878,97940,98000,98004,98007,98064,98068,98073,98082,98087],[10,97609,97605],{"id":97610},"_5改变数组的维度",[14,97612,97614],{"id":97613},"_51-使用reshape","5.1 使用reshape()",[19,97616,97617],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97619,97620],{},"①一维数组转换为二维数组",[196,97622,97624],{"className":30464,"code":97623,"language":30466,"meta":125,"style":125},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[81,97625,97626,97642,97647,97652,97657],{"__ignoreMap":125},[204,97627,97628,97630,97632,97634,97636,97638,97640],{"class":206,"line":207},[204,97629,62],{"class":214},[204,97631,260],{"class":210},[204,97633,93088],{"class":214},[204,97635,431],{"class":263},[204,97637,591],{"class":214},[204,97639,736],{"class":263},[204,97641,221],{"class":214},[204,97643,97644],{"class":206,"line":126},[204,97645,97646],{"class":273},"#将一维数组进行转换\n",[204,97648,97649],{"class":206,"line":131},[204,97650,97651],{"class":273},"#注意点：元素个数不可以变\n",[204,97653,97654],{"class":206,"line":1281},[204,97655,97656],{"class":273},"#转换维度要保持一致，不一致就异常！！！\n",[204,97658,97659,97661,97663,97666,97668,97670,97672],{"class":206,"line":1287},[204,97660,93392],{"class":214},[204,97662,260],{"class":210},[204,97664,97665],{"class":214},"a.reshape(",[204,97667,292],{"class":263},[204,97669,591],{"class":214},[204,97671,557],{"class":263},[204,97673,221],{"class":214},[19,97675,97676],{},"②一维数组转换为三维数组",[196,97678,97680],{"className":30464,"code":97679,"language":30466,"meta":125,"style":125},"aaa=a.reshape(2,3,2)\n",[81,97681,97682],{"__ignoreMap":125},[204,97683,97684,97686,97688,97690,97692,97694,97696,97698,97700],{"class":206,"line":207},[204,97685,95607],{"class":214},[204,97687,260],{"class":210},[204,97689,97665],{"class":214},[204,97691,292],{"class":263},[204,97693,591],{"class":214},[204,97695,286],{"class":263},[204,97697,591],{"class":214},[204,97699,292],{"class":263},[204,97701,221],{"class":214},[19,97703,97704],{},"③二维数组转化为一维数组",[196,97706,97708],{"className":30464,"code":97707,"language":30466,"meta":125,"style":125},"#知道元素个数：\naa.reshape(12)\n",[81,97709,97710,97715],{"__ignoreMap":125},[204,97711,97712],{"class":206,"line":207},[204,97713,97714],{"class":273},"#知道元素个数：\n",[204,97716,97717,97720,97722],{"class":206,"line":126},[204,97718,97719],{"class":214},"aa.reshape(",[204,97721,711],{"class":263},[204,97723,221],{"class":214},[196,97725,97727],{"className":30464,"code":97726,"language":30466,"meta":125,"style":125},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[81,97728,97729,97734],{"__ignoreMap":125},[204,97730,97731],{"class":206,"line":207},[204,97732,97733],{"class":273},"#不知道元素个数，参数传递-1\n",[204,97735,97736,97738,97740,97742],{"class":206,"line":126},[204,97737,97719],{"class":214},[204,97739,745],{"class":210},[204,97741,431],{"class":263},[204,97743,221],{"class":214},[19,97745,97746],{},"④三维数组转换为一维数组",[196,97748,97750],{"className":30464,"code":97749,"language":30466,"meta":125,"style":125},"aaa.reshape(-1)\n",[81,97751,97752],{"__ignoreMap":125},[204,97753,97754,97757,97759,97761],{"class":206,"line":207},[204,97755,97756],{"class":214},"aaa.reshape(",[204,97758,745],{"class":210},[204,97760,431],{"class":263},[204,97762,221],{"class":214},[14,97764,97766],{"id":97765},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[196,97768,97770],{"className":30464,"code":97769,"language":30466,"meta":125,"style":125},"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",[81,97771,97772,97799,97804,97808],{"__ignoreMap":125},[204,97773,97774,97776,97778,97780,97782,97784,97786,97788,97790,97792,97794,97796],{"class":206,"line":207},[204,97775,93392],{"class":214},[204,97777,260],{"class":210},[204,97779,93088],{"class":214},[204,97781,431],{"class":263},[204,97783,591],{"class":214},[204,97785,736],{"class":263},[204,97787,93093],{"class":214},[204,97789,292],{"class":263},[204,97791,591],{"class":214},[204,97793,557],{"class":263},[204,97795,642],{"class":214},[204,97797,97798],{"class":273},"#转换为2行6列的数组\n",[204,97800,97801],{"class":206,"line":126},[204,97802,97803],{"class":214},"aa.revel()\n",[204,97805,97806],{"class":206,"line":131},[204,97807,93650],{"class":273},[204,97809,97810],{"class":206,"line":1281},[204,97811,97812],{"class":273},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97814,97816],{"id":97815},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[196,97818,97820],{"className":30464,"code":97819,"language":30466,"meta":125,"style":125},"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",[81,97821,97822,97846,97851,97855],{"__ignoreMap":125},[204,97823,97824,97826,97828,97830,97832,97834,97836,97838,97840,97842,97844],{"class":206,"line":207},[204,97825,93392],{"class":214},[204,97827,260],{"class":210},[204,97829,93088],{"class":214},[204,97831,431],{"class":263},[204,97833,591],{"class":214},[204,97835,736],{"class":263},[204,97837,93093],{"class":214},[204,97839,292],{"class":263},[204,97841,591],{"class":214},[204,97843,557],{"class":263},[204,97845,221],{"class":214},[204,97847,97848],{"class":206,"line":126},[204,97849,97850],{"class":214},"aa.flatten()\n",[204,97852,97853],{"class":206,"line":131},[204,97854,93650],{"class":273},[204,97856,97857],{"class":206,"line":1281},[204,97858,97812],{"class":273},[14,97860,97862],{"id":97861},"_54-使用resize","5.4 使用resize()",[19,97864,97865],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97867,97868],{},"通过resize方法可以改变数组的维度",[19,97870,97871],{},"#resize修改数组维度",[19,97873,97874],{},"#以元组的形式指定形状",[19,97876,97877],{},"#改变的是原数组",[196,97879,97881],{"className":30464,"code":97880,"language":30466,"meta":125,"style":125},"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",[81,97882,97883,97899,97919,97932,97936],{"__ignoreMap":125},[204,97884,97885,97887,97889,97891,97893,97895,97897],{"class":206,"line":207},[204,97886,62],{"class":214},[204,97888,260],{"class":210},[204,97890,93088],{"class":214},[204,97892,431],{"class":263},[204,97894,591],{"class":214},[204,97896,736],{"class":263},[204,97898,221],{"class":214},[204,97900,97901,97904,97906,97908,97910,97912,97914,97916],{"class":206,"line":126},[204,97902,97903],{"class":214},"a.shape",[204,97905,260],{"class":210},[204,97907,215],{"class":214},[204,97909,292],{"class":263},[204,97911,591],{"class":214},[204,97913,557],{"class":263},[204,97915,642],{"class":214},[204,97917,97918],{"class":273},"#改变了原数组\n",[204,97920,97921,97923,97925,97928,97930],{"class":206,"line":131},[204,97922,62],{"class":214},[204,97924,260],{"class":210},[204,97926,97927],{"class":214},"resize((",[204,97929,711],{"class":263},[204,97931,30583],{"class":214},[204,97933,97934],{"class":206,"line":1281},[204,97935,93650],{"class":273},[204,97937,97938],{"class":206,"line":1287},[204,97939,97812],{"class":273},[196,97941,97943],{"className":30464,"code":97942,"language":30466,"meta":125,"style":125},"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",[81,97944,97945,97958,97962,97966,97971,97976,97981,97986,97991,97996],{"__ignoreMap":125},[204,97946,97947,97950,97952,97954,97956],{"class":206,"line":207},[204,97948,97949],{"class":214},"a.resize((",[204,97951,557],{"class":263},[204,97953,591],{"class":214},[204,97955,292],{"class":263},[204,97957,30583],{"class":214},[204,97959,97960],{"class":206,"line":126},[204,97961,93650],{"class":273},[204,97963,97964],{"class":206,"line":131},[204,97965,94014],{"class":319},[204,97967,97968],{"class":206,"line":1281},[204,97969,97970],{"class":319},"array([[ 1,  2],\n",[204,97972,97973],{"class":206,"line":1287},[204,97974,97975],{"class":319},"       [ 3,  4],\n",[204,97977,97978],{"class":206,"line":1301},[204,97979,97980],{"class":319},"       [ 5,  6],\n",[204,97982,97983],{"class":206,"line":1307},[204,97984,97985],{"class":319},"       [ 7,  8],\n",[204,97987,97988],{"class":206,"line":1398},[204,97989,97990],{"class":319},"       [ 9, 10],\n",[204,97992,97993],{"class":206,"line":1404},[204,97994,97995],{"class":319},"       [11, 12]])\n",[204,97997,97998],{"class":206,"line":1416},[204,97999,94014],{"class":319},[14,98001,98003],{"id":98002},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98005,98006],{},"改变了原数组",[196,98008,98010],{"className":30464,"code":98009,"language":30466,"meta":125,"style":125},"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",[81,98011,98012,98028,98044,98048,98052,98056,98060],{"__ignoreMap":125},[204,98013,98014,98016,98018,98020,98022,98024,98026],{"class":206,"line":207},[204,98015,62],{"class":214},[204,98017,260],{"class":210},[204,98019,93088],{"class":214},[204,98021,431],{"class":263},[204,98023,591],{"class":214},[204,98025,736],{"class":263},[204,98027,221],{"class":214},[204,98029,98030,98032,98034,98036,98038,98040,98042],{"class":206,"line":126},[204,98031,97903],{"class":214},[204,98033,260],{"class":210},[204,98035,215],{"class":214},[204,98037,292],{"class":263},[204,98039,591],{"class":214},[204,98041,557],{"class":263},[204,98043,221],{"class":214},[204,98045,98046],{"class":206,"line":131},[204,98047,93650],{"class":273},[204,98049,98050],{"class":206,"line":1281},[204,98051,94014],{"class":319},[204,98053,98054],{"class":206,"line":1287},[204,98055,97274],{"class":319},[204,98057,98058],{"class":206,"line":1301},[204,98059,97279],{"class":319},[204,98061,98062],{"class":206,"line":1307},[204,98063,94014],{"class":319},[14,98065,98067],{"id":98066},"_56-重要比较","5.6 重要比较：",[19,98069,98070],{},[23,98071],{"alt":125,"src":98072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98074,98075,98076,98078,98079,98081],{},"口诀：NumPy 函数要么用 ",[81,98077,96049],{},"，要么用 ",[81,98080,31582],{},"，创建结构用 shape，造数据用 size",[19,98083,98084],{},[23,98085],{"alt":125,"src":98086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5213,98088,98089],{},"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":125,"searchDepth":126,"depth":126,"links":98091},[98092,98093,98094,98095,98096,98097],{"id":97613,"depth":126,"text":97614},{"id":97765,"depth":126,"text":97766},{"id":97815,"depth":126,"text":97816},{"id":97861,"depth":126,"text":97862},{"id":98002,"depth":126,"text":98003},{"id":98066,"depth":126,"text":98067},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97605,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98104,"title":98105,"body":98106,"description":132,"extension":133,"meta":99178,"navigation":135,"path":99179,"seo":99180,"stem":99181,"__hash__":99182},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98107,"toc":99172},[98108,98111,98115,98118,98121,98124,98189,98192,98232,98235,98317,98320,98325,98347,98349,98354,98359,98362,98365,98520,98523,98725,98729,98732,98735,98803,98805,98810,98813,98816,98896,98900,98903,98905,98978,98980,98985,98987,99067,99071,99074,99077,99080,99083,99086,99089,99169],[10,98109,98105],{"id":98110},"_6数组的拼接",[14,98112,98114],{"id":98113},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98116,98117],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98119,98120],{},"函数内部传两个数列构成的数列或者元组",[19,98122,98123],{},"①一维数组的拼接",[196,98125,98127],{"className":30464,"code":98126,"language":30466,"meta":125,"style":125},"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",[81,98128,98129,98149,98169,98174,98179,98184],{"__ignoreMap":125},[204,98130,98131,98133,98135,98137,98139,98141,98143,98145,98147],{"class":206,"line":207},[204,98132,62],{"class":214},[204,98134,260],{"class":210},[204,98136,93110],{"class":214},[204,98138,431],{"class":263},[204,98140,591],{"class":214},[204,98142,292],{"class":263},[204,98144,591],{"class":214},[204,98146,286],{"class":263},[204,98148,4743],{"class":214},[204,98150,98151,98153,98155,98157,98159,98161,98163,98165,98167],{"class":206,"line":126},[204,98152,476],{"class":214},[204,98154,260],{"class":210},[204,98156,93110],{"class":214},[204,98158,506],{"class":263},[204,98160,591],{"class":214},[204,98162,532],{"class":263},[204,98164,591],{"class":214},[204,98166,557],{"class":263},[204,98168,4743],{"class":214},[204,98170,98171],{"class":206,"line":131},[204,98172,98173],{"class":273},"#调用concatenate进行数组拼接\n",[204,98175,98176],{"class":206,"line":1281},[204,98177,98178],{"class":214},"np.concatenate((a,b))\n",[204,98180,98181],{"class":206,"line":1287},[204,98182,98183],{"class":273},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[204,98185,98186],{"class":206,"line":1301},[204,98187,98188],{"class":273},"#np.concatenate([a,b])\n",[19,98190,98191],{},"②一维多个数组拼接",[196,98193,98195],{"className":30464,"code":98194,"language":30466,"meta":125,"style":125},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[81,98196,98197,98202,98222,98227],{"__ignoreMap":125},[204,98198,98199],{"class":206,"line":207},[204,98200,98201],{"class":273},"#也可以多个数组进行拼接\n",[204,98203,98204,98206,98208,98210,98212,98214,98216,98218,98220],{"class":206,"line":126},[204,98205,501],{"class":214},[204,98207,260],{"class":210},[204,98209,93110],{"class":214},[204,98211,659],{"class":263},[204,98213,591],{"class":214},[204,98215,685],{"class":263},[204,98217,591],{"class":214},[204,98219,736],{"class":263},[204,98221,4743],{"class":214},[204,98223,98224],{"class":206,"line":131},[204,98225,98226],{"class":214},"c\n",[204,98228,98229],{"class":206,"line":1281},[204,98230,98231],{"class":214},"np.concatenate((a,b,c))\n",[19,98233,98234],{},"③二维数组拼接",[196,98236,98238],{"className":30464,"code":98237,"language":30466,"meta":125,"style":125},"#二维数组使用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",[81,98239,98240,98245,98269,98294,98299,98304],{"__ignoreMap":125},[204,98241,98242],{"class":206,"line":207},[204,98243,98244],{"class":273},"#二维数组使用concatenate进行拼接\n",[204,98246,98247,98249,98251,98253,98255,98257,98259,98261,98263,98265,98267],{"class":206,"line":126},[204,98248,93392],{"class":214},[204,98250,260],{"class":210},[204,98252,93088],{"class":214},[204,98254,431],{"class":263},[204,98256,591],{"class":214},[204,98258,736],{"class":263},[204,98260,93093],{"class":214},[204,98262,286],{"class":263},[204,98264,591],{"class":214},[204,98266,506],{"class":263},[204,98268,221],{"class":214},[204,98270,98271,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292],{"class":206,"line":131},[204,98272,98273],{"class":214},"bb",[204,98275,260],{"class":210},[204,98277,93088],{"class":214},[204,98279,550],{"class":263},[204,98281,591],{"class":214},[204,98283,855],{"class":263},[204,98285,93093],{"class":214},[204,98287,286],{"class":263},[204,98289,591],{"class":214},[204,98291,506],{"class":263},[204,98293,221],{"class":214},[204,98295,98296],{"class":206,"line":1281},[204,98297,98298],{"class":273},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[204,98300,98301],{"class":206,"line":1287},[204,98302,98303],{"class":273},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[204,98305,98306,98309,98311,98313,98315],{"class":206,"line":1301},[204,98307,98308],{"class":214},"np.concatenate((aa,bb),",[204,98310,47600],{"class":5303},[204,98312,260],{"class":210},[204,98314,405],{"class":263},[204,98316,221],{"class":214},[19,98318,98319],{},"结果：",[19,98321,98322],{},[23,98323],{"alt":125,"src":98324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[196,98326,98328],{"className":30464,"code":98327,"language":30466,"meta":125,"style":125},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[81,98329,98330,98335],{"__ignoreMap":125},[204,98331,98332],{"class":206,"line":207},[204,98333,98334],{"class":273},"#指定axis为1进行拼接\n",[204,98336,98337,98339,98341,98343,98345],{"class":206,"line":126},[204,98338,98308],{"class":214},[204,98340,47600],{"class":5303},[204,98342,260],{"class":210},[204,98344,431],{"class":263},[204,98346,221],{"class":214},[19,98348,98319],{},[19,98350,98351],{},[23,98352],{"alt":125,"src":98353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98355,98356],{},[30,98357,98358],{},"二维数组总结：0竖着方向，1横着方向",[19,98360,98361],{},"④三维数组拼接",[19,98363,98364],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[196,98366,98368],{"className":30464,"code":98367,"language":30466,"meta":125,"style":125},"#两个三行六列\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",[81,98369,98370,98375,98403,98433,98438,98455,98460,98465,98470,98487,98492,98497,98502,98515],{"__ignoreMap":125},[204,98371,98372],{"class":206,"line":207},[204,98373,98374],{"class":273},"#两个三行六列\n",[204,98376,98377,98379,98381,98383,98385,98387,98389,98391,98393,98395,98397,98399,98401],{"class":206,"line":126},[204,98378,95607],{"class":214},[204,98380,260],{"class":210},[204,98382,93088],{"class":214},[204,98384,431],{"class":263},[204,98386,591],{"class":214},[204,98388,538],{"class":263},[204,98390,93093],{"class":214},[204,98392,292],{"class":263},[204,98394,591],{"class":214},[204,98396,286],{"class":263},[204,98398,591],{"class":214},[204,98400,557],{"class":263},[204,98402,221],{"class":214},[204,98404,98405,98408,98410,98412,98414,98416,98419,98421,98423,98425,98427,98429,98431],{"class":206,"line":131},[204,98406,98407],{"class":214},"bbb",[204,98409,260],{"class":210},[204,98411,93088],{"class":214},[204,98413,550],{"class":263},[204,98415,591],{"class":214},[204,98417,98418],{"class":263},"137",[204,98420,93093],{"class":214},[204,98422,292],{"class":263},[204,98424,591],{"class":214},[204,98426,286],{"class":263},[204,98428,591],{"class":214},[204,98430,557],{"class":263},[204,98432,221],{"class":214},[204,98434,98435],{"class":206,"line":1281},[204,98436,98437],{"class":273},"#axis=0\n",[204,98439,98440,98442,98444,98447,98449,98451,98453],{"class":206,"line":1287},[204,98441,908],{"class":214},[204,98443,260],{"class":210},[204,98445,98446],{"class":214},"np.concatenate((aaa,bbb),",[204,98448,47600],{"class":5303},[204,98450,260],{"class":210},[204,98452,405],{"class":263},[204,98454,221],{"class":214},[204,98456,98457],{"class":206,"line":1301},[204,98458,98459],{"class":214},"s.shape\n",[204,98461,98462],{"class":206,"line":1307},[204,98463,98464],{"class":273},"#输出：(4,3,6)\n",[204,98466,98467],{"class":206,"line":1398},[204,98468,98469],{"class":273},"#axis=1\n",[204,98471,98472,98475,98477,98479,98481,98483,98485],{"class":206,"line":1404},[204,98473,98474],{"class":214},"ss",[204,98476,260],{"class":210},[204,98478,98446],{"class":214},[204,98480,47600],{"class":5303},[204,98482,260],{"class":210},[204,98484,431],{"class":263},[204,98486,221],{"class":214},[204,98488,98489],{"class":206,"line":1416},[204,98490,98491],{"class":214},"ss.shape\n",[204,98493,98494],{"class":206,"line":1698},[204,98495,98496],{"class":273},"#输出：(2,6,6)\n",[204,98498,98499],{"class":206,"line":1703},[204,98500,98501],{"class":273},"#axis=2\n",[204,98503,98504,98506,98508,98510,98512],{"class":206,"line":1709},[204,98505,98446],{"class":214},[204,98507,47600],{"class":5303},[204,98509,260],{"class":210},[204,98511,292],{"class":263},[204,98513,98514],{"class":214},").shape\n",[204,98516,98517],{"class":206,"line":1714},[204,98518,98519],{"class":273},"#输出：（2，3，12）\n",[19,98521,98522],{},"⑤四维数组拼接",[196,98524,98526],{"className":30464,"code":98525,"language":30466,"meta":125,"style":125},"#两个三行六列\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",[81,98527,98528,98532,98560,98588,98613,98639,98643,98656,98661,98665,98677,98682,98686,98698,98703,98708,98720],{"__ignoreMap":125},[204,98529,98530],{"class":206,"line":207},[204,98531,98374],{"class":273},[204,98533,98534,98536,98538,98540,98542,98544,98546,98548,98550,98552,98554,98556,98558],{"class":206,"line":126},[204,98535,95607],{"class":214},[204,98537,260],{"class":210},[204,98539,93088],{"class":214},[204,98541,431],{"class":263},[204,98543,591],{"class":214},[204,98545,538],{"class":263},[204,98547,93093],{"class":214},[204,98549,292],{"class":263},[204,98551,591],{"class":214},[204,98553,286],{"class":263},[204,98555,591],{"class":214},[204,98557,557],{"class":263},[204,98559,221],{"class":214},[204,98561,98562,98564,98566,98568,98570,98572,98574,98576,98578,98580,98582,98584,98586],{"class":206,"line":131},[204,98563,98407],{"class":214},[204,98565,260],{"class":210},[204,98567,93088],{"class":214},[204,98569,550],{"class":263},[204,98571,591],{"class":214},[204,98573,98418],{"class":263},[204,98575,93093],{"class":214},[204,98577,292],{"class":263},[204,98579,591],{"class":214},[204,98581,286],{"class":263},[204,98583,591],{"class":214},[204,98585,557],{"class":263},[204,98587,221],{"class":214},[204,98589,98590,98593,98595,98597,98599,98601,98603,98605,98607,98609,98611],{"class":206,"line":1281},[204,98591,98592],{"class":214},"aaaa",[204,98594,260],{"class":210},[204,98596,97756],{"class":214},[204,98598,292],{"class":263},[204,98600,591],{"class":214},[204,98602,286],{"class":263},[204,98604,591],{"class":214},[204,98606,286],{"class":263},[204,98608,591],{"class":214},[204,98610,292],{"class":263},[204,98612,221],{"class":214},[204,98614,98615,98618,98620,98623,98625,98627,98629,98631,98633,98635,98637],{"class":206,"line":1287},[204,98616,98617],{"class":214},"bbbb",[204,98619,260],{"class":210},[204,98621,98622],{"class":214},"bbb.reshape(",[204,98624,292],{"class":263},[204,98626,591],{"class":214},[204,98628,286],{"class":263},[204,98630,591],{"class":214},[204,98632,286],{"class":263},[204,98634,591],{"class":214},[204,98636,292],{"class":263},[204,98638,221],{"class":214},[204,98640,98641],{"class":206,"line":1301},[204,98642,98437],{"class":273},[204,98644,98645,98648,98650,98652,98654],{"class":206,"line":1307},[204,98646,98647],{"class":214},"np.concatenate((aaaa,bbbb),",[204,98649,47600],{"class":5303},[204,98651,260],{"class":210},[204,98653,405],{"class":263},[204,98655,98514],{"class":214},[204,98657,98658],{"class":206,"line":1398},[204,98659,98660],{"class":273},"#结果：（4，3，3，2）\n",[204,98662,98663],{"class":206,"line":1404},[204,98664,98469],{"class":273},[204,98666,98667,98669,98671,98673,98675],{"class":206,"line":1416},[204,98668,98647],{"class":214},[204,98670,47600],{"class":5303},[204,98672,260],{"class":210},[204,98674,431],{"class":263},[204,98676,98514],{"class":214},[204,98678,98679],{"class":206,"line":1698},[204,98680,98681],{"class":273},"#结果：（2，6，3，2）\n",[204,98683,98684],{"class":206,"line":1703},[204,98685,98501],{"class":273},[204,98687,98688,98690,98692,98694,98696],{"class":206,"line":1709},[204,98689,98647],{"class":214},[204,98691,47600],{"class":5303},[204,98693,260],{"class":210},[204,98695,292],{"class":263},[204,98697,98514],{"class":214},[204,98699,98700],{"class":206,"line":1714},[204,98701,98702],{"class":273},"#结果：（2，3，6，2）\n",[204,98704,98705],{"class":206,"line":1728},[204,98706,98707],{"class":273},"#axis=3\n",[204,98709,98710,98712,98714,98716,98718],{"class":206,"line":1733},[204,98711,98647],{"class":214},[204,98713,47600],{"class":5303},[204,98715,260],{"class":210},[204,98717,286],{"class":263},[204,98719,98514],{"class":214},[204,98721,98722],{"class":206,"line":1739},[204,98723,98724],{"class":273},"#结果：（2，3，3，4）\n",[14,98726,98728],{"id":98727},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98730,98731],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98733,98734],{},"①二维数组",[196,98736,98738],{"className":30464,"code":98737,"language":30466,"meta":125,"style":125},"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",[81,98739,98740,98764,98788,98793,98798],{"__ignoreMap":125},[204,98741,98742,98744,98746,98748,98750,98752,98754,98756,98758,98760,98762],{"class":206,"line":207},[204,98743,93392],{"class":214},[204,98745,260],{"class":210},[204,98747,93088],{"class":214},[204,98749,431],{"class":263},[204,98751,591],{"class":214},[204,98753,736],{"class":263},[204,98755,93093],{"class":214},[204,98757,286],{"class":263},[204,98759,591],{"class":214},[204,98761,506],{"class":263},[204,98763,221],{"class":214},[204,98765,98766,98768,98770,98772,98774,98776,98778,98780,98782,98784,98786],{"class":206,"line":126},[204,98767,98273],{"class":214},[204,98769,260],{"class":210},[204,98771,93088],{"class":214},[204,98773,550],{"class":263},[204,98775,591],{"class":214},[204,98777,855],{"class":263},[204,98779,93093],{"class":214},[204,98781,286],{"class":263},[204,98783,591],{"class":214},[204,98785,506],{"class":263},[204,98787,221],{"class":214},[204,98789,98790],{"class":206,"line":131},[204,98791,98792],{"class":214},"np.hstack((aa,bb))\n",[204,98794,98795],{"class":206,"line":1281},[204,98796,98797],{"class":273},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[204,98799,98800],{"class":206,"line":1287},[204,98801,98802],{"class":273},"#np.hstack([aa,bb])\n",[19,98804,98319],{},[19,98806,98807],{},[23,98808],{"alt":125,"src":98809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98811,98812],{},"等效于concatenate()函数中axis=1时的情况",[19,98814,98815],{},"②三维数组",[196,98817,98819],{"className":30464,"code":98818,"language":30466,"meta":125,"style":125},"#两个三行六列\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",[81,98820,98821,98825,98853,98881,98886,98891],{"__ignoreMap":125},[204,98822,98823],{"class":206,"line":207},[204,98824,98374],{"class":273},[204,98826,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851],{"class":206,"line":126},[204,98828,95607],{"class":214},[204,98830,260],{"class":210},[204,98832,93088],{"class":214},[204,98834,431],{"class":263},[204,98836,591],{"class":214},[204,98838,538],{"class":263},[204,98840,93093],{"class":214},[204,98842,292],{"class":263},[204,98844,591],{"class":214},[204,98846,286],{"class":263},[204,98848,591],{"class":214},[204,98850,557],{"class":263},[204,98852,221],{"class":214},[204,98854,98855,98857,98859,98861,98863,98865,98867,98869,98871,98873,98875,98877,98879],{"class":206,"line":131},[204,98856,98407],{"class":214},[204,98858,260],{"class":210},[204,98860,93088],{"class":214},[204,98862,550],{"class":263},[204,98864,591],{"class":214},[204,98866,98418],{"class":263},[204,98868,93093],{"class":214},[204,98870,292],{"class":263},[204,98872,591],{"class":214},[204,98874,286],{"class":263},[204,98876,591],{"class":214},[204,98878,557],{"class":263},[204,98880,221],{"class":214},[204,98882,98883],{"class":206,"line":1281},[204,98884,98885],{"class":273},"#使用hstack\n",[204,98887,98888],{"class":206,"line":1287},[204,98889,98890],{"class":214},"np.hstack((aaa,bbb)).shape\n",[204,98892,98893],{"class":206,"line":1301},[204,98894,98895],{"class":273},"#输出：（2，6，6）\n",[14,98897,98899],{"id":98898},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98901,98902],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98904,98734],{},[196,98906,98908],{"className":30464,"code":98907,"language":30466,"meta":125,"style":125},"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",[81,98909,98910,98934,98958,98963,98968,98973],{"__ignoreMap":125},[204,98911,98912,98914,98916,98918,98920,98922,98924,98926,98928,98930,98932],{"class":206,"line":207},[204,98913,93392],{"class":214},[204,98915,260],{"class":210},[204,98917,93088],{"class":214},[204,98919,431],{"class":263},[204,98921,591],{"class":214},[204,98923,736],{"class":263},[204,98925,93093],{"class":214},[204,98927,286],{"class":263},[204,98929,591],{"class":214},[204,98931,506],{"class":263},[204,98933,221],{"class":214},[204,98935,98936,98938,98940,98942,98944,98946,98948,98950,98952,98954,98956],{"class":206,"line":126},[204,98937,98273],{"class":214},[204,98939,260],{"class":210},[204,98941,93088],{"class":214},[204,98943,550],{"class":263},[204,98945,591],{"class":214},[204,98947,855],{"class":263},[204,98949,93093],{"class":214},[204,98951,286],{"class":263},[204,98953,591],{"class":214},[204,98955,506],{"class":263},[204,98957,221],{"class":214},[204,98959,98960],{"class":206,"line":131},[204,98961,98962],{"class":273},"#vstack 垂直方向进行堆叠\n",[204,98964,98965],{"class":206,"line":1281},[204,98966,98967],{"class":214},"np.vstack((aa,bb))\n",[204,98969,98970],{"class":206,"line":1287},[204,98971,98972],{"class":273},"#与hstack传的参数类似，等价于：\n",[204,98974,98975],{"class":206,"line":1301},[204,98976,98977],{"class":214},"np.vstack([aa,bb])\n",[19,98979,98319],{},[19,98981,98982],{},[23,98983],{"alt":125,"src":98984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,98986,98815],{},[196,98988,98990],{"className":30464,"code":98989,"language":30466,"meta":125,"style":125},"#两个三行六列\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",[81,98991,98992,98996,99024,99052,99057,99062],{"__ignoreMap":125},[204,98993,98994],{"class":206,"line":207},[204,98995,98374],{"class":273},[204,98997,98998,99000,99002,99004,99006,99008,99010,99012,99014,99016,99018,99020,99022],{"class":206,"line":126},[204,98999,95607],{"class":214},[204,99001,260],{"class":210},[204,99003,93088],{"class":214},[204,99005,431],{"class":263},[204,99007,591],{"class":214},[204,99009,538],{"class":263},[204,99011,93093],{"class":214},[204,99013,292],{"class":263},[204,99015,591],{"class":214},[204,99017,286],{"class":263},[204,99019,591],{"class":214},[204,99021,557],{"class":263},[204,99023,221],{"class":214},[204,99025,99026,99028,99030,99032,99034,99036,99038,99040,99042,99044,99046,99048,99050],{"class":206,"line":131},[204,99027,98407],{"class":214},[204,99029,260],{"class":210},[204,99031,93088],{"class":214},[204,99033,550],{"class":263},[204,99035,591],{"class":214},[204,99037,98418],{"class":263},[204,99039,93093],{"class":214},[204,99041,292],{"class":263},[204,99043,591],{"class":214},[204,99045,286],{"class":263},[204,99047,591],{"class":214},[204,99049,557],{"class":263},[204,99051,221],{"class":214},[204,99053,99054],{"class":206,"line":1281},[204,99055,99056],{"class":273},"#使用vstack\n",[204,99058,99059],{"class":206,"line":1287},[204,99060,99061],{"class":214},"np.vstack((aaa,bbb)).shape\n",[204,99063,99064],{"class":206,"line":1301},[204,99065,99066],{"class":273},"#输出：（4，3，6）\n",[14,99068,99070],{"id":99069},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99072,99073],{},"该方法是三维数组特有的方法",[19,99075,99076],{},"也就是说",[19,99078,99079],{},"一维数组拼接方法用：concatenate()",[19,99081,99082],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99084,99085],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99087,99088],{},"四维数组及多维数组只能用concatenate进行拼接",[196,99090,99092],{"className":30464,"code":99091,"language":30466,"meta":125,"style":125},"#两个三行六列\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",[81,99093,99094,99098,99126,99154,99159,99164],{"__ignoreMap":125},[204,99095,99096],{"class":206,"line":207},[204,99097,98374],{"class":273},[204,99099,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124],{"class":206,"line":126},[204,99101,95607],{"class":214},[204,99103,260],{"class":210},[204,99105,93088],{"class":214},[204,99107,431],{"class":263},[204,99109,591],{"class":214},[204,99111,538],{"class":263},[204,99113,93093],{"class":214},[204,99115,292],{"class":263},[204,99117,591],{"class":214},[204,99119,286],{"class":263},[204,99121,591],{"class":214},[204,99123,557],{"class":263},[204,99125,221],{"class":214},[204,99127,99128,99130,99132,99134,99136,99138,99140,99142,99144,99146,99148,99150,99152],{"class":206,"line":131},[204,99129,98407],{"class":214},[204,99131,260],{"class":210},[204,99133,93088],{"class":214},[204,99135,550],{"class":263},[204,99137,591],{"class":214},[204,99139,98418],{"class":263},[204,99141,93093],{"class":214},[204,99143,292],{"class":263},[204,99145,591],{"class":214},[204,99147,286],{"class":263},[204,99149,591],{"class":214},[204,99151,557],{"class":263},[204,99153,221],{"class":214},[204,99155,99156],{"class":206,"line":1281},[204,99157,99158],{"class":273},"#使用dstack\n",[204,99160,99161],{"class":206,"line":1287},[204,99162,99163],{"class":214},"np.dstack((aaa,bbb)).shape\n",[204,99165,99166],{"class":206,"line":1301},[204,99167,99168],{"class":273},"#结果：（2，3，12）\n",[5213,99170,99171],{},"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":125,"searchDepth":126,"depth":126,"links":99173},[99174,99175,99176,99177],{"id":98113,"depth":126,"text":98114},{"id":98727,"depth":126,"text":98728},{"id":98898,"depth":126,"text":98899},{"id":99069,"depth":126,"text":99070},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98105,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99184,"title":99185,"body":99186,"description":132,"extension":133,"meta":99461,"navigation":135,"path":99462,"seo":99463,"stem":99464,"__hash__":99465},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99187,"toc":99459},[99188,99191,99194,99288,99291,99294,99297,99300,99303,99306,99309,99312,99456],[10,99189,99185],{"id":99190},"_7数组转置",[19,99192,99193],{},"使用transpose()函数",[196,99195,99197],{"className":30464,"code":99196,"language":30466,"meta":125,"style":125},"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",[81,99198,99199,99209,99233,99238,99243,99248,99253,99261,99265,99269,99274,99279,99284],{"__ignoreMap":125},[204,99200,99201,99203,99205,99207],{"class":206,"line":207},[204,99202,30478],{"class":210},[204,99204,31466],{"class":214},[204,99206,31469],{"class":210},[204,99208,31472],{"class":214},[204,99210,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231],{"class":206,"line":126},[204,99212,62],{"class":214},[204,99214,260],{"class":210},[204,99216,31803],{"class":214},[204,99218,431],{"class":263},[204,99220,591],{"class":214},[204,99222,736],{"class":263},[204,99224,93093],{"class":214},[204,99226,506],{"class":263},[204,99228,591],{"class":214},[204,99230,286],{"class":263},[204,99232,221],{"class":214},[204,99234,99235],{"class":206,"line":131},[204,99236,99237],{"class":273},"#二维数组转置\n",[204,99239,99240],{"class":206,"line":1281},[204,99241,99242],{"class":273},"#调用transpose()函数\n",[204,99244,99245],{"class":206,"line":1287},[204,99246,99247],{"class":214},"a.transpose()\n",[204,99249,99250],{"class":206,"line":1301},[204,99251,99252],{"class":273},"#对于二维数组也可以采用.T来实现\n",[204,99254,99255,99258],{"class":206,"line":1307},[204,99256,99257],{"class":214},"a.T",[204,99259,99260],{"class":273},"#与上述代码一样\n",[204,99262,99263],{"class":206,"line":1398},[204,99264,93650],{"class":273},[204,99266,99267],{"class":206,"line":1404},[204,99268,94014],{"class":319},[204,99270,99271],{"class":206,"line":1416},[204,99272,99273],{"class":319},"array([[ 1,  4,  7, 10],\n",[204,99275,99276],{"class":206,"line":1698},[204,99277,99278],{"class":319},"       [ 2,  5,  8, 11],\n",[204,99280,99281],{"class":206,"line":1703},[204,99282,99283],{"class":319},"       [ 3,  6,  9, 12]])\n",[204,99285,99286],{"class":206,"line":1709},[204,99287,94014],{"class":319},[19,99289,99290],{},"也可以使用np.transpose()的形式",[19,99292,99293],{},"#多维数组进行转置 np.transpose()",[19,99295,99296],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99298,99299],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99301,99302],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99304,99305],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99307,99308],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99310,99311],{},"四维及以上的数组也是一样的道理",[196,99313,99315],{"className":30464,"code":99314,"language":30466,"meta":125,"style":125},"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",[81,99316,99317,99345,99350,99355,99360,99378,99383,99415,99420,99425,99430,99451],{"__ignoreMap":125},[204,99318,99319,99321,99323,99325,99327,99329,99331,99333,99335,99337,99339,99341,99343],{"class":206,"line":207},[204,99320,1033],{"class":214},[204,99322,260],{"class":210},[204,99324,93088],{"class":214},[204,99326,431],{"class":263},[204,99328,591],{"class":214},[204,99330,538],{"class":263},[204,99332,93093],{"class":214},[204,99334,286],{"class":263},[204,99336,591],{"class":214},[204,99338,557],{"class":263},[204,99340,591],{"class":214},[204,99342,292],{"class":263},[204,99344,221],{"class":214},[204,99346,99347],{"class":206,"line":126},[204,99348,99349],{"class":214},"x.shape\n",[204,99351,99352],{"class":206,"line":131},[204,99353,99354],{"class":273},"#结果：（3,6,2）\n",[204,99356,99357],{"class":206,"line":1281},[204,99358,99359],{"class":273},"#使用np.transpose()进行转置 变为(2,6,3)\n",[204,99361,99362,99365,99367,99369,99371,99373,99375],{"class":206,"line":1287},[204,99363,99364],{"class":214},"np.transpose(x,(",[204,99366,292],{"class":263},[204,99368,591],{"class":214},[204,99370,431],{"class":263},[204,99372,591],{"class":214},[204,99374,405],{"class":263},[204,99376,99377],{"class":214},")).shape\n",[204,99379,99380],{"class":206,"line":1301},[204,99381,99382],{"class":273},"#结果：(2,6,3)\n",[204,99384,99385,99387,99389,99391,99393,99395,99397,99399,99401,99403,99405,99407,99409,99411,99413],{"class":206,"line":1307},[204,99386,98592],{"class":214},[204,99388,260],{"class":210},[204,99390,93088],{"class":214},[204,99392,431],{"class":263},[204,99394,591],{"class":214},[204,99396,538],{"class":263},[204,99398,93093],{"class":214},[204,99400,286],{"class":263},[204,99402,591],{"class":214},[204,99404,292],{"class":263},[204,99406,591],{"class":214},[204,99408,431],{"class":263},[204,99410,591],{"class":214},[204,99412,557],{"class":263},[204,99414,221],{"class":214},[204,99416,99417],{"class":206,"line":1398},[204,99418,99419],{"class":214},"aaaa.shape\n",[204,99421,99422],{"class":206,"line":1404},[204,99423,99424],{"class":273},"#结果：（3，2，1，6）\n",[204,99426,99427],{"class":206,"line":1416},[204,99428,99429],{"class":273},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[204,99431,99432,99435,99437,99439,99441,99443,99445,99447,99449],{"class":206,"line":1698},[204,99433,99434],{"class":214},"np.transpose(aaaa,(",[204,99436,431],{"class":263},[204,99438,591],{"class":214},[204,99440,292],{"class":263},[204,99442,591],{"class":214},[204,99444,405],{"class":263},[204,99446,591],{"class":214},[204,99448,286],{"class":263},[204,99450,99377],{"class":214},[204,99452,99453],{"class":206,"line":1703},[204,99454,99455],{"class":273},"#结果：(2,1,3,6)\n",[5213,99457,99458],{},"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":125,"searchDepth":126,"depth":126,"links":99460},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99185,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99467,"title":99468,"body":99469,"description":132,"extension":133,"meta":100203,"navigation":135,"path":100204,"seo":100205,"stem":100206,"__hash__":100207},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99470,"toc":100201},[99471,99474,99477,99480,99483,99486,99489,99492,99495,99604,99607,99610,100198],[10,99472,99468],{"id":99473},"_8数组分割",[19,99475,99476],{},"split分割",[19,99478,99479],{},"numpy.split(ary,indics_or_sections,axis)",[19,99481,99482],{},"解释：",[19,99484,99485],{},"ary:被分割的数组",[19,99487,99488],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99490,99491],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99493,99494],{},"①一维数组的分割",[196,99496,99498],{"className":30464,"code":99497,"language":30466,"meta":125,"style":125},"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",[81,99499,99500,99516,99521,99530,99534,99539,99547,99551,99556,99561,99574,99578,99583,99595,99599],{"__ignoreMap":125},[204,99501,99502,99504,99506,99508,99510,99512,99514],{"class":206,"line":207},[204,99503,62],{"class":214},[204,99505,260],{"class":210},[204,99507,93088],{"class":214},[204,99509,431],{"class":263},[204,99511,591],{"class":214},[204,99513,633],{"class":263},[204,99515,221],{"class":214},[204,99517,99518],{"class":206,"line":126},[204,99519,99520],{"class":273},"#如果传入整数，必须能够平分，否则会报错\n",[204,99522,99523,99526,99528],{"class":206,"line":131},[204,99524,99525],{"class":214},"np.split(a,",[204,99527,292],{"class":263},[204,99529,221],{"class":214},[204,99531,99532],{"class":206,"line":1281},[204,99533,93650],{"class":273},[204,99535,99536],{"class":206,"line":1287},[204,99537,99538],{"class":273},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[204,99540,99541,99543,99545],{"class":206,"line":1301},[204,99542,99525],{"class":214},[204,99544,506],{"class":263},[204,99546,221],{"class":214},[204,99548,99549],{"class":206,"line":1307},[204,99550,93650],{"class":273},[204,99552,99553],{"class":206,"line":1398},[204,99554,99555],{"class":273},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[204,99557,99558],{"class":206,"line":1404},[204,99559,99560],{"class":273},"#传入数组\n",[204,99562,99563,99566,99568,99570,99572],{"class":206,"line":1416},[204,99564,99565],{"class":214},"np.split(a,[",[204,99567,286],{"class":263},[204,99569,591],{"class":214},[204,99571,532],{"class":263},[204,99573,4743],{"class":214},[204,99575,99576],{"class":206,"line":1698},[204,99577,93650],{"class":273},[204,99579,99580],{"class":206,"line":1703},[204,99581,99582],{"class":273},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[204,99584,99585,99587,99589,99591,99593],{"class":206,"line":1709},[204,99586,99565],{"class":214},[204,99588,532],{"class":263},[204,99590,591],{"class":214},[204,99592,582],{"class":263},[204,99594,4743],{"class":214},[204,99596,99597],{"class":206,"line":1714},[204,99598,93650],{"class":273},[204,99600,99601],{"class":206,"line":1728},[204,99602,99603],{"class":273},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99605,99606],{},"②二维数组的分割",[19,99608,99609],{},"使用split()",[196,99611,99613],{"className":30464,"code":99612,"language":30466,"meta":125,"style":125},"#二维数组分割\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",[81,99614,99615,99620,99644,99649,99658,99662,99666,99671,99676,99681,99686,99691,99696,99701,99705,99718,99722,99726,99730,99734,99738,99743,99748,99753,99757,99762,99778,99782,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99880,99884,99904,99908,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99972,99977,99982,99987,99992,99997,100002,100006,100011,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100065,100069,100073,100077,100081,100085,100089,100093,100097,100101,100105,100109,100113,100117,100121,100125,100129,100133,100137,100141,100145,100149,100162,100166,100170,100174,100178,100182,100186,100190,100194],{"__ignoreMap":125},[204,99616,99617],{"class":206,"line":207},[204,99618,99619],{"class":273},"#二维数组分割\n",[204,99621,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642],{"class":206,"line":126},[204,99623,93392],{"class":214},[204,99625,260],{"class":210},[204,99627,93088],{"class":214},[204,99629,431],{"class":263},[204,99631,591],{"class":214},[204,99633,538],{"class":263},[204,99635,93093],{"class":214},[204,99637,557],{"class":263},[204,99639,591],{"class":214},[204,99641,557],{"class":263},[204,99643,221],{"class":214},[204,99645,99646],{"class":206,"line":131},[204,99647,99648],{"class":273},"#默认axis=0  传入整数平均分,按行来的\n",[204,99650,99651,99654,99656],{"class":206,"line":1281},[204,99652,99653],{"class":214},"np.split(aa,",[204,99655,286],{"class":263},[204,99657,221],{"class":214},[204,99659,99660],{"class":206,"line":1287},[204,99661,95850],{"class":273},[204,99663,99664],{"class":206,"line":1301},[204,99665,94014],{"class":319},[204,99667,99668],{"class":206,"line":1307},[204,99669,99670],{"class":319},"[array([[ 1,  2,  3,  4,  5,  6],\n",[204,99672,99673],{"class":206,"line":1398},[204,99674,99675],{"class":319},"        [ 7,  8,  9, 10, 11, 12]]),\n",[204,99677,99678],{"class":206,"line":1404},[204,99679,99680],{"class":319}," array([[13, 14, 15, 16, 17, 18],\n",[204,99682,99683],{"class":206,"line":1416},[204,99684,99685],{"class":319},"        [19, 20, 21, 22, 23, 24]]),\n",[204,99687,99688],{"class":206,"line":1698},[204,99689,99690],{"class":319}," array([[25, 26, 27, 28, 29, 30],\n",[204,99692,99693],{"class":206,"line":1703},[204,99694,99695],{"class":319},"        [31, 32, 33, 34, 35, 36]])]\n",[204,99697,99698],{"class":206,"line":1709},[204,99699,99700],{"class":319}," '''\n",[204,99702,99703],{"class":206,"line":1714},[204,99704,99560],{"class":273},[204,99706,99707,99710,99712,99714,99716],{"class":206,"line":1728},[204,99708,99709],{"class":214},"np.split(aa,[",[204,99711,292],{"class":263},[204,99713,591],{"class":214},[204,99715,532],{"class":263},[204,99717,4743],{"class":214},[204,99719,99720],{"class":206,"line":1733},[204,99721,95850],{"class":273},[204,99723,99724],{"class":206,"line":1739},[204,99725,94014],{"class":319},[204,99727,99728],{"class":206,"line":1760},[204,99729,99670],{"class":319},[204,99731,99732],{"class":206,"line":1765},[204,99733,99675],{"class":319},[204,99735,99736],{"class":206,"line":1779},[204,99737,99680],{"class":319},[204,99739,99740],{"class":206,"line":1784},[204,99741,99742],{"class":319},"        [19, 20, 21, 22, 23, 24],\n",[204,99744,99745],{"class":206,"line":1813},[204,99746,99747],{"class":319},"        [25, 26, 27, 28, 29, 30]]),\n",[204,99749,99750],{"class":206,"line":1818},[204,99751,99752],{"class":319}," array([[31, 32, 33, 34, 35, 36]])]\n",[204,99754,99755],{"class":206,"line":1835},[204,99756,94014],{"class":319},[204,99758,99759],{"class":206,"line":1840},[204,99760,99761],{"class":273},"#axis=1 按照列来分\n",[204,99763,99764,99766,99768,99770,99772,99774,99776],{"class":206,"line":1845},[204,99765,99653],{"class":214},[204,99767,286],{"class":263},[204,99769,591],{"class":214},[204,99771,47600],{"class":5303},[204,99773,260],{"class":210},[204,99775,431],{"class":263},[204,99777,221],{"class":214},[204,99779,99780],{"class":206,"line":1850},[204,99781,95850],{"class":273},[204,99783,99784],{"class":206,"line":1864},[204,99785,94014],{"class":319},[204,99787,99788],{"class":206,"line":1869},[204,99789,99790],{"class":319},"[array([[ 1,  2],\n",[204,99792,99793],{"class":206,"line":2663},[204,99794,99795],{"class":319},"        [ 7,  8],\n",[204,99797,99798],{"class":206,"line":2677},[204,99799,99800],{"class":319},"        [13, 14],\n",[204,99802,99803],{"class":206,"line":2685},[204,99804,99805],{"class":319},"        [19, 20],\n",[204,99807,99808],{"class":206,"line":2690},[204,99809,99810],{"class":319},"        [25, 26],\n",[204,99812,99813],{"class":206,"line":2696},[204,99814,99815],{"class":319},"        [31, 32]]),\n",[204,99817,99818],{"class":206,"line":2702},[204,99819,99820],{"class":319}," array([[ 3,  4],\n",[204,99822,99823],{"class":206,"line":2707},[204,99824,99825],{"class":319},"        [ 9, 10],\n",[204,99827,99828],{"class":206,"line":8035},[204,99829,99830],{"class":319},"        [15, 16],\n",[204,99832,99833],{"class":206,"line":8059},[204,99834,99835],{"class":319},"        [21, 22],\n",[204,99837,99838],{"class":206,"line":8064},[204,99839,99840],{"class":319},"        [27, 28],\n",[204,99842,99843],{"class":206,"line":8070},[204,99844,99845],{"class":319},"        [33, 34]]),\n",[204,99847,99848],{"class":206,"line":8097},[204,99849,99850],{"class":319}," array([[ 5,  6],\n",[204,99852,99853],{"class":206,"line":8102},[204,99854,99855],{"class":319},"        [11, 12],\n",[204,99857,99858],{"class":206,"line":8108},[204,99859,99860],{"class":319},"        [17, 18],\n",[204,99862,99863],{"class":206,"line":8120},[204,99864,99865],{"class":319},"        [23, 24],\n",[204,99867,99868],{"class":206,"line":8132},[204,99869,99870],{"class":319},"        [29, 30],\n",[204,99872,99873],{"class":206,"line":8144},[204,99874,99875],{"class":319},"        [35, 36]])]\n",[204,99877,99878],{"class":206,"line":9803},[204,99879,99700],{"class":319},[204,99881,99882],{"class":206,"line":9828},[204,99883,99560],{"class":273},[204,99885,99886,99888,99890,99892,99894,99896,99898,99900,99902],{"class":206,"line":9851},[204,99887,99709],{"class":214},[204,99889,431],{"class":263},[204,99891,591],{"class":214},[204,99893,292],{"class":263},[204,99895,41695],{"class":214},[204,99897,47600],{"class":5303},[204,99899,260],{"class":210},[204,99901,431],{"class":263},[204,99903,221],{"class":214},[204,99905,99906],{"class":206,"line":9875},[204,99907,93650],{"class":273},[204,99909,99910],{"class":206,"line":9880},[204,99911,94014],{"class":319},[204,99913,99914],{"class":206,"line":9885},[204,99915,99916],{"class":319},"[array([[ 1],\n",[204,99918,99919],{"class":206,"line":9890},[204,99920,99921],{"class":319},"        [ 7],\n",[204,99923,99924],{"class":206,"line":9899},[204,99925,99926],{"class":319},"        [13],\n",[204,99928,99929],{"class":206,"line":9904},[204,99930,99931],{"class":319},"        [19],\n",[204,99933,99934],{"class":206,"line":9910},[204,99935,99936],{"class":319},"        [25],\n",[204,99938,99939],{"class":206,"line":9931},[204,99940,99941],{"class":319},"        [31]]),\n",[204,99943,99944],{"class":206,"line":9937},[204,99945,99946],{"class":319}," array([[ 2],\n",[204,99948,99949],{"class":206,"line":9951},[204,99950,99951],{"class":319},"        [ 8],\n",[204,99953,99954],{"class":206,"line":9957},[204,99955,99956],{"class":319},"        [14],\n",[204,99958,99959],{"class":206,"line":9984},[204,99960,99961],{"class":319},"        [20],\n",[204,99963,99964],{"class":206,"line":9993},[204,99965,99966],{"class":319},"        [26],\n",[204,99968,99969],{"class":206,"line":9999},[204,99970,99971],{"class":319},"        [32]]),\n",[204,99973,99974],{"class":206,"line":10007},[204,99975,99976],{"class":319}," array([[ 3,  4,  5,  6],\n",[204,99978,99979],{"class":206,"line":10012},[204,99980,99981],{"class":319},"        [ 9, 10, 11, 12],\n",[204,99983,99984],{"class":206,"line":16691},[204,99985,99986],{"class":319},"        [15, 16, 17, 18],\n",[204,99988,99989],{"class":206,"line":16697},[204,99990,99991],{"class":319},"        [21, 22, 23, 24],\n",[204,99993,99994],{"class":206,"line":16720},[204,99995,99996],{"class":319},"        [27, 28, 29, 30],\n",[204,99998,99999],{"class":206,"line":16726},[204,100000,100001],{"class":319},"        [33, 34, 35, 36]])]\n",[204,100003,100004],{"class":206,"line":16749},[204,100005,94014],{"class":319},[204,100007,100008],{"class":206,"line":16763},[204,100009,100010],{"class":273},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[204,100012,100013,100016,100018],{"class":206,"line":16783},[204,100014,100015],{"class":214},"np.vsplit(aa,",[204,100017,286],{"class":263},[204,100019,221],{"class":214},[204,100021,100022],{"class":206,"line":16789},[204,100023,93650],{"class":273},[204,100025,100026],{"class":206,"line":16800},[204,100027,94014],{"class":319},[204,100029,100030],{"class":206,"line":16823},[204,100031,99670],{"class":319},[204,100033,100034],{"class":206,"line":16845},[204,100035,99675],{"class":319},[204,100037,100038],{"class":206,"line":16850},[204,100039,99680],{"class":319},[204,100041,100042],{"class":206,"line":16856},[204,100043,99685],{"class":319},[204,100045,100046],{"class":206,"line":16870},[204,100047,99690],{"class":319},[204,100049,100050],{"class":206,"line":16883},[204,100051,99695],{"class":319},[204,100053,100054],{"class":206,"line":16888},[204,100055,94014],{"class":319},[204,100057,100058,100061,100063],{"class":206,"line":16902},[204,100059,100060],{"class":214},"np.hsplit(aa,",[204,100062,286],{"class":263},[204,100064,221],{"class":214},[204,100066,100067],{"class":206,"line":16907},[204,100068,93650],{"class":273},[204,100070,100071],{"class":206,"line":16913},[204,100072,94014],{"class":319},[204,100074,100075],{"class":206,"line":16918},[204,100076,99790],{"class":319},[204,100078,100079],{"class":206,"line":16932},[204,100080,99795],{"class":319},[204,100082,100083],{"class":206,"line":16937},[204,100084,99800],{"class":319},[204,100086,100087],{"class":206,"line":16942},[204,100088,99805],{"class":319},[204,100090,100091],{"class":206,"line":16956},[204,100092,99810],{"class":319},[204,100094,100095],{"class":206,"line":16968},[204,100096,99815],{"class":319},[204,100098,100099],{"class":206,"line":16973},[204,100100,99820],{"class":319},[204,100102,100103],{"class":206,"line":16986},[204,100104,99825],{"class":319},[204,100106,100107],{"class":206,"line":16991},[204,100108,99830],{"class":319},[204,100110,100111],{"class":206,"line":16996},[204,100112,99835],{"class":319},[204,100114,100115],{"class":206,"line":17001},[204,100116,99840],{"class":319},[204,100118,100119],{"class":206,"line":17014},[204,100120,99845],{"class":319},[204,100122,100123],{"class":206,"line":17019},[204,100124,99850],{"class":319},[204,100126,100127],{"class":206,"line":32719},[204,100128,99855],{"class":319},[204,100130,100131],{"class":206,"line":32725},[204,100132,99860],{"class":319},[204,100134,100135],{"class":206,"line":32731},[204,100136,99865],{"class":319},[204,100138,100139],{"class":206,"line":32737},[204,100140,99870],{"class":319},[204,100142,100143],{"class":206,"line":32743},[204,100144,99875],{"class":319},[204,100146,100147],{"class":206,"line":32754},[204,100148,94014],{"class":319},[204,100150,100151,100154,100156,100158,100160],{"class":206,"line":32760},[204,100152,100153],{"class":214},"np.vsplit(aa,[",[204,100155,292],{"class":263},[204,100157,591],{"class":214},[204,100159,532],{"class":263},[204,100161,4743],{"class":214},[204,100163,100164],{"class":206,"line":32780},[204,100165,93650],{"class":273},[204,100167,100168],{"class":206,"line":32786},[204,100169,94014],{"class":319},[204,100171,100172],{"class":206,"line":32797},[204,100173,99670],{"class":319},[204,100175,100176],{"class":206,"line":32803},[204,100177,99675],{"class":319},[204,100179,100180],{"class":206,"line":32809},[204,100181,99680],{"class":319},[204,100183,100184],{"class":206,"line":32815},[204,100185,99742],{"class":319},[204,100187,100188],{"class":206,"line":32821},[204,100189,99747],{"class":319},[204,100191,100192],{"class":206,"line":32827},[204,100193,99752],{"class":319},[204,100195,100196],{"class":206,"line":32833},[204,100197,99700],{"class":319},[5213,100199,100200],{},"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":125,"searchDepth":126,"depth":126,"links":100202},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99468,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100209,"title":100210,"body":100211,"description":132,"extension":133,"meta":100705,"navigation":135,"path":100706,"seo":100707,"stem":100708,"__hash__":100709},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100212,"toc":100696},[100213,100216,100219,100244,100248,100307,100359,100363,100365,100401,100455,100457,100495,100566,100570,100575,100579,100582,100615,100618,100622,100625,100628,100631,100634,100639,100643,100646,100649,100652,100655,100660,100664,100669,100672,100693],[10,100214,100210],{"id":100215},"_9数学函数",[19,100217,100218],{},"补充回顾：python的列表推导式",[196,100220,100222],{"className":30464,"code":100221,"language":30466,"meta":125,"style":125},"[1\u002Fi for i in a]\n",[81,100223,100224],{"__ignoreMap":125},[204,100225,100226,100228,100230,100232,100235,100237,100239,100241],{"class":206,"line":207},[204,100227,1103],{"class":214},[204,100229,431],{"class":263},[204,100231,797],{"class":210},[204,100233,100234],{"class":214},"i ",[204,100236,3111],{"class":210},[204,100238,9525],{"class":214},[204,100240,26129],{"class":210},[204,100242,100243],{"class":214}," a]\n",[14,100245,100247],{"id":100246},"_91-求倒数","9.1 求倒数",[196,100249,100251],{"className":30464,"code":100250,"language":30466,"meta":125,"style":125},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[81,100252,100253,100258,100286,100298],{"__ignoreMap":125},[204,100254,100255],{"class":206,"line":207},[204,100256,100257],{"class":273},"#数组求倒数\n",[204,100259,100260,100262,100264,100266,100268,100270,100272,100274,100276,100278,100280,100282,100284],{"class":206,"line":126},[204,100261,62],{"class":214},[204,100263,260],{"class":210},[204,100265,1103],{"class":214},[204,100267,431],{"class":263},[204,100269,591],{"class":214},[204,100271,292],{"class":263},[204,100273,591],{"class":214},[204,100275,286],{"class":263},[204,100277,591],{"class":214},[204,100279,506],{"class":263},[204,100281,591],{"class":214},[204,100283,532],{"class":263},[204,100285,33332],{"class":214},[204,100287,100288,100290,100292,100295],{"class":206,"line":131},[204,100289,476],{"class":214},[204,100291,260],{"class":210},[204,100293,100294],{"class":214},"np.array(a)",[204,100296,100297],{"class":273},"#将列表转换为数组\n",[204,100299,100300,100302,100304],{"class":206,"line":1281},[204,100301,431],{"class":263},[204,100303,797],{"class":210},[204,100305,100306],{"class":214},"b\n",[196,100308,100310],{"className":30464,"code":100309,"language":30466,"meta":125,"style":125},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[81,100311,100312,100340,100349,100354],{"__ignoreMap":125},[204,100313,100314,100316,100318,100320,100322,100324,100326,100328,100330,100332,100334,100336,100338],{"class":206,"line":207},[204,100315,62],{"class":214},[204,100317,260],{"class":210},[204,100319,1103],{"class":214},[204,100321,431],{"class":263},[204,100323,591],{"class":214},[204,100325,292],{"class":263},[204,100327,591],{"class":214},[204,100329,286],{"class":263},[204,100331,591],{"class":214},[204,100333,506],{"class":263},[204,100335,591],{"class":214},[204,100337,532],{"class":263},[204,100339,33332],{"class":214},[204,100341,100342,100344,100346],{"class":206,"line":126},[204,100343,476],{"class":214},[204,100345,260],{"class":210},[204,100347,100348],{"class":214},"np.array(a)\n",[204,100350,100351],{"class":206,"line":131},[204,100352,100353],{"class":273},"#调用numpy中的函数reciprocal()\n",[204,100355,100356],{"class":206,"line":1281},[204,100357,100358],{"class":214},"np.reciprocal(b)\n",[14,100360,100362],{"id":100361},"_92-求平方","9.2 求平方",[19,100364,94616],{},[196,100366,100368],{"className":30464,"code":100367,"language":30466,"meta":125,"style":125},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[81,100369,100370,100375,100380,100396],{"__ignoreMap":125},[204,100371,100372],{"class":206,"line":207},[204,100373,100374],{"class":273},"#square()，求平方\n",[204,100376,100377],{"class":206,"line":126},[204,100378,100379],{"class":273},"#一维数组\n",[204,100381,100382,100384,100386,100388,100390,100392,100394],{"class":206,"line":131},[204,100383,62],{"class":214},[204,100385,260],{"class":210},[204,100387,93088],{"class":214},[204,100389,431],{"class":263},[204,100391,591],{"class":214},[204,100393,659],{"class":263},[204,100395,221],{"class":214},[204,100397,100398],{"class":206,"line":1281},[204,100399,100400],{"class":214},"np.square(a)\n",[196,100402,100404],{"className":30464,"code":100403,"language":30466,"meta":125,"style":125},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[81,100405,100406,100411,100416,100437],{"__ignoreMap":125},[204,100407,100408],{"class":206,"line":207},[204,100409,100410],{"class":273},"#或者通过循环遍历的形式来计算\n",[204,100412,100413],{"class":206,"line":126},[204,100414,100415],{"class":273},"#这是一个列表\n",[204,100417,100418,100421,100423,100425,100427,100429,100431,100434],{"class":206,"line":131},[204,100419,100420],{"class":214},"[i",[204,100422,668],{"class":210},[204,100424,100234],{"class":214},[204,100426,3111],{"class":210},[204,100428,9525],{"class":214},[204,100430,26129],{"class":210},[204,100432,100433],{"class":214}," a]",[204,100435,100436],{"class":273},"#这个求完之后在数列当中\n",[204,100438,100439,100442,100444,100446,100448,100450,100452],{"class":206,"line":1281},[204,100440,100441],{"class":214},"np.array([i",[204,100443,668],{"class":210},[204,100445,100234],{"class":214},[204,100447,3111],{"class":210},[204,100449,9525],{"class":214},[204,100451,26129],{"class":210},[204,100453,100454],{"class":214}," a])\n",[19,100456,93377],{},[196,100458,100460],{"className":30464,"code":100459,"language":30466,"meta":125,"style":125},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[81,100461,100462,100466,100490],{"__ignoreMap":125},[204,100463,100464],{"class":206,"line":207},[204,100465,93387],{"class":273},[204,100467,100468,100470,100472,100474,100476,100478,100480,100482,100484,100486,100488],{"class":206,"line":126},[204,100469,93392],{"class":214},[204,100471,260],{"class":210},[204,100473,93088],{"class":214},[204,100475,431],{"class":263},[204,100477,591],{"class":214},[204,100479,736],{"class":263},[204,100481,93093],{"class":214},[204,100483,506],{"class":263},[204,100485,591],{"class":214},[204,100487,286],{"class":263},[204,100489,221],{"class":214},[204,100491,100492],{"class":206,"line":131},[204,100493,100494],{"class":214},"np.square(aa)\n",[196,100496,100498],{"className":30464,"code":100497,"language":30466,"meta":125,"style":125},"#传统的方式\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",[81,100499,100500,100505,100514,100530,100546,100561],{"__ignoreMap":125},[204,100501,100502],{"class":206,"line":207},[204,100503,100504],{"class":273},"#传统的方式\n",[204,100506,100507,100509,100511],{"class":206,"line":126},[204,100508,98273],{"class":214},[204,100510,260],{"class":210},[204,100512,100513],{"class":214},"np.empty_like(aa)\n",[204,100515,100516,100518,100520,100522,100524,100526,100528],{"class":206,"line":131},[204,100517,3111],{"class":210},[204,100519,9525],{"class":214},[204,100521,26129],{"class":210},[204,100523,32529],{"class":263},[204,100525,215],{"class":214},[204,100527,506],{"class":263},[204,100529,30872],{"class":214},[204,100531,100532,100534,100536,100538,100540,100542,100544],{"class":206,"line":1281},[204,100533,3287],{"class":210},[204,100535,9587],{"class":214},[204,100537,26129],{"class":210},[204,100539,32529],{"class":263},[204,100541,215],{"class":214},[204,100543,286],{"class":263},[204,100545,30872],{"class":214},[204,100547,100548,100551,100553,100556,100558],{"class":206,"line":1287},[204,100549,100550],{"class":214},"        bb[i,j]",[204,100552,260],{"class":210},[204,100554,100555],{"class":214},"aa[i,j]",[204,100557,668],{"class":210},[204,100559,100560],{"class":214},"aa[i,j]\n",[204,100562,100563],{"class":206,"line":1301},[204,100564,100565],{"class":214},"bb\n",[14,100567,100569],{"id":100568},"_93-求各元素的符号","9.3 求各元素的符号",[19,100571,100572],{},[23,100573],{"alt":125,"src":100574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100576,100578],{"id":100577},"_94-modf函数","9.4 modf函数",[19,100580,100581],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[196,100583,100585],{"className":30464,"code":100584,"language":30466,"meta":125,"style":125},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[81,100586,100587,100610],{"__ignoreMap":125},[204,100588,100589,100591,100593,100595,100597,100599,100601,100603,100605,100608],{"class":206,"line":207},[204,100590,62],{"class":214},[204,100592,260],{"class":210},[204,100594,93088],{"class":214},[204,100596,745],{"class":210},[204,100598,659],{"class":263},[204,100600,591],{"class":214},[204,100602,659],{"class":263},[204,100604,591],{"class":214},[204,100606,100607],{"class":263},"0.3",[204,100609,221],{"class":214},[204,100611,100612],{"class":206,"line":126},[204,100613,100614],{"class":214},"np.modf(a)\n",[19,100616,100617],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100619,100621],{"id":100620},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100623,100624],{},"np.cell()",[19,100626,100627],{},"np.floor()",[19,100629,100630],{},"np.rint()",[19,100632,100633],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100635,100636],{},[23,100637],{"alt":125,"src":100638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100640,100642],{"id":100641},"_96-around函数","9.6 around()函数",[19,100644,100645],{},"around()函数也可以实现对数的小数位数进行操作",[19,100647,100648],{},"其中的参数：",[19,100650,100651],{},"1.要传的数组",[19,100653,100654],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100656,100657],{},[23,100658],{"alt":125,"src":100659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100661,100663],{"id":100662},"_97-三角函数","9.7 三角函数",[19,100665,100666],{},[23,100667],{"alt":125,"src":100668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100670,100671],{},"引入图像模块非常重要",[196,100673,100675],{"className":30464,"code":100674,"language":30466,"meta":125,"style":125},"from matplotlib import pyplot as plt\n",[81,100676,100677],{"__ignoreMap":125},[204,100678,100679,100681,100684,100686,100689,100691],{"class":206,"line":207},[204,100680,30823],{"class":210},[204,100682,100683],{"class":214}," matplotlib ",[204,100685,30478],{"class":210},[204,100687,100688],{"class":214}," pyplot ",[204,100690,31469],{"class":210},[204,100692,31523],{"class":214},[5213,100694,100695],{},"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":125,"searchDepth":126,"depth":126,"links":100697},[100698,100699,100700,100701,100702,100703,100704],{"id":100246,"depth":126,"text":100247},{"id":100361,"depth":126,"text":100362},{"id":100568,"depth":126,"text":100569},{"id":100577,"depth":126,"text":100578},{"id":100620,"depth":126,"text":100621},{"id":100641,"depth":126,"text":100642},{"id":100662,"depth":126,"text":100663},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100210,"description":132},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100711,"title":100712,"body":100713,"description":132,"extension":133,"meta":100717,"navigation":135,"path":100718,"seo":100719,"stem":100720,"__hash__":100721},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100714,"toc":100715},[],{"title":125,"searchDepth":126,"depth":126,"links":100716},[],{"category":50506},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100712,"description":132},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100723,"title":100724,"body":100725,"description":125,"extension":133,"meta":102732,"navigation":135,"path":102733,"seo":102734,"stem":102735,"__hash__":102736},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100726,"toc":102708},[100727,100730,100734,100737,100740,100746,100749,100772,100775,100809,100812,100853,100857,100860,100953,100956,101000,101003,101020,101023,101037,101040,101043,101088,101091,101127,101131,101134,101140,101145,101165,101169,101172,101238,101241,101259,101263,101266,101295,101305,101311,101315,101318,101324,101335,101339,101342,101372,101375,101655,101658,101661,101672,101675,101678,101700,101707,101710,101728,101731,101734,101748,101756,101759,101785,101791,101794,101797,101807,101819,101839,101848,101868,101878,101902,101915,101929,101934,101975,101992,102017,102029,102049,102055,102100,102119,102136,102149,102165,102172,102184,102193,102228,102249,102274,102287,102311,102326,102351,102354,102375,102384,102387,102398,102402,102405,102411,102423,102430,102434,102437,102449,102452,102466,102469,102479,102489,102492,102532,102535,102539,102545,102548,102562,102566,102569,102602,102606,102609,102632,102640,102643,102649,102655,102658,102661,102689,102693,102696,102702,102705],[10,100728,100724],{"id":100729},"_1环境安装与第一个-mujoco-程序",[14,100731,100733],{"id":100732},"_1目标说明","1.目标说明",[19,100735,100736],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100738,100739],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[196,100741,100744],{"className":100742,"code":100743,"language":5274,"meta":125},[5272],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[81,100745,100743],{"__ignoreMap":125},[19,100747,100748],{},"需要掌握:",[161,100750,100751,100754,100757,100762,100767],{},[71,100752,100753],{},"Fedora 44 下 MuJoCo 的系统依赖",[71,100755,100756],{},"Python 虚拟环境创建",[71,100758,100759],{},[81,100760,100761],{},"mujoco.MjModel",[71,100763,100764],{},[81,100765,100766],{},"mujoco.MjData",[71,100768,100769],{},[81,100770,100771],{},"mujoco.mj_step(model, data)",[19,100773,100774],{},"MuJoCo 中最重要的两个对象:",[352,100776,100777,100787],{},[355,100778,100779],{},[358,100780,100781,100784],{},[361,100782,100783],{"align":23823},"对象",[361,100785,100786],{"align":23823},"含义",[398,100788,100789,100799],{},[358,100790,100791,100796],{},[403,100792,100793],{"align":23823},[81,100794,100795],{},"MjModel",[403,100797,100798],{"align":23823},"模型结构，来自 XML，基本不随时间变化",[358,100800,100801,100806],{},[403,100802,100803],{"align":23823},[81,100804,100805],{},"MjData",[403,100807,100808],{"align":23823},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100810,100811],{},"可以先用一个类比理解：",[352,100813,100814,100824],{},[355,100815,100816],{},[358,100817,100818,100821],{},[361,100819,100820],{"align":23823},"类比",[361,100822,100823],{"align":23823},"MuJoCo 对象",[398,100825,100826,100835,100844],{},[358,100827,100828,100831],{},[403,100829,100830],{"align":23823},"游戏地图和角色配置",[403,100832,100833],{"align":23823},[81,100834,100795],{},[358,100836,100837,100840],{},[403,100838,100839],{"align":23823},"游戏运行到当前帧的状态",[403,100841,100842],{"align":23823},[81,100843,100805],{},[358,100845,100846,100849],{},[403,100847,100848],{"align":23823},"前进一帧",[403,100850,100851],{"align":23823},[81,100852,100771],{},[14,100854,100856],{"id":100855},"_2环境与依赖安装","2.环境与依赖安装",[19,100858,100859],{},"Fedora 44 系统依赖:",[196,100861,100863],{"className":23909,"code":100862,"language":23911,"meta":125,"style":125},"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",[81,100864,100865,100877,100890,100903,100913,100923,100942],{"__ignoreMap":125},[204,100866,100867,100869,100871,100873,100875],{"class":206,"line":207},[204,100868,24663],{"class":2049},[204,100870,26401],{"class":319},[204,100872,23921],{"class":319},[204,100874,26486],{"class":263},[204,100876,24765],{"class":263},[204,100878,100879,100882,100885,100888],{"class":206,"line":126},[204,100880,100881],{"class":319},"  python3",[204,100883,100884],{"class":319}," python3-pip",[204,100886,100887],{"class":319}," python3-virtualenv",[204,100889,24765],{"class":263},[204,100891,100892,100895,100898,100901],{"class":206,"line":131},[204,100893,100894],{"class":319},"  mesa-libGL",[204,100896,100897],{"class":319}," mesa-libGLU",[204,100899,100900],{"class":319}," mesa-dri-drivers",[204,100902,24765],{"class":263},[204,100904,100905,100908,100911],{"class":206,"line":1281},[204,100906,100907],{"class":319},"  libglvnd-glx",[204,100909,100910],{"class":319}," libglvnd-opengl",[204,100912,24765],{"class":263},[204,100914,100915,100918,100921],{"class":206,"line":1287},[204,100916,100917],{"class":319},"  glfw",[204,100919,100920],{"class":319}," glfw-devel",[204,100922,24765],{"class":263},[204,100924,100925,100928,100931,100934,100937,100940],{"class":206,"line":1301},[204,100926,100927],{"class":319},"  libX11",[204,100929,100930],{"class":319}," libXcursor",[204,100932,100933],{"class":319}," libXi",[204,100935,100936],{"class":319}," libXinerama",[204,100938,100939],{"class":319}," libXrandr",[204,100941,24765],{"class":263},[204,100943,100944,100947,100950],{"class":206,"line":1307},[204,100945,100946],{"class":319},"  gcc",[204,100948,100949],{"class":319}," gcc-c++",[204,100951,100952],{"class":319}," make\n",[19,100954,100955],{},"创建 Python 环境:",[196,100957,100959],{"className":23909,"code":100958,"language":23911,"meta":125,"style":125},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[81,100960,100961,100975,100983],{"__ignoreMap":125},[204,100962,100963,100966,100969,100972],{"class":206,"line":207},[204,100964,100965],{"class":2049},"python3",[204,100967,100968],{"class":263}," -m",[204,100970,100971],{"class":319}," venv",[204,100973,100974],{"class":319}," .venv\n",[204,100976,100977,100980],{"class":206,"line":126},[204,100978,100979],{"class":263},"source",[204,100981,100982],{"class":319}," .venv\u002Fbin\u002Factivate\n",[204,100984,100985,100987,100989,100992,100994,100997],{"class":206,"line":131},[204,100986,30466],{"class":2049},[204,100988,100968],{"class":263},[204,100990,100991],{"class":319}," pip",[204,100993,23921],{"class":319},[204,100995,100996],{"class":263}," --upgrade",[204,100998,100999],{"class":319}," pip\n",[19,101001,101002],{},"pip 安装:",[196,101004,101006],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},"pip install \"mujoco>=2.3\" numpy\n",[81,101007,101008],{"__ignoreMap":125},[204,101009,101010,101012,101014,101017],{"class":206,"line":207},[204,101011,23918],{"class":2049},[204,101013,23921],{"class":319},[204,101015,101016],{"class":319}," \"mujoco>=2.3\"",[204,101018,101019],{"class":319}," numpy\n",[19,101021,101022],{},"安装完成后，先做最小检查：",[196,101024,101026],{"className":23909,"code":101025,"language":23911,"meta":125,"style":125},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[81,101027,101028],{"__ignoreMap":125},[204,101029,101030,101032,101034],{"class":206,"line":207},[204,101031,30466],{"class":2049},[204,101033,30444],{"class":263},[204,101035,101036],{"class":319}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101038,101039],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101041,101042],{},"conda 安装:",[196,101044,101046],{"className":23909,"code":101045,"language":23911,"meta":125,"style":125},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[81,101047,101048,101068,101078],{"__ignoreMap":125},[204,101049,101050,101052,101054,101056,101059,101062,101065],{"class":206,"line":207},[204,101051,30416],{"class":2049},[204,101053,29262],{"class":319},[204,101055,25202],{"class":263},[204,101057,101058],{"class":319}," mujoco-study",[204,101060,101061],{"class":319}," python=",[204,101063,101064],{"class":263},"3.10",[204,101066,101067],{"class":263}," -y\n",[204,101069,101070,101072,101075],{"class":206,"line":126},[204,101071,30416],{"class":2049},[204,101073,101074],{"class":319}," activate",[204,101076,101077],{"class":319}," mujoco-study\n",[204,101079,101080,101082,101084,101086],{"class":206,"line":131},[204,101081,23918],{"class":2049},[204,101083,23921],{"class":319},[204,101085,101016],{"class":319},[204,101087,101019],{"class":319},[19,101089,101090],{},"版本冲突说明:",[161,101092,101093,101099,101108,101117],{},[71,101094,101095,101096,28471],{},"不要安装 ",[81,101097,101098],{},"mujoco-py",[71,101100,101101,101102,43,101104,101107],{},"如果旧项目里同时安装了 ",[81,101103,101098],{},[81,101105,101106],{},"mujoco","，建议新建干净虚拟环境。",[71,101109,101110,101113,101114,28471],{},[81,101111,101112],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[81,101115,101116],{},"~\u002F.mujoco\u002Fmujoco210",[71,101118,101119,101120,82625,101123,101126],{},"离屏渲染可能涉及 OpenGL 后端，",[81,101121,101122],{},"MUJOCO_GL=egl",[81,101124,101125],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101128,101130],{"id":101129},"_3核心概念解释","3.核心概念解释",[19,101132,101133],{},"MuJoCo 的基本执行流程:",[196,101135,101138],{"className":101136,"code":101137,"language":5274,"meta":125},[5272],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[81,101139,101137],{"__ignoreMap":125},[19,101141,101142,101144],{},[81,101143,100795],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101146,101147,101149,101150,426,101153,426,101156,426,101159,426,101162,28471],{},[81,101148,100805],{}," 存放仿真运行时状态，例如 ",[81,101151,101152],{},"data.time",[81,101154,101155],{},"data.qpos",[81,101157,101158],{},"data.qvel",[81,101160,101161],{},"data.ctrl",[81,101163,101164],{},"data.xpos",[49,101166,101168],{"id":101167},"xml-是什么","XML 是什么",[19,101170,101171],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[196,101173,101175],{"className":53153,"code":101174,"language":53155,"meta":125,"style":125},"\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",[81,101176,101177,101199,101230],{"__ignoreMap":125},[204,101178,101179,101181,101183,101185,101187,101189,101192,101194,101197],{"class":206,"line":207},[204,101180,1123],{"class":214},[204,101182,51886],{"class":51386},[204,101184,15007],{"class":2049},[204,101186,260],{"class":214},[204,101188,53577],{"class":319},[204,101190,101191],{"class":2049}," pos",[204,101193,260],{"class":214},[204,101195,101196],{"class":319},"\"0 0 1\"",[204,101198,51393],{"class":214},[204,101200,101201,101203,101206,101208,101210,101213,101215,101217,101219,101222,101224,101227],{"class":206,"line":126},[204,101202,52230],{"class":214},[204,101204,101205],{"class":51386},"geom",[204,101207,15007],{"class":2049},[204,101209,260],{"class":214},[204,101211,101212],{"class":319},"\"box_geom\"",[204,101214,53910],{"class":2049},[204,101216,260],{"class":214},[204,101218,53577],{"class":319},[204,101220,101221],{"class":2049}," size",[204,101223,260],{"class":214},[204,101225,101226],{"class":319},"\"0.1 0.1 0.1\"",[204,101228,101229],{"class":214},"\u002F>\n",[204,101231,101232,101234,101236],{"class":206,"line":131},[204,101233,51871],{"class":214},[204,101235,51886],{"class":51386},[204,101237,51393],{"class":214},[19,101239,101240],{},"这段意思是：",[161,101242,101243,101249,101256],{},[71,101244,101245,101246,101248],{},"创建一个叫 ",[81,101247,53800],{}," 的刚体。",[71,101250,101251,101252,101255],{},"它初始放在 ",[81,101253,101254],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[71,101257,101258],{},"它里面有一个盒子形状的几何体。",[49,101260,101262],{"id":101261},"timestep-是什么","timestep 是什么",[19,101264,101265],{},"XML 里的：",[196,101267,101269],{"className":53153,"code":101268,"language":53155,"meta":125,"style":125},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[81,101270,101271],{"__ignoreMap":125},[204,101272,101273,101275,101277,101280,101282,101285,101288,101290,101293],{"class":206,"line":207},[204,101274,1123],{"class":214},[204,101276,69252],{"class":51386},[204,101278,101279],{"class":2049}," timestep",[204,101281,260],{"class":214},[204,101283,101284],{"class":319},"\"0.01\"",[204,101286,101287],{"class":2049}," gravity",[204,101289,260],{"class":214},[204,101291,101292],{"class":319},"\"0 0 -9.81\"",[204,101294,101229],{"class":214},[19,101296,101297,101298,101301,101302,101304],{},"表示每调用一次 ",[81,101299,101300],{},"mj_step","，仿真时间前进 ",[81,101303,39072],{}," 秒。循环 100 次，大约就是 1 秒：",[196,101306,101309],{"className":101307,"code":101308,"language":5274,"meta":125},[5272],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[81,101310,101308],{"__ignoreMap":125},[49,101312,101314],{"id":101313},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101316,101317],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[196,101319,101322],{"className":101320,"code":101321,"language":5274,"meta":125},[5272],"x y z qw qx qy qz\n",[81,101323,101321],{"__ignoreMap":125},[19,101325,101326,101327,101330,101331,101334],{},"表示一个自由刚体的位置和姿态。其中 ",[81,101328,101329],{},"x y z"," 是位置，",[81,101332,101333],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101336,101338],{"id":101337},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101340,101341],{},"新建文件:",[196,101343,101345],{"className":23909,"code":101344,"language":23911,"meta":125,"style":125},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[81,101346,101347,101357,101364],{"__ignoreMap":125},[204,101348,101349,101352,101354],{"class":206,"line":207},[204,101350,101351],{"class":2049},"mkdir",[204,101353,29302],{"class":263},[204,101355,101356],{"class":319}," mujoco_tutorial\n",[204,101358,101359,101362],{"class":206,"line":126},[204,101360,101361],{"class":263},"cd",[204,101363,101356],{"class":319},[204,101365,101366,101369],{"class":206,"line":131},[204,101367,101368],{"class":2049},"touch",[204,101370,101371],{"class":319}," ch1_first_sim.py\n",[19,101373,101374],{},"写入:",[196,101376,101378],{"className":30464,"code":101377,"language":30466,"meta":125,"style":125},"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",[81,101379,101380,101387,101391,101395,101405,101410,101415,101419,101424,101429,101433,101438,101443,101448,101453,101458,101463,101467,101471,101475,101488,101502,101512,101516,101528,101540,101552,101564,101576,101580,101597,101602,101606,101617,101628,101632,101636,101650],{"__ignoreMap":125},[204,101381,101382,101384],{"class":206,"line":207},[204,101383,30478],{"class":210},[204,101385,101386],{"class":214}," mujoco\n",[204,101388,101389],{"class":206,"line":126},[204,101390,2486],{"emptyLinePlaceholder":135},[204,101392,101393],{"class":206,"line":131},[204,101394,2486],{"emptyLinePlaceholder":135},[204,101396,101397,101400,101402],{"class":206,"line":1281},[204,101398,101399],{"class":263},"XML",[204,101401,13651],{"class":210},[204,101403,101404],{"class":319}," \"\"\"\n",[204,101406,101407],{"class":206,"line":1287},[204,101408,101409],{"class":319},"\u003Cmujoco model=\"first_sim\">\n",[204,101411,101412],{"class":206,"line":1301},[204,101413,101414],{"class":319},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[204,101416,101417],{"class":206,"line":1307},[204,101418,2486],{"emptyLinePlaceholder":135},[204,101420,101421],{"class":206,"line":1398},[204,101422,101423],{"class":319},"  \u003Cworldbody>\n",[204,101425,101426],{"class":206,"line":1404},[204,101427,101428],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[204,101430,101431],{"class":206,"line":1416},[204,101432,2486],{"emptyLinePlaceholder":135},[204,101434,101435],{"class":206,"line":1698},[204,101436,101437],{"class":319},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[204,101439,101440],{"class":206,"line":1703},[204,101441,101442],{"class":319},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[204,101444,101445],{"class":206,"line":1709},[204,101446,101447],{"class":319},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[204,101449,101450],{"class":206,"line":1714},[204,101451,101452],{"class":319},"    \u003C\u002Fbody>\n",[204,101454,101455],{"class":206,"line":1728},[204,101456,101457],{"class":319},"  \u003C\u002Fworldbody>\n",[204,101459,101460],{"class":206,"line":1733},[204,101461,101462],{"class":319},"\u003C\u002Fmujoco>\n",[204,101464,101465],{"class":206,"line":1739},[204,101466,95784],{"class":319},[204,101468,101469],{"class":206,"line":1760},[204,101470,2486],{"emptyLinePlaceholder":135},[204,101472,101473],{"class":206,"line":1765},[204,101474,2486],{"emptyLinePlaceholder":135},[204,101476,101477,101479,101481,101484,101486],{"class":206,"line":1779},[204,101478,32033],{"class":210},[204,101480,2059],{"class":2049},[204,101482,101483],{"class":214},"() -> ",[204,101485,95772],{"class":263},[204,101487,3825],{"class":214},[204,101489,101490,101493,101495,101498,101500],{"class":206,"line":1784},[204,101491,101492],{"class":214},"    model ",[204,101494,260],{"class":210},[204,101496,101497],{"class":214}," mujoco.MjModel.from_xml_string(",[204,101499,101399],{"class":263},[204,101501,221],{"class":214},[204,101503,101504,101507,101509],{"class":206,"line":1813},[204,101505,101506],{"class":214},"    data ",[204,101508,260],{"class":210},[204,101510,101511],{"class":214}," mujoco.MjData(model)\n",[204,101513,101514],{"class":206,"line":1818},[204,101515,2486],{"emptyLinePlaceholder":135},[204,101517,101518,101520,101522,101525],{"class":206,"line":1835},[204,101519,31385],{"class":263},[204,101521,215],{"class":214},[204,101523,101524],{"class":319},"\"nq:\"",[204,101526,101527],{"class":214},", model.nq)\n",[204,101529,101530,101532,101534,101537],{"class":206,"line":1840},[204,101531,31385],{"class":263},[204,101533,215],{"class":214},[204,101535,101536],{"class":319},"\"nv:\"",[204,101538,101539],{"class":214},", model.nv)\n",[204,101541,101542,101544,101546,101549],{"class":206,"line":1845},[204,101543,31385],{"class":263},[204,101545,215],{"class":214},[204,101547,101548],{"class":319},"\"nu:\"",[204,101550,101551],{"class":214},", model.nu)\n",[204,101553,101554,101556,101558,101561],{"class":206,"line":1850},[204,101555,31385],{"class":263},[204,101557,215],{"class":214},[204,101559,101560],{"class":319},"\"initial time:\"",[204,101562,101563],{"class":214},", data.time)\n",[204,101565,101566,101568,101570,101573],{"class":206,"line":1864},[204,101567,31385],{"class":263},[204,101569,215],{"class":214},[204,101571,101572],{"class":319},"\"initial qpos:\"",[204,101574,101575],{"class":214},", data.qpos.copy())\n",[204,101577,101578],{"class":206,"line":1869},[204,101579,2486],{"emptyLinePlaceholder":135},[204,101581,101582,101584,101587,101589,101591,101593,101595],{"class":206,"line":2663},[204,101583,3287],{"class":210},[204,101585,101586],{"class":214}," _ ",[204,101588,26129],{"class":210},[204,101590,32529],{"class":263},[204,101592,215],{"class":214},[204,101594,524],{"class":263},[204,101596,30872],{"class":214},[204,101598,101599],{"class":206,"line":2677},[204,101600,101601],{"class":214},"        mujoco.mj_step(model, data)\n",[204,101603,101604],{"class":206,"line":2685},[204,101605,2486],{"emptyLinePlaceholder":135},[204,101607,101608,101610,101612,101615],{"class":206,"line":2690},[204,101609,31385],{"class":263},[204,101611,215],{"class":214},[204,101613,101614],{"class":319},"\"final time:\"",[204,101616,101563],{"class":214},[204,101618,101619,101621,101623,101626],{"class":206,"line":2696},[204,101620,31385],{"class":263},[204,101622,215],{"class":214},[204,101624,101625],{"class":319},"\"final qpos:\"",[204,101627,101575],{"class":214},[204,101629,101630],{"class":206,"line":2702},[204,101631,2486],{"emptyLinePlaceholder":135},[204,101633,101634],{"class":206,"line":2707},[204,101635,2486],{"emptyLinePlaceholder":135},[204,101637,101638,101640,101642,101645,101648],{"class":206,"line":8035},[204,101639,1617],{"class":210},[204,101641,31306],{"class":263},[204,101643,101644],{"class":210}," ==",[204,101646,101647],{"class":319}," \"__main__\"",[204,101649,3825],{"class":214},[204,101651,101652],{"class":206,"line":8059},[204,101653,101654],{"class":214},"    main()\n",[49,101656,101657],{"id":101657},"代码逐段解释",[19,101659,101660],{},"导入库：",[196,101662,101664],{"className":30464,"code":101663,"language":30466,"meta":125,"style":125},"import mujoco\n",[81,101665,101666],{"__ignoreMap":125},[204,101667,101668,101670],{"class":206,"line":207},[204,101669,30478],{"class":210},[204,101671,101386],{"class":214},[19,101673,101674],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101676,101677],{},"定义 XML：",[196,101679,101681],{"className":30464,"code":101680,"language":30466,"meta":125,"style":125},"XML = \"\"\"\n...\n\"\"\"\n",[81,101682,101683,101691,101696],{"__ignoreMap":125},[204,101684,101685,101687,101689],{"class":206,"line":207},[204,101686,101399],{"class":263},[204,101688,13651],{"class":210},[204,101690,101404],{"class":319},[204,101692,101693],{"class":206,"line":126},[204,101694,101695],{"class":319},"...\n",[204,101697,101698],{"class":206,"line":131},[204,101699,95784],{"class":319},[19,101701,101702,101703,101706],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[81,101704,101705],{},"freejoint"," 的方块。",[19,101708,101709],{},"编译模型：",[196,101711,101713],{"className":30464,"code":101712,"language":30466,"meta":125,"style":125},"model = mujoco.MjModel.from_xml_string(XML)\n",[81,101714,101715],{"__ignoreMap":125},[204,101716,101717,101720,101722,101724,101726],{"class":206,"line":207},[204,101718,101719],{"class":214},"model ",[204,101721,260],{"class":210},[204,101723,101497],{"class":214},[204,101725,101399],{"class":263},[204,101727,221],{"class":214},[19,101729,101730],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101732,101733],{},"创建数据：",[196,101735,101737],{"className":30464,"code":101736,"language":30466,"meta":125,"style":125},"data = mujoco.MjData(model)\n",[81,101738,101739],{"__ignoreMap":125},[204,101740,101741,101744,101746],{"class":206,"line":207},[204,101742,101743],{"class":214},"data ",[204,101745,260],{"class":210},[204,101747,101511],{"class":214},[19,101749,101750,101752,101753,101755],{},[81,101751,33487],{}," 会保存仿真当前状态。刚创建时，时间是 ",[81,101754,405],{},"，方块还在初始位置。",[19,101757,101758],{},"推进仿真：",[196,101760,101762],{"className":30464,"code":101761,"language":30466,"meta":125,"style":125},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[81,101763,101764,101780],{"__ignoreMap":125},[204,101765,101766,101768,101770,101772,101774,101776,101778],{"class":206,"line":207},[204,101767,3111],{"class":210},[204,101769,101586],{"class":214},[204,101771,26129],{"class":210},[204,101773,32529],{"class":263},[204,101775,215],{"class":214},[204,101777,524],{"class":263},[204,101779,30872],{"class":214},[204,101781,101782],{"class":206,"line":126},[204,101783,101784],{"class":214},"    mujoco.mj_step(model, data)\n",[19,101786,101787,101788,101790],{},"每次 ",[81,101789,101300],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[49,101792,101793],{"id":101793},"代码逐行细讲",[19,101795,101796],{},"下面把完整代码按新手视角拆开讲。",[196,101798,101799],{"className":30464,"code":101663,"language":30466,"meta":125,"style":125},[81,101800,101801],{"__ignoreMap":125},[204,101802,101803,101805],{"class":206,"line":207},[204,101804,30478],{"class":210},[204,101806,101386],{"class":214},[19,101808,101809,101811,101812,426,101814,426,101816,28471],{},[81,101810,30478],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[81,101813,100761],{},[81,101815,100766],{},[81,101817,101818],{},"mujoco.mj_step",[196,101820,101821],{"className":30464,"code":101680,"language":30466,"meta":125,"style":125},[81,101822,101823,101831,101835],{"__ignoreMap":125},[204,101824,101825,101827,101829],{"class":206,"line":207},[204,101826,101399],{"class":263},[204,101828,13651],{"class":210},[204,101830,101404],{"class":319},[204,101832,101833],{"class":206,"line":126},[204,101834,101695],{"class":319},[204,101836,101837],{"class":206,"line":131},[204,101838,95784],{"class":319},[19,101840,101841,101843,101844,101847],{},[81,101842,101399],{}," 是一个变量名。右边的三引号 ",[81,101845,101846],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[196,101849,101850],{"className":53153,"code":101409,"language":53155,"meta":125,"style":125},[81,101851,101852],{"__ignoreMap":125},[204,101853,101854,101856,101858,101861,101863,101866],{"class":206,"line":207},[204,101855,1123],{"class":214},[204,101857,101106],{"class":51386},[204,101859,101860],{"class":2049}," model",[204,101862,260],{"class":214},[204,101864,101865],{"class":319},"\"first_sim\"",[204,101867,51393],{"class":214},[19,101869,101870,101871,101874,101875,28471],{},"这是 XML 的根标签。",[81,101872,101873],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[81,101876,101877],{},"first_sim",[196,101879,101880],{"className":53153,"code":101268,"language":53155,"meta":125,"style":125},[81,101881,101882],{"__ignoreMap":125},[204,101883,101884,101886,101888,101890,101892,101894,101896,101898,101900],{"class":206,"line":207},[204,101885,1123],{"class":214},[204,101887,69252],{"class":51386},[204,101889,101279],{"class":2049},[204,101891,260],{"class":214},[204,101893,101284],{"class":319},[204,101895,101287],{"class":2049},[204,101897,260],{"class":214},[204,101899,101292],{"class":319},[204,101901,101229],{"class":214},[19,101903,101904,101906,101907,101910,101911,101914],{},[81,101905,69252],{}," 用来设置仿真参数。",[81,101908,101909],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[81,101912,101913],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[196,101916,101918],{"className":53153,"code":101917,"language":53155,"meta":125,"style":125},"\u003Cworldbody>\n",[81,101919,101920],{"__ignoreMap":125},[204,101921,101922,101924,101927],{"class":206,"line":207},[204,101923,1123],{"class":214},[204,101925,101926],{"class":51386},"worldbody",[204,101928,51393],{"class":214},[19,101930,101931,101933],{},[81,101932,101926],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[196,101935,101937],{"className":53153,"code":101936,"language":53155,"meta":125,"style":125},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[81,101938,101939],{"__ignoreMap":125},[204,101940,101941,101943,101945,101947,101949,101952,101954,101956,101959,101961,101963,101966,101968,101970,101973],{"class":206,"line":207},[204,101942,1123],{"class":214},[204,101944,101205],{"class":51386},[204,101946,15007],{"class":2049},[204,101948,260],{"class":214},[204,101950,101951],{"class":319},"\"floor\"",[204,101953,53910],{"class":2049},[204,101955,260],{"class":214},[204,101957,101958],{"class":319},"\"plane\"",[204,101960,101221],{"class":2049},[204,101962,260],{"class":214},[204,101964,101965],{"class":319},"\"2 2 0.1\"",[204,101967,78853],{"class":2049},[204,101969,260],{"class":214},[204,101971,101972],{"class":319},"\"0.8 0.8 0.8 1\"",[204,101974,101229],{"class":214},[19,101976,101977,101978,101980,101981,101984,101985,101988,101989,101991],{},"这行创建地面。",[81,101979,101205],{}," 是几何体。",[81,101982,101983],{},"name=\"floor\""," 是名字。",[81,101986,101987],{},"type=\"plane\""," 表示平面。",[81,101990,55196],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[196,101993,101995],{"className":53153,"code":101994,"language":53155,"meta":125,"style":125},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[81,101996,101997],{"__ignoreMap":125},[204,101998,101999,102001,102003,102005,102007,102009,102011,102013,102015],{"class":206,"line":207},[204,102000,1123],{"class":214},[204,102002,51886],{"class":51386},[204,102004,15007],{"class":2049},[204,102006,260],{"class":214},[204,102008,53577],{"class":319},[204,102010,101191],{"class":2049},[204,102012,260],{"class":214},[204,102014,101196],{"class":319},[204,102016,51393],{"class":214},[19,102018,102019,102020,28471,102022,102025,102026,102028],{},"这行创建一个刚体，名字叫 ",[81,102021,53800],{},[81,102023,102024],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[81,102027,101254],{},"，也就是离地面 1 米高。",[196,102030,102032],{"className":53153,"code":102031,"language":53155,"meta":125,"style":125},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[81,102033,102034],{"__ignoreMap":125},[204,102035,102036,102038,102040,102042,102044,102047],{"class":206,"line":207},[204,102037,1123],{"class":214},[204,102039,101705],{"class":51386},[204,102041,15007],{"class":2049},[204,102043,260],{"class":214},[204,102045,102046],{"class":319},"\"box_free\"",[204,102048,101229],{"class":214},[19,102050,102051,102052,102054],{},"这行很重要。",[81,102053,101705],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[196,102056,102058],{"className":53153,"code":102057,"language":53155,"meta":125,"style":125},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[81,102059,102060],{"__ignoreMap":125},[204,102061,102062,102064,102066,102068,102070,102072,102074,102076,102078,102080,102082,102084,102087,102089,102091,102093,102095,102098],{"class":206,"line":207},[204,102063,1123],{"class":214},[204,102065,101205],{"class":51386},[204,102067,15007],{"class":2049},[204,102069,260],{"class":214},[204,102071,101212],{"class":319},[204,102073,53910],{"class":2049},[204,102075,260],{"class":214},[204,102077,53577],{"class":319},[204,102079,101221],{"class":2049},[204,102081,260],{"class":214},[204,102083,101226],{"class":319},[204,102085,102086],{"class":2049}," mass",[204,102088,260],{"class":214},[204,102090,3764],{"class":319},[204,102092,78853],{"class":2049},[204,102094,260],{"class":214},[204,102096,102097],{"class":319},"\"1 0 0 1\"",[204,102099,101229],{"class":214},[19,102101,102102,102103,102106,102107,102110,102111,102114,102115,102118],{},"这行给 box body 添加一个盒子形状。",[81,102104,102105],{},"type=\"box\""," 表示形状是盒子。",[81,102108,102109],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[81,102112,102113],{},"mass=\"1\""," 表示质量是 1。",[81,102116,102117],{},"rgba=\"1 0 0 1\""," 表示红色。",[196,102120,102122],{"className":30464,"code":102121,"language":30466,"meta":125,"style":125},"def main() -> None:\n",[81,102123,102124],{"__ignoreMap":125},[204,102125,102126,102128,102130,102132,102134],{"class":206,"line":207},[204,102127,32033],{"class":210},[204,102129,2059],{"class":2049},[204,102131,101483],{"class":214},[204,102133,95772],{"class":263},[204,102135,3825],{"class":214},[19,102137,102138,102140,102141,102144,102145,102148],{},[81,102139,32033],{}," 用来定义函数。这里定义了一个叫 ",[81,102142,102143],{},"main"," 的函数。",[81,102146,102147],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[196,102150,102151],{"className":30464,"code":101712,"language":30466,"meta":125,"style":125},[81,102152,102153],{"__ignoreMap":125},[204,102154,102155,102157,102159,102161,102163],{"class":206,"line":207},[204,102156,101719],{"class":214},[204,102158,260],{"class":210},[204,102160,101497],{"class":214},[204,102162,101399],{"class":263},[204,102164,221],{"class":214},[19,102166,102167,102168,102171],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[81,102169,102170],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[196,102173,102174],{"className":30464,"code":101736,"language":30466,"meta":125,"style":125},[81,102175,102176],{"__ignoreMap":125},[204,102177,102178,102180,102182],{"class":206,"line":207},[204,102179,101743],{"class":214},[204,102181,260],{"class":210},[204,102183,101511],{"class":214},[19,102185,102186,102187,102189,102190,102192],{},"这行创建仿真数据。",[81,102188,33487],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[81,102191,33487],{}," 都会变化。",[196,102194,102196],{"className":30464,"code":102195,"language":30466,"meta":125,"style":125},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[81,102197,102198,102208,102218],{"__ignoreMap":125},[204,102199,102200,102202,102204,102206],{"class":206,"line":207},[204,102201,30501],{"class":263},[204,102203,215],{"class":214},[204,102205,101524],{"class":319},[204,102207,101527],{"class":214},[204,102209,102210,102212,102214,102216],{"class":206,"line":126},[204,102211,30501],{"class":263},[204,102213,215],{"class":214},[204,102215,101536],{"class":319},[204,102217,101539],{"class":214},[204,102219,102220,102222,102224,102226],{"class":206,"line":131},[204,102221,30501],{"class":263},[204,102223,215],{"class":214},[204,102225,101548],{"class":319},[204,102227,101551],{"class":214},[19,102229,102230,102232,102233,102236,102237,102240,102241,102244,102245,102248],{},[81,102231,30501],{}," 用来输出信息。",[81,102234,102235],{},"model.nq"," 是位置变量数量，",[81,102238,102239],{},"model.nv"," 是速度变量数量，",[81,102242,102243],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[81,102246,102247],{},"nu"," 是 0。",[196,102250,102252],{"className":30464,"code":102251,"language":30466,"meta":125,"style":125},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[81,102253,102254,102264],{"__ignoreMap":125},[204,102255,102256,102258,102260,102262],{"class":206,"line":207},[204,102257,30501],{"class":263},[204,102259,215],{"class":214},[204,102261,101560],{"class":319},[204,102263,101563],{"class":214},[204,102265,102266,102268,102270,102272],{"class":206,"line":126},[204,102267,30501],{"class":263},[204,102269,215],{"class":214},[204,102271,101572],{"class":319},[204,102273,101575],{"class":214},[19,102275,102276,102277,102279,102280,102282,102283,102286],{},"这里打印初始时间和初始位置。",[81,102278,101152],{}," 一开始是 0。",[81,102281,101155],{}," 是位置数组。",[81,102284,102285],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[196,102288,102289],{"className":30464,"code":101761,"language":30466,"meta":125,"style":125},[81,102290,102291,102307],{"__ignoreMap":125},[204,102292,102293,102295,102297,102299,102301,102303,102305],{"class":206,"line":207},[204,102294,3111],{"class":210},[204,102296,101586],{"class":214},[204,102298,26129],{"class":210},[204,102300,32529],{"class":263},[204,102302,215],{"class":214},[204,102304,524],{"class":263},[204,102306,30872],{"class":214},[204,102308,102309],{"class":206,"line":126},[204,102310,101784],{"class":214},[19,102312,102313,102315,102316,102319,102320,102322,102323,102325],{},[81,102314,3111],{}," 是循环。",[81,102317,102318],{},"range(100)"," 表示循环 100 次。",[81,102321,1205],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[81,102324,101300],{},"，仿真就前进一步。",[196,102327,102329],{"className":30464,"code":102328,"language":30466,"meta":125,"style":125},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[81,102330,102331,102341],{"__ignoreMap":125},[204,102332,102333,102335,102337,102339],{"class":206,"line":207},[204,102334,30501],{"class":263},[204,102336,215],{"class":214},[204,102338,101614],{"class":319},[204,102340,101563],{"class":214},[204,102342,102343,102345,102347,102349],{"class":206,"line":126},[204,102344,30501],{"class":263},[204,102346,215],{"class":214},[204,102348,101625],{"class":319},[204,102350,101575],{"class":214},[19,102352,102353],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[196,102355,102357],{"className":30464,"code":102356,"language":30466,"meta":125,"style":125},"if __name__ == \"__main__\":\n    main()\n",[81,102358,102359,102371],{"__ignoreMap":125},[204,102360,102361,102363,102365,102367,102369],{"class":206,"line":207},[204,102362,1617],{"class":210},[204,102364,31306],{"class":263},[204,102366,101644],{"class":210},[204,102368,101647],{"class":319},[204,102370,3825],{"class":214},[204,102372,102373],{"class":206,"line":126},[204,102374,101654],{"class":214},[19,102376,102377,102378,102381,102382,28471],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[81,102379,102380],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[81,102383,102380],{},[19,102385,102386],{},"运行:",[196,102388,102390],{"className":23909,"code":102389,"language":23911,"meta":125,"style":125},"python ch1_first_sim.py\n",[81,102391,102392],{"__ignoreMap":125},[204,102393,102394,102396],{"class":206,"line":207},[204,102395,30466],{"class":2049},[204,102397,101371],{"class":319},[14,102399,102401],{"id":102400},"_5运行结果说明","5.运行结果说明",[19,102403,102404],{},"你应该看到类似输出:",[196,102406,102409],{"className":102407,"code":102408,"language":5274,"meta":125},[5272],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[81,102410,102408],{"__ignoreMap":125},[19,102412,102413,102415,102416,102419,102420,28471],{},[81,102414,101705],{}," 有 7 个位置变量: ",[81,102417,102418],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[81,102421,102422],{},"vx vy vz wx wy wz",[19,102424,102425,102426,102429],{},"你还会看到 ",[81,102427,102428],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102431,102433],{"id":102432},"_6验证步骤","6.验证步骤",[19,102435,102436],{},"确认版本:",[196,102438,102439],{"className":23909,"code":101025,"language":23911,"meta":125,"style":125},[81,102440,102441],{"__ignoreMap":125},[204,102442,102443,102445,102447],{"class":206,"line":207},[204,102444,30466],{"class":2049},[204,102446,30444],{"class":263},[204,102448,101036],{"class":319},[19,102450,102451],{},"确认导入的是官方 bindings:",[196,102453,102455],{"className":23909,"code":102454,"language":23911,"meta":125,"style":125},"python -c \"import mujoco; print(mujoco)\"\n",[81,102456,102457],{"__ignoreMap":125},[204,102458,102459,102461,102463],{"class":206,"line":207},[204,102460,30466],{"class":2049},[204,102462,30444],{"class":263},[204,102464,102465],{"class":319}," \"import mujoco; print(mujoco)\"\n",[19,102467,102468],{},"运行程序:",[196,102470,102471],{"className":23909,"code":102389,"language":23911,"meta":125,"style":125},[81,102472,102473],{"__ignoreMap":125},[204,102474,102475,102477],{"class":206,"line":207},[204,102476,30466],{"class":2049},[204,102478,101371],{"class":319},[19,102480,102481,102482,102485,102486,28471],{},"检查 ",[81,102483,102484],{},"final time"," 是否约等于 ",[81,102487,102488],{},"1.0",[19,102490,102491],{},"再做几个小实验：",[161,102493,102494,102504,102512,102525],{},[71,102495,102496,102497,102499,102500,102503],{},"把 ",[81,102498,102024],{}," 改成 ",[81,102501,102502],{},"pos=\"0 0 2\"","，观察初始高度变化。",[71,102505,102496,102506,102499,102508,102511],{},[81,102507,101913],{},[81,102509,102510],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[71,102513,102496,102514,102499,102516,102519,102520,102522,102523,28471],{},[81,102515,101909],{},[81,102517,102518],{},"timestep=\"0.005\"","，观察 100 步后的 ",[81,102521,102484],{}," 是否变成约 ",[81,102524,35415],{},[71,102526,102527,102528,102531],{},"删除 ",[81,102529,102530],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102533,102534],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102536,102538],{"id":102537},"_7常见错误与解决方案","7.常见错误与解决方案",[49,102540,102542],{"id":102541},"modulenotfounderror-no-module-named-mujoco",[81,102543,102544],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102546,102547],{},"解决:",[196,102549,102551],{"className":23909,"code":102550,"language":23911,"meta":125,"style":125},"pip install \"mujoco>=2.3\"\n",[81,102552,102553],{"__ignoreMap":125},[204,102554,102555,102557,102559],{"class":206,"line":207},[204,102556,23918],{"class":2049},[204,102558,23921],{"class":319},[204,102560,102561],{"class":319}," \"mujoco>=2.3\"\n",[49,102563,102565],{"id":102564},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102567,102568],{},"先安装系统依赖:",[196,102570,102572],{"className":23909,"code":102571,"language":23911,"meta":125,"style":125},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[81,102573,102574],{"__ignoreMap":125},[204,102575,102576,102578,102580,102582,102584,102587,102589,102592,102594,102597,102599],{"class":206,"line":207},[204,102577,24663],{"class":2049},[204,102579,26401],{"class":319},[204,102581,23921],{"class":319},[204,102583,26486],{"class":263},[204,102585,102586],{"class":319}," mesa-libGL",[204,102588,100900],{"class":319},[204,102590,102591],{"class":319}," glfw",[204,102593,100920],{"class":319},[204,102595,102596],{"class":319}," libX11",[204,102598,100933],{"class":319},[204,102600,102601],{"class":319}," libXrandr\n",[49,102603,102605],{"id":102604},"xml-解析失败","XML 解析失败",[19,102607,102608],{},"检查:",[161,102610,102611,102614,102617,102623],{},[71,102612,102613],{},"标签是否闭合",[71,102615,102616],{},"属性是否带引号",[71,102618,102619,102620],{},"根节点是否是 ",[81,102621,102622],{},"\u003Cmujoco>",[71,102624,102625,102627,102628,102631],{},[81,102626,51886],{}," 是否放在 ",[81,102629,102630],{},"\u003Cworldbody>"," 内部",[49,102633,102635,102637,102638],{"id":102634},"final-time-不是严格等于-10",[81,102636,102484],{}," 不是严格等于 ",[81,102639,102488],{},[19,102641,102642],{},"这通常不是错误。浮点数计算可能得到：",[196,102644,102647],{"className":102645,"code":102646,"language":5274,"meta":125},[5272],"1.0000000000000007\n",[81,102648,102646],{"__ignoreMap":125},[19,102650,102651,102652,102654],{},"只要接近 ",[81,102653,102488],{}," 就正常。",[49,102656,102657],{"id":102657},"方块没有掉下来",[19,102659,102660],{},"检查：",[161,102662,102663,102669,102675,102680],{},[71,102664,102665,102666],{},"方块 body 里是否有 ",[81,102667,102668],{},"\u003Cfreejoint\u002F>",[71,102670,102671,102672],{},"重力是否是 ",[81,102673,102674],{},"0 0 -9.81",[71,102676,102677,102678],{},"是否真的调用了 ",[81,102679,100771],{},[71,102681,102682,102683,102685,102686],{},"你看的是否是 ",[81,102684,102428],{},"，不是 ",[81,102687,102688],{},"initial qpos",[14,102690,102692],{"id":102691},"_8本章小结","8.本章小结",[19,102694,102695],{},"本章你已经完成了 MuJoCo 的最小闭环：",[196,102697,102700],{"className":102698,"code":102699,"language":5274,"meta":125},[5272],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[81,102701,102699],{"__ignoreMap":125},[19,102703,102704],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5213,102706,102707],{},"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":125,"searchDepth":126,"depth":126,"links":102709},[102710,102711,102712,102717,102721,102722,102723,102731],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":102713},[102714,102715,102716],{"id":101167,"depth":131,"text":101168},{"id":101261,"depth":131,"text":101262},{"id":101313,"depth":131,"text":101314},{"id":101337,"depth":126,"text":101338,"children":102718},[102719,102720],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":102724},[102725,102726,102727,102728,102730],{"id":102541,"depth":131,"text":102544},{"id":102564,"depth":131,"text":102565},{"id":102604,"depth":131,"text":102605},{"id":102634,"depth":131,"text":102729},"final time 不是严格等于 1.0",{"id":102657,"depth":131,"text":102657},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100724,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102738,"title":102739,"body":102740,"description":125,"extension":133,"meta":104396,"navigation":135,"path":104397,"seo":104398,"stem":104399,"__hash__":104400},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102741,"toc":104372},[102742,102745,102747,102750,102753,102770,102865,102868,102874,102876,102878,102902,102905,102919,102922,102963,102965,102978,102980,102983,103031,103043,103046,103049,103055,103068,103135,103138,103157,103160,103163,103169,103171,103180,103183,103187,103196,103278,103287,103291,103297,103311,103321,103323,103653,103656,103668,103670,103681,103683,103686,103704,103707,103710,103728,103739,103742,103757,103767,103769,103790,103807,103827,103833,103873,103889,103905,103911,103914,103938,103954,103959,103989,104006,104031,104034,104049,104058,104073,104082,104097,104104,104106,104116,104129,104136,104139,104178,104185,104187,104239,104241,104247,104250,104257,104264,104267,104269,104287,104290,104293,104327,104339,104341,104344,104366,104369],[10,102743,102739],{"id":102744},"_2xml-与-mjcf-物理建模基础",[14,102746,100733],{"id":100732},[19,102748,102749],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102751,102752],{},"本章结束后，你应该能看懂一个简单模型里：",[161,102754,102755,102758,102761,102764,102767],{},[71,102756,102757],{},"地面在哪里。",[71,102759,102760],{},"物体初始位置在哪里。",[71,102762,102763],{},"几何体是什么形状。",[71,102765,102766],{},"哪些 body 可以自由运动。",[71,102768,102769],{},"如何用名字在 Python 里找到 XML 中的对象。",[352,102771,102772,102782],{},[355,102773,102774],{},[358,102775,102776,102779],{},[361,102777,102778],{"align":23823},"标签",[361,102780,102781],{"align":23823},"作用",[398,102783,102784,102793,102803,102812,102822,102832,102845,102855],{},[358,102785,102786,102790],{},[403,102787,102788],{"align":23823},[81,102789,102622],{},[403,102791,102792],{"align":23823},"根节点",[358,102794,102795,102800],{},[403,102796,102797],{"align":23823},[81,102798,102799],{},"\u003Coption>",[403,102801,102802],{"align":23823},"仿真参数",[358,102804,102805,102809],{},[403,102806,102807],{"align":23823},[81,102808,102630],{},[403,102810,102811],{"align":23823},"世界中的物体",[358,102813,102814,102819],{},[403,102815,102816],{"align":23823},[81,102817,102818],{},"\u003Cbody>",[403,102820,102821],{"align":23823},"刚体",[358,102823,102824,102829],{},[403,102825,102826],{"align":23823},[81,102827,102828],{},"\u003Cgeom>",[403,102830,102831],{"align":23823},"几何体、碰撞体、可视体",[358,102833,102834,102842],{},[403,102835,102836,25065,102839],{"align":23823},[81,102837,102838],{},"\u003Cjoint>",[81,102840,102841],{},"\u003Cfreejoint>",[403,102843,102844],{"align":23823},"关节",[358,102846,102847,102852],{},[403,102848,102849],{"align":23823},[81,102850,102851],{},"\u003Csite>",[403,102853,102854],{"align":23823},"标记点",[358,102856,102857,102862],{},[403,102858,102859],{"align":23823},[81,102860,102861],{},"\u003Cactuator>",[403,102863,102864],{"align":23823},"控制器",[19,102866,102867],{},"初学时可以先记住：",[196,102869,102872],{"className":102870,"code":102871,"language":5274,"meta":125},[5272],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[81,102873,102871],{"__ignoreMap":125},[14,102875,100856],{"id":100855},[19,102877,100859],{},[196,102879,102881],{"className":23909,"code":102880,"language":23911,"meta":125,"style":125},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[81,102882,102883],{"__ignoreMap":125},[204,102884,102885,102887,102889,102891,102893,102895,102897,102899],{"class":206,"line":207},[204,102886,24663],{"class":2049},[204,102888,26401],{"class":319},[204,102890,23921],{"class":319},[204,102892,26486],{"class":263},[204,102894,102586],{"class":319},[204,102896,100900],{"class":319},[204,102898,102591],{"class":319},[204,102900,102901],{"class":319}," glfw-devel\n",[19,102903,102904],{},"pip:",[196,102906,102907],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},[81,102908,102909],{"__ignoreMap":125},[204,102910,102911,102913,102915,102917],{"class":206,"line":207},[204,102912,23918],{"class":2049},[204,102914,23921],{"class":319},[204,102916,101016],{"class":319},[204,102918,101019],{"class":319},[19,102920,102921],{},"conda:",[196,102923,102925],{"className":23909,"code":102924,"language":23911,"meta":125,"style":125},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[81,102926,102927,102944,102953],{"__ignoreMap":125},[204,102928,102929,102931,102933,102935,102938,102940,102942],{"class":206,"line":207},[204,102930,30416],{"class":2049},[204,102932,29262],{"class":319},[204,102934,25202],{"class":263},[204,102936,102937],{"class":319}," mujoco-xml",[204,102939,101061],{"class":319},[204,102941,101064],{"class":263},[204,102943,101067],{"class":263},[204,102945,102946,102948,102950],{"class":206,"line":126},[204,102947,30416],{"class":2049},[204,102949,101074],{"class":319},[204,102951,102952],{"class":319}," mujoco-xml\n",[204,102954,102955,102957,102959,102961],{"class":206,"line":131},[204,102956,23918],{"class":2049},[204,102958,23921],{"class":319},[204,102960,101016],{"class":319},[204,102962,101019],{"class":319},[19,102964,101090],{},[161,102966,102967,102970,102975],{},[71,102968,102969],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[71,102971,102972,102973,28471],{},"本章使用基础标签，适用于 ",[81,102974,101112],{},[71,102976,102977],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,102979,101130],{"id":101129},[19,102981,102982],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[196,102984,102986],{"className":53153,"code":102985,"language":53155,"meta":125,"style":125},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[81,102987,102988,103002,103010,103015,103023],{"__ignoreMap":125},[204,102989,102990,102992,102994,102996,102998,103000],{"class":206,"line":207},[204,102991,1123],{"class":214},[204,102993,101106],{"class":51386},[204,102995,101860],{"class":2049},[204,102997,260],{"class":214},[204,102999,62765],{"class":319},[204,103001,51393],{"class":214},[204,103003,103004,103006,103008],{"class":206,"line":126},[204,103005,52230],{"class":214},[204,103007,101926],{"class":51386},[204,103009,51393],{"class":214},[204,103011,103012],{"class":206,"line":131},[204,103013,103014],{"class":214},"    ...\n",[204,103016,103017,103019,103021],{"class":206,"line":1281},[204,103018,52503],{"class":214},[204,103020,101926],{"class":51386},[204,103022,51393],{"class":214},[204,103024,103025,103027,103029],{"class":206,"line":1287},[204,103026,51871],{"class":214},[204,103028,101106],{"class":51386},[204,103030,51393],{"class":214},[19,103032,103033,103035,103036,103038,103039,103042],{},[81,103034,51886],{}," 表示刚体。",[81,103037,101205],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[81,103040,103041],{},"joint"," 表示刚体相对父刚体如何运动。",[49,103044,103045],{"id":103045},"层级结构非常重要",[19,103047,103048],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[196,103050,103053],{"className":103051,"code":103052,"language":5274,"meta":125},[5272],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[81,103054,103052],{"__ignoreMap":125},[19,103056,103057,43,103060,103063,103064,103067],{},[81,103058,103059],{},"red_box_geom",[81,103061,103062],{},"box_center"," 都属于 ",[81,103065,103066],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[196,103069,103071],{"className":53153,"code":103070,"language":53155,"meta":125,"style":125},"\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",[81,103072,103073,103093,103107,103127],{"__ignoreMap":125},[204,103074,103075,103077,103079,103081,103083,103085,103087,103089,103091],{"class":206,"line":207},[204,103076,1123],{"class":214},[204,103078,51886],{"class":51386},[204,103080,15007],{"class":2049},[204,103082,260],{"class":214},[204,103084,53577],{"class":319},[204,103086,101191],{"class":2049},[204,103088,260],{"class":214},[204,103090,101196],{"class":319},[204,103092,51393],{"class":214},[204,103094,103095,103097,103099,103101,103103,103105],{"class":206,"line":126},[204,103096,52230],{"class":214},[204,103098,101705],{"class":51386},[204,103100,15007],{"class":2049},[204,103102,260],{"class":214},[204,103104,102046],{"class":319},[204,103106,101229],{"class":214},[204,103108,103109,103111,103113,103115,103117,103119,103121,103123,103125],{"class":206,"line":131},[204,103110,52230],{"class":214},[204,103112,101205],{"class":51386},[204,103114,53910],{"class":2049},[204,103116,260],{"class":214},[204,103118,53577],{"class":319},[204,103120,101221],{"class":2049},[204,103122,260],{"class":214},[204,103124,101226],{"class":319},[204,103126,101229],{"class":214},[204,103128,103129,103131,103133],{"class":206,"line":1281},[204,103130,51871],{"class":214},[204,103132,51886],{"class":51386},[204,103134,51393],{"class":214},[19,103136,103137],{},"含义:",[161,103139,103140,103146,103151,103154],{},[71,103141,103142,103143,103145],{},"创建名为 ",[81,103144,53800],{}," 的刚体",[71,103147,103148,103149],{},"初始位置在世界坐标 ",[81,103150,101254],{},[71,103152,103153],{},"它有一个自由关节",[71,103155,103156],{},"它有一个盒子几何体",[49,103158,103159],{"id":103159},"坐标怎么理解",[19,103161,103162],{},"MuJoCo 默认使用三维坐标：",[196,103164,103167],{"className":103165,"code":103166,"language":5274,"meta":125},[5272],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[81,103168,103166],{"__ignoreMap":125},[19,103170,14720],{},[196,103172,103174],{"className":53153,"code":103173,"language":53155,"meta":125,"style":125},"pos=\"0 0 1\"\n",[81,103175,103176],{"__ignoreMap":125},[204,103177,103178],{"class":206,"line":207},[204,103179,103173],{"class":214},[19,103181,103182],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[49,103184,103186],{"id":103185},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103188,103189,103190,82616,103193,103195],{},"不同 ",[81,103191,103192],{},"type",[81,103194,31582],{}," 含义不同：",[352,103197,103198,103213],{},[355,103199,103200],{},[358,103201,103202,103206,103211],{},[361,103203,103204],{"align":23823},[81,103205,103192],{},[361,103207,103208,103210],{"align":23823},[81,103209,31582],{}," 示例",[361,103212,100786],{"align":23823},[398,103214,103215,103229,103244,103263],{},[358,103216,103217,103221,103226],{},[403,103218,103219],{"align":23823},[81,103220,53800],{},[403,103222,103223],{"align":23823},[81,103224,103225],{},"size=\"0.1 0.2 0.3\"",[403,103227,103228],{"align":23823},"x\u002Fy\u002Fz 半边长，不是完整长度",[358,103230,103231,103236,103241],{},[403,103232,103233],{"align":23823},[81,103234,103235],{},"sphere",[403,103237,103238],{"align":23823},[81,103239,103240],{},"size=\"0.1\"",[403,103242,103243],{"align":23823},"球半径",[358,103245,103246,103251,103256],{},[403,103247,103248],{"align":23823},[81,103249,103250],{},"capsule",[403,103252,103253],{"align":23823},[81,103254,103255],{},"size=\"0.03\"",[403,103257,103258,103259,103262],{"align":23823},"胶囊半径，长度常用 ",[81,103260,103261],{},"fromto"," 指定",[358,103264,103265,103270,103275],{},[403,103266,103267],{"align":23823},[81,103268,103269],{},"plane",[403,103271,103272],{"align":23823},[81,103273,103274],{},"size=\"3 3 0.1\"",[403,103276,103277],{"align":23823},"可视平面大小，通常当地面",[19,103279,103280,103281,103283,103284,103286],{},"最容易踩坑的是 box：",[81,103282,102109],{}," 表示边长大约是 ",[81,103285,32123],{},"，因为 MuJoCo 用的是半边长。",[49,103288,103290],{"id":103289},"site-是什么","site 是什么",[19,103292,103293,103296],{},[81,103294,103295],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[161,103298,103299,103302,103305,103308],{},[71,103300,103301],{},"标记机械臂末端。",[71,103303,103304],{},"标记目标位置。",[71,103306,103307],{},"放传感器或相机参考点。",[71,103309,103310],{},"在 Python 中读取某个关键点的世界坐标。",[19,103312,103313,103314,43,103317,103320],{},"在后面的 Reacher 任务中，",[81,103315,103316],{},"tip",[81,103318,103319],{},"target"," 就会用 site 表示。",[14,103322,101338],{"id":101337},[196,103324,103326],{"className":30464,"code":103325,"language":30466,"meta":125,"style":125},"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",[81,103327,103328,103334,103344,103348,103352,103360,103365,103369,103373,103377,103382,103386,103391,103396,103401,103406,103410,103414,103418,103422,103426,103430,103442,103454,103462,103466,103481,103496,103500,103513,103528,103541,103554,103558,103574,103578,103582,103593,103605,103617,103629,103633,103637,103649],{"__ignoreMap":125},[204,103329,103330,103332],{"class":206,"line":207},[204,103331,30478],{"class":210},[204,103333,101386],{"class":214},[204,103335,103336,103338,103340,103342],{"class":206,"line":126},[204,103337,30478],{"class":210},[204,103339,31466],{"class":214},[204,103341,31469],{"class":210},[204,103343,31472],{"class":214},[204,103345,103346],{"class":206,"line":131},[204,103347,2486],{"emptyLinePlaceholder":135},[204,103349,103350],{"class":206,"line":1281},[204,103351,2486],{"emptyLinePlaceholder":135},[204,103353,103354,103356,103358],{"class":206,"line":1287},[204,103355,101399],{"class":263},[204,103357,13651],{"class":210},[204,103359,101404],{"class":319},[204,103361,103362],{"class":206,"line":1301},[204,103363,103364],{"class":319},"\u003Cmujoco model=\"xml_basic\">\n",[204,103366,103367],{"class":206,"line":1307},[204,103368,101414],{"class":319},[204,103370,103371],{"class":206,"line":1398},[204,103372,2486],{"emptyLinePlaceholder":135},[204,103374,103375],{"class":206,"line":1404},[204,103376,101423],{"class":319},[204,103378,103379],{"class":206,"line":1416},[204,103380,103381],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[204,103383,103384],{"class":206,"line":1698},[204,103385,2486],{"emptyLinePlaceholder":135},[204,103387,103388],{"class":206,"line":1703},[204,103389,103390],{"class":319},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[204,103392,103393],{"class":206,"line":1709},[204,103394,103395],{"class":319},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[204,103397,103398],{"class":206,"line":1714},[204,103399,103400],{"class":319},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[204,103402,103403],{"class":206,"line":1728},[204,103404,103405],{"class":319},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[204,103407,103408],{"class":206,"line":1733},[204,103409,101452],{"class":319},[204,103411,103412],{"class":206,"line":1739},[204,103413,101457],{"class":319},[204,103415,103416],{"class":206,"line":1760},[204,103417,101462],{"class":319},[204,103419,103420],{"class":206,"line":1765},[204,103421,95784],{"class":319},[204,103423,103424],{"class":206,"line":1779},[204,103425,2486],{"emptyLinePlaceholder":135},[204,103427,103428],{"class":206,"line":1784},[204,103429,2486],{"emptyLinePlaceholder":135},[204,103431,103432,103434,103436,103438,103440],{"class":206,"line":1813},[204,103433,32033],{"class":210},[204,103435,2059],{"class":2049},[204,103437,101483],{"class":214},[204,103439,95772],{"class":263},[204,103441,3825],{"class":214},[204,103443,103444,103446,103448,103450,103452],{"class":206,"line":1818},[204,103445,101492],{"class":214},[204,103447,260],{"class":210},[204,103449,101497],{"class":214},[204,103451,101399],{"class":263},[204,103453,221],{"class":214},[204,103455,103456,103458,103460],{"class":206,"line":1835},[204,103457,101506],{"class":214},[204,103459,260],{"class":210},[204,103461,101511],{"class":214},[204,103463,103464],{"class":206,"line":1840},[204,103465,2486],{"emptyLinePlaceholder":135},[204,103467,103468,103471,103473,103476,103479],{"class":206,"line":1845},[204,103469,103470],{"class":214},"    box_body_id ",[204,103472,260],{"class":210},[204,103474,103475],{"class":214}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[204,103477,103478],{"class":319},"\"red_box\"",[204,103480,221],{"class":214},[204,103482,103483,103486,103488,103491,103494],{"class":206,"line":1850},[204,103484,103485],{"class":214},"    site_id ",[204,103487,260],{"class":210},[204,103489,103490],{"class":214}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[204,103492,103493],{"class":319},"\"box_center\"",[204,103495,221],{"class":214},[204,103497,103498],{"class":206,"line":1864},[204,103499,2486],{"emptyLinePlaceholder":135},[204,103501,103502,103504,103507,103509,103511],{"class":206,"line":1869},[204,103503,3187],{"class":210},[204,103505,103506],{"class":214}," box_body_id ",[204,103508,1123],{"class":210},[204,103510,4179],{"class":263},[204,103512,3825],{"class":214},[204,103514,103515,103518,103521,103523,103526],{"class":206,"line":2663},[204,103516,103517],{"class":210},"        raise",[204,103519,103520],{"class":263}," RuntimeError",[204,103522,215],{"class":214},[204,103524,103525],{"class":319},"\"body red_box not found\"",[204,103527,221],{"class":214},[204,103529,103530,103532,103535,103537,103539],{"class":206,"line":2677},[204,103531,3187],{"class":210},[204,103533,103534],{"class":214}," site_id ",[204,103536,1123],{"class":210},[204,103538,4179],{"class":263},[204,103540,3825],{"class":214},[204,103542,103543,103545,103547,103549,103552],{"class":206,"line":2685},[204,103544,103517],{"class":210},[204,103546,103520],{"class":263},[204,103548,215],{"class":214},[204,103550,103551],{"class":319},"\"site box_center not found\"",[204,103553,221],{"class":214},[204,103555,103556],{"class":206,"line":2690},[204,103557,2486],{"emptyLinePlaceholder":135},[204,103559,103560,103562,103564,103566,103568,103570,103572],{"class":206,"line":2696},[204,103561,3287],{"class":210},[204,103563,101586],{"class":214},[204,103565,26129],{"class":210},[204,103567,32529],{"class":263},[204,103569,215],{"class":214},[204,103571,1808],{"class":263},[204,103573,30872],{"class":214},[204,103575,103576],{"class":206,"line":2702},[204,103577,101601],{"class":214},[204,103579,103580],{"class":206,"line":2707},[204,103581,2486],{"emptyLinePlaceholder":135},[204,103583,103584,103586,103588,103591],{"class":206,"line":8035},[204,103585,31385],{"class":263},[204,103587,215],{"class":214},[204,103589,103590],{"class":319},"\"simulation time:\"",[204,103592,101563],{"class":214},[204,103594,103595,103597,103599,103602],{"class":206,"line":8059},[204,103596,31385],{"class":263},[204,103598,215],{"class":214},[204,103600,103601],{"class":319},"\"box body position:\"",[204,103603,103604],{"class":214},", data.xpos[box_body_id].copy())\n",[204,103606,103607,103609,103611,103614],{"class":206,"line":8064},[204,103608,31385],{"class":263},[204,103610,215],{"class":214},[204,103612,103613],{"class":319},"\"site position:\"",[204,103615,103616],{"class":214},", data.site_xpos[site_id].copy())\n",[204,103618,103619,103621,103623,103626],{"class":206,"line":8070},[204,103620,31385],{"class":263},[204,103622,215],{"class":214},[204,103624,103625],{"class":319},"\"box qpos:\"",[204,103627,103628],{"class":214},", np.array(data.qpos))\n",[204,103630,103631],{"class":206,"line":8097},[204,103632,2486],{"emptyLinePlaceholder":135},[204,103634,103635],{"class":206,"line":8102},[204,103636,2486],{"emptyLinePlaceholder":135},[204,103638,103639,103641,103643,103645,103647],{"class":206,"line":8108},[204,103640,1617],{"class":210},[204,103642,31306],{"class":263},[204,103644,101644],{"class":210},[204,103646,101647],{"class":319},[204,103648,3825],{"class":214},[204,103650,103651],{"class":206,"line":8120},[204,103652,101654],{"class":214},[19,103654,103655],{},"保存为：",[196,103657,103659],{"className":23909,"code":103658,"language":23911,"meta":125,"style":125},"touch ch2_xml_basic.py\n",[81,103660,103661],{"__ignoreMap":125},[204,103662,103663,103665],{"class":206,"line":207},[204,103664,101368],{"class":2049},[204,103666,103667],{"class":319}," ch2_xml_basic.py\n",[19,103669,102386],{},[196,103671,103673],{"className":23909,"code":103672,"language":23911,"meta":125,"style":125},"python ch2_xml_basic.py\n",[81,103674,103675],{"__ignoreMap":125},[204,103676,103677,103679],{"class":206,"line":207},[204,103678,30466],{"class":2049},[204,103680,103667],{"class":319},[49,103682,101657],{"id":101657},[19,103684,103685],{},"用名字查找 body：",[196,103687,103689],{"className":30464,"code":103688,"language":30466,"meta":125,"style":125},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[81,103690,103691],{"__ignoreMap":125},[204,103692,103693,103696,103698,103700,103702],{"class":206,"line":207},[204,103694,103695],{"class":214},"box_body_id ",[204,103697,260],{"class":210},[204,103699,103475],{"class":214},[204,103701,103478],{"class":319},[204,103703,221],{"class":214},[19,103705,103706],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103708,103709],{},"用名字查找 site：",[196,103711,103713],{"className":30464,"code":103712,"language":30466,"meta":125,"style":125},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[81,103714,103715],{"__ignoreMap":125},[204,103716,103717,103720,103722,103724,103726],{"class":206,"line":207},[204,103718,103719],{"class":214},"site_id ",[204,103721,260],{"class":210},[204,103723,103490],{"class":214},[204,103725,103493],{"class":319},[204,103727,221],{"class":214},[19,103729,103730,103731,103734,103735,103738],{},"注意第二个参数是对象类型。查 body 就用 ",[81,103732,103733],{},"mjOBJ_BODY","，查 site 就用 ",[81,103736,103737],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103740,103741],{},"读取世界坐标：",[196,103743,103745],{"className":30464,"code":103744,"language":30466,"meta":125,"style":125},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[81,103746,103747,103752],{"__ignoreMap":125},[204,103748,103749],{"class":206,"line":207},[204,103750,103751],{"class":214},"data.xpos[box_body_id]\n",[204,103753,103754],{"class":206,"line":126},[204,103755,103756],{"class":214},"data.site_xpos[site_id]\n",[19,103758,103759,103762,103763,103766],{},[81,103760,103761],{},"xpos"," 是 body 的世界坐标，",[81,103764,103765],{},"site_xpos"," 是 site 的世界坐标。",[49,103768,101793],{"id":101793},[196,103770,103772],{"className":30464,"code":103771,"language":30466,"meta":125,"style":125},"import mujoco\nimport numpy as np\n",[81,103773,103774,103780],{"__ignoreMap":125},[204,103775,103776,103778],{"class":206,"line":207},[204,103777,30478],{"class":210},[204,103779,101386],{"class":214},[204,103781,103782,103784,103786,103788],{"class":206,"line":126},[204,103783,30478],{"class":210},[204,103785,31466],{"class":214},[204,103787,31469],{"class":210},[204,103789,31472],{"class":214},[19,103791,103792,103793,103796,103797,103800,103801,426,103804,28471],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[81,103794,103795],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[81,103798,103799],{},"as np"," 是习惯写法，后面就可以写 ",[81,103802,103803],{},"np.array(...)",[81,103805,103806],{},"np.round(...)",[196,103808,103809],{"className":30464,"code":101680,"language":30466,"meta":125,"style":125},[81,103810,103811,103819,103823],{"__ignoreMap":125},[204,103812,103813,103815,103817],{"class":206,"line":207},[204,103814,101399],{"class":263},[204,103816,13651],{"class":210},[204,103818,101404],{"class":319},[204,103820,103821],{"class":206,"line":126},[204,103822,101695],{"class":319},[204,103824,103825],{"class":206,"line":131},[204,103826,95784],{"class":319},[19,103828,103829,103830,28471],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[81,103831,103832],{},"mujoco.MjModel.from_xml_string(XML)",[196,103834,103836],{"className":53153,"code":103835,"language":53155,"meta":125,"style":125},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[81,103837,103838],{"__ignoreMap":125},[204,103839,103840,103842,103844,103846,103848,103850,103852,103854,103857,103859,103861,103864,103866,103868,103871],{"class":206,"line":207},[204,103841,1123],{"class":214},[204,103843,103295],{"class":51386},[204,103845,15007],{"class":2049},[204,103847,260],{"class":214},[204,103849,103493],{"class":319},[204,103851,101191],{"class":2049},[204,103853,260],{"class":214},[204,103855,103856],{"class":319},"\"0 0 0\"",[204,103858,101221],{"class":2049},[204,103860,260],{"class":214},[204,103862,103863],{"class":319},"\"0.03\"",[204,103865,78853],{"class":2049},[204,103867,260],{"class":214},[204,103869,103870],{"class":319},"\"0 1 0 1\"",[204,103872,101229],{"class":214},[19,103874,103875,103877,103878,103881,103882,103884,103885,103888],{},[81,103876,103295],{}," 是标记点。",[81,103879,103880],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[81,103883,103255],{}," 表示显示出来的小球大小。",[81,103886,103887],{},"rgba=\"0 1 0 1\""," 表示绿色。",[196,103890,103891],{"className":30464,"code":103688,"language":30466,"meta":125,"style":125},[81,103892,103893],{"__ignoreMap":125},[204,103894,103895,103897,103899,103901,103903],{"class":206,"line":207},[204,103896,103695],{"class":214},[204,103898,260],{"class":210},[204,103900,103475],{"class":214},[204,103902,103478],{"class":319},[204,103904,221],{"class":214},[19,103906,103907,103908,103910],{},"这行的作用是：根据名字 ",[81,103909,103478],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103912,103913],{},"拆开看：",[161,103915,103916,103922,103927,103933],{},[71,103917,103918,103921],{},[81,103919,103920],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[71,103923,103924,103926],{},[81,103925,102170],{}," 是被查询的模型。",[71,103928,103929,103932],{},[81,103930,103931],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[71,103934,103935,103937],{},[81,103936,103478],{}," 是 XML 里写的名字。",[196,103939,103940],{"className":30464,"code":103712,"language":30466,"meta":125,"style":125},[81,103941,103942],{"__ignoreMap":125},[204,103943,103944,103946,103948,103950,103952],{"class":206,"line":207},[204,103945,103719],{"class":214},[204,103947,260],{"class":210},[204,103949,103490],{"class":214},[204,103951,103493],{"class":319},[204,103953,221],{"class":214},[19,103955,103956,103957,28471],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[81,103958,103493],{},[196,103960,103962],{"className":30464,"code":103961,"language":30466,"meta":125,"style":125},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[81,103963,103964,103976],{"__ignoreMap":125},[204,103965,103966,103968,103970,103972,103974],{"class":206,"line":207},[204,103967,1617],{"class":210},[204,103969,103506],{"class":214},[204,103971,1123],{"class":210},[204,103973,4179],{"class":263},[204,103975,3825],{"class":214},[204,103977,103978,103981,103983,103985,103987],{"class":206,"line":126},[204,103979,103980],{"class":210},"    raise",[204,103982,103520],{"class":263},[204,103984,215],{"class":214},[204,103986,103525],{"class":319},[204,103988,221],{"class":214},[19,103990,103991,103993,103994,103997,103998,104001,104002,104005],{},[81,103992,1617],{}," 是条件判断。",[81,103995,103996],{},"mj_name2id"," 找不到对象时会返回 ",[81,103999,104000],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[81,104003,104004],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[196,104007,104009],{"className":30464,"code":104008,"language":30466,"meta":125,"style":125},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[81,104010,104011,104027],{"__ignoreMap":125},[204,104012,104013,104015,104017,104019,104021,104023,104025],{"class":206,"line":207},[204,104014,3111],{"class":210},[204,104016,101586],{"class":214},[204,104018,26129],{"class":210},[204,104020,32529],{"class":263},[204,104022,215],{"class":214},[204,104024,1808],{"class":263},[204,104026,30872],{"class":214},[204,104028,104029],{"class":206,"line":126},[204,104030,101784],{"class":214},[19,104032,104033],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[196,104035,104037],{"className":30464,"code":104036,"language":30466,"meta":125,"style":125},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[81,104038,104039],{"__ignoreMap":125},[204,104040,104041,104043,104045,104047],{"class":206,"line":207},[204,104042,30501],{"class":263},[204,104044,215],{"class":214},[204,104046,103601],{"class":319},[204,104048,103604],{"class":214},[19,104050,104051,104053,104054,104057],{},[81,104052,101164],{}," 保存所有 body 的世界坐标。",[81,104055,104056],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[196,104059,104061],{"className":30464,"code":104060,"language":30466,"meta":125,"style":125},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[81,104062,104063],{"__ignoreMap":125},[204,104064,104065,104067,104069,104071],{"class":206,"line":207},[204,104066,30501],{"class":263},[204,104068,215],{"class":214},[204,104070,103613],{"class":319},[204,104072,103616],{"class":214},[19,104074,104075,104078,104079,104081],{},[81,104076,104077],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[81,104080,103062],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[196,104083,104085],{"className":30464,"code":104084,"language":30466,"meta":125,"style":125},"print(\"box qpos:\", np.array(data.qpos))\n",[81,104086,104087],{"__ignoreMap":125},[204,104088,104089,104091,104093,104095],{"class":206,"line":207},[204,104090,30501],{"class":263},[204,104092,215],{"class":214},[204,104094,103625],{"class":319},[204,104096,103628],{"class":214},[19,104098,104099,104100,104103],{},"这里打印广义位置数组。",[81,104101,104102],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104105,102401],{"id":102400},[19,104107,104108,104109,104112,104113,28471],{},"程序会输出 ",[81,104110,104111],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[81,104114,104115],{},"qpos",[19,104117,104118,104120,104121,104124,104125,104128],{},[81,104119,104056],{}," 是 body 的世界坐标位置。",[81,104122,104123],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[81,104126,104127],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104130,82308,104131,82616,104133,104135],{},[81,104132,103062],{},[81,104134,103880],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104137,104138],{},"如果你把 site 改成：",[196,104140,104142],{"className":53153,"code":104141,"language":53155,"meta":125,"style":125},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[81,104143,104144],{"__ignoreMap":125},[204,104145,104146,104148,104150,104152,104154,104157,104159,104161,104164,104166,104168,104170,104172,104174,104176],{"class":206,"line":207},[204,104147,1123],{"class":214},[204,104149,103295],{"class":51386},[204,104151,15007],{"class":2049},[204,104153,260],{"class":214},[204,104155,104156],{"class":319},"\"box_top\"",[204,104158,101191],{"class":2049},[204,104160,260],{"class":214},[204,104162,104163],{"class":319},"\"0 0 0.15\"",[204,104165,101221],{"class":2049},[204,104167,260],{"class":214},[204,104169,103863],{"class":319},[204,104171,78853],{"class":2049},[204,104173,260],{"class":214},[204,104175,103870],{"class":319},[204,104177,101229],{"class":214},[19,104179,104180,104181,104184],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[81,104182,104183],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104186,102433],{"id":102432},[161,104188,104189,104198,104201,104208,104214,104225],{},[71,104190,102496,104191,104193,104194,102499,104196,28471],{},[81,104192,103066],{}," 的初始高度从 ",[81,104195,431],{},[81,104197,292],{},[71,104199,104200],{},"重新运行程序。",[71,104202,104203,104204,104207],{},"观察 ",[81,104205,104206],{},"box qpos"," 和最终位置是否变化。",[71,104209,104210,104211,104213],{},"故意把 ",[81,104212,103295],{}," 名称改错，确认程序能报错。",[71,104215,102496,104216,104218,104219,102499,104221,104224],{},[81,104217,101205],{}," 的颜色 ",[81,104220,102117],{},[81,104222,104223],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[71,104226,102496,104227,82616,104229,102499,104232,104235,104236,104238],{},[81,104228,103062],{},[81,104230,104231],{},"pos",[81,104233,104234],{},"0 0 0.2","，观察 ",[81,104237,104183],{}," 如何变化。",[14,104240,102538],{"id":102537},[49,104242,104244],{"id":104243},"xml-error-schema-violation",[81,104245,104246],{},"XML Error: Schema violation",[19,104248,104249],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[49,104251,104253,81376,104255],{"id":104252},"mj_name2id-返回-1",[81,104254,103996],{},[81,104256,104000],{},[19,104258,104259,104260,104263],{},"说明名字没有找到。检查 XML 中 ",[81,104261,104262],{},"name=\"...\"","，并确认对象类型正确。",[49,104265,104266],{"id":104266},"物体不下落",[19,104268,102608],{},[161,104270,104271,104276,104281],{},[71,104272,104273,104274],{},"body 是否有 ",[81,104275,101705],{},[71,104277,104278,104279],{},"gravity 是否为 ",[81,104280,102674],{},[71,104282,104283,104284,104286],{},"body 是否被固定在 ",[81,104285,101926],{}," 中",[49,104288,104289],{"id":104289},"坐标看起来不符合预期",[19,104291,104292],{},"先区分两种坐标：",[352,104294,104295,104304],{},[355,104296,104297],{},[358,104298,104299,104302],{},[361,104300,104301],{"align":23823},"坐标",[361,104303,100786],{"align":23823},[398,104305,104306,104316],{},[358,104307,104308,104313],{},[403,104309,104310,104311],{"align":23823},"XML 里的 ",[81,104312,104231],{},[403,104314,104315],{"align":23823},"相对父 body 的局部坐标",[358,104317,104318,104324],{},[403,104319,104320,25065,104322],{"align":23823},[81,104321,101164],{},[81,104323,104077],{},[403,104325,104326],{"align":23823},"仿真更新后的世界坐标",[19,104328,104329,104330,104332,104333,82625,104336,104338],{},"如果你修改了 ",[81,104331,101155],{},"，但还没调用 ",[81,104334,104335],{},"mj_forward",[81,104337,101300],{},"，世界坐标可能还没有更新。",[14,104340,102692],{"id":102691},[19,104342,104343],{},"MJCF 建模先掌握四件事：",[161,104345,104346,104351,104356,104361],{},[71,104347,104348,104350],{},[81,104349,51886],{}," 表示刚体层级。",[71,104352,104353,104355],{},[81,104354,101205],{}," 表示形状、碰撞和质量。",[71,104357,104358,104360],{},[81,104359,103041],{}," 决定 body 能不能动、怎么动。",[71,104362,104363,104365],{},[81,104364,103295],{}," 用来标记关键点，方便 Python 读取位置。",[19,104367,104368],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5213,104370,104371],{},"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":125,"searchDepth":126,"depth":126,"links":104373},[104374,104375,104376,104382,104386,104387,104388,104395],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":104377},[104378,104379,104380,104381],{"id":103045,"depth":131,"text":103045},{"id":103159,"depth":131,"text":103159},{"id":103185,"depth":131,"text":103186},{"id":103289,"depth":131,"text":103290},{"id":101337,"depth":126,"text":101338,"children":104383},[104384,104385],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":104389},[104390,104391,104393,104394],{"id":104243,"depth":131,"text":104246},{"id":104252,"depth":131,"text":104392},"mj_name2id 返回 -1",{"id":104266,"depth":131,"text":104266},{"id":104289,"depth":131,"text":104289},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102739,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104402,"title":104403,"body":104404,"description":125,"extension":133,"meta":105899,"navigation":135,"path":105900,"seo":105901,"stem":105902,"__hash__":105903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104405,"toc":105871},[104406,104409,104411,104414,104417,104455,104458,104464,104467,104469,104471,104498,104500,104514,104516,104557,104559,104583,104585,104588,104597,104606,104609,104618,104626,104635,104638,104648,104651,104703,104710,104716,104724,104772,104775,104794,104797,104805,104809,104818,104851,104853,105201,105203,105215,105217,105228,105230,105233,105254,105260,105263,105288,105298,105301,105309,105312,105315,105336,105347,105349,105369,105372,105393,105402,105421,105427,105452,105455,105469,105476,105500,105503,105511,105520,105536,105548,105556,105565,105567,105570,105594,105599,105602,105624,105626,105665,105667,105674,105676,105684,105687,105690,105702,105743,105750,105761,105768,105771,105820,105823,105826,105832,105834,105839,105865,105868],[10,104407,104403],{"id":104408},"_3python-控制接口读取状态与推进仿真",[14,104410,100733],{"id":100732},[19,104412,104413],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104415,104416],{},"你将学习:",[161,104418,104419,104424,104429,104433,104438,104449],{},[71,104420,104421],{},[81,104422,104423],{},"MjModel.from_xml_string",[71,104425,104426],{},[81,104427,104428],{},"MjData(model)",[71,104430,104431],{},[81,104432,101300],{},[71,104434,104435],{},[81,104436,104437],{},"mj_resetData",[71,104439,104440,104441,426,104443,426,104446],{},"读取 ",[81,104442,104115],{},[81,104444,104445],{},"qvel",[81,104447,104448],{},"ctrl",[71,104450,104451,104452],{},"使用 ",[81,104453,104454],{},"model.opt.timestep",[19,104456,104457],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[196,104459,104462],{"className":104460,"code":104461,"language":5274,"meta":125},[5272],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[81,104463,104461],{"__ignoreMap":125},[19,104465,104466],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104468,100856],{"id":100855},[19,104470,100859],{},[196,104472,104474],{"className":23909,"code":104473,"language":23911,"meta":125,"style":125},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[81,104475,104476],{"__ignoreMap":125},[204,104477,104478,104480,104482,104484,104486,104489,104491,104493,104495],{"class":206,"line":207},[204,104479,24663],{"class":2049},[204,104481,26401],{"class":319},[204,104483,23921],{"class":319},[204,104485,26486],{"class":263},[204,104487,104488],{"class":319}," python3",[204,104490,100884],{"class":319},[204,104492,102586],{"class":319},[204,104494,100900],{"class":319},[204,104496,104497],{"class":319}," glfw\n",[19,104499,102904],{},[196,104501,104502],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},[81,104503,104504],{"__ignoreMap":125},[204,104505,104506,104508,104510,104512],{"class":206,"line":207},[204,104507,23918],{"class":2049},[204,104509,23921],{"class":319},[204,104511,101016],{"class":319},[204,104513,101019],{"class":319},[19,104515,102921],{},[196,104517,104519],{"className":23909,"code":104518,"language":23911,"meta":125,"style":125},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[81,104520,104521,104538,104547],{"__ignoreMap":125},[204,104522,104523,104525,104527,104529,104532,104534,104536],{"class":206,"line":207},[204,104524,30416],{"class":2049},[204,104526,29262],{"class":319},[204,104528,25202],{"class":263},[204,104530,104531],{"class":319}," mujoco-python-api",[204,104533,101061],{"class":319},[204,104535,101064],{"class":263},[204,104537,101067],{"class":263},[204,104539,104540,104542,104544],{"class":206,"line":126},[204,104541,30416],{"class":2049},[204,104543,101074],{"class":319},[204,104545,104546],{"class":319}," mujoco-python-api\n",[204,104548,104549,104551,104553,104555],{"class":206,"line":131},[204,104550,23918],{"class":2049},[204,104552,23921],{"class":319},[204,104554,101016],{"class":319},[204,104556,101019],{"class":319},[19,104558,101090],{},[161,104560,104561,104568,104577],{},[71,104562,104563,43,104565,104567],{},[81,104564,100761],{},[81,104566,100766],{}," 是官方 Python bindings 的类名。",[71,104569,104570,104571,104574,104575,28471],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[81,104572,104573],{},"mjModel"," 在 Python 中是 ",[81,104576,100795],{},[71,104578,104579,104580,28471],{},"不要使用 ",[81,104581,104582],{},"sim = mujoco_py.MjSim(...)",[14,104584,101130],{"id":101129},[19,104586,104587],{},"仿真推进核心代码:",[196,104589,104591],{"className":30464,"code":104590,"language":30466,"meta":125,"style":125},"mujoco.mj_step(model, data)\n",[81,104592,104593],{"__ignoreMap":125},[204,104594,104595],{"class":206,"line":207},[204,104596,104590],{"class":214},[19,104598,104599,104600,426,104602,426,104604,28471],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[81,104601,101155],{},[81,104603,101158],{},[81,104605,101152],{},[19,104607,104608],{},"重置仿真:",[196,104610,104612],{"className":30464,"code":104611,"language":30466,"meta":125,"style":125},"mujoco.mj_resetData(model, data)\n",[81,104613,104614],{"__ignoreMap":125},[204,104615,104616],{"class":206,"line":207},[204,104617,104611],{"class":214},[19,104619,104620,104621,82625,104623,104625],{},"如果手动修改了 ",[81,104622,101155],{},[81,104624,101158],{},"，通常应调用:",[196,104627,104629],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},"mujoco.mj_forward(model, data)\n",[81,104630,104631],{"__ignoreMap":125},[204,104632,104633],{"class":206,"line":207},[204,104634,104628],{"class":214},[19,104636,104637],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[49,104639,104641,426,104643,426,104645,104647],{"id":104640},"qposqvelctrl-是什么",[81,104642,104115],{},[81,104644,104445],{},[81,104646,104448],{}," 是什么",[19,104649,104650],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[352,104652,104653,104665],{},[355,104654,104655],{},[358,104656,104657,104660,104662],{},[361,104658,104659],{"align":23823},"字段",[361,104661,100786],{"align":23823},[361,104663,104664],{"align":23823},"谁来修改",[398,104666,104667,104679,104691],{},[358,104668,104669,104673,104676],{},[403,104670,104671],{"align":23823},[81,104672,101155],{},[403,104674,104675],{"align":23823},"广义位置，例如小车位置、关节角、自由物体位置姿态",[403,104677,104678],{"align":23823},"MuJoCo 更新，也可以手动设置初始状态",[358,104680,104681,104685,104688],{},[403,104682,104683],{"align":23823},[81,104684,101158],{},[403,104686,104687],{"align":23823},"广义速度，例如小车速度、关节角速度",[403,104689,104690],{"align":23823},"MuJoCo 更新，也可以手动清零",[358,104692,104693,104697,104700],{},[403,104694,104695],{"align":23823},[81,104696,101161],{},[403,104698,104699],{"align":23823},"actuator 的控制输入",[403,104701,104702],{"align":23823},"主要由你的控制代码写入",[19,104704,9112,104705,43,104707,104709],{},[81,104706,104115],{},[81,104708,104445],{}," 不一定同维。自由刚体就是典型例子：",[196,104711,104714],{"className":104712,"code":104713,"language":5274,"meta":125},[5272],"freejoint: qpos 7 维，qvel 6 维\n",[81,104715,104713],{"__ignoreMap":125},[49,104717,104719,43,104721,104723],{"id":104718},"mj_step-和-mj_forward-的区别",[81,104720,101300],{},[81,104722,104335],{}," 的区别",[352,104725,104726,104739],{},[355,104727,104728],{},[358,104729,104730,104733,104736],{},[361,104731,104732],{"align":23823},"函数",[361,104734,104735],{"align":23823},"是否推进时间",[361,104737,104738],{"align":23823},"什么时候用",[398,104740,104741,104754],{},[358,104742,104743,104748,104751],{},[403,104744,104745],{"align":23823},[81,104746,104747],{},"mj_step(model, data)",[403,104749,104750],{"align":23823},"是",[403,104752,104753],{"align":23823},"正常仿真循环，每调用一次前进一步",[358,104755,104756,104761,104764],{},[403,104757,104758],{"align":23823},[81,104759,104760],{},"mj_forward(model, data)",[403,104762,104763],{"align":23823},"否",[403,104765,104766,104767,426,104769,104771],{"align":23823},"手动改了 ",[81,104768,104115],{},[81,104770,104445],{}," 后，刷新派生量",[19,104773,104774],{},"例如你写：",[196,104776,104778],{"className":30464,"code":104777,"language":30466,"meta":125,"style":125},"data.qpos[2] = 2.0\n",[81,104779,104780],{"__ignoreMap":125},[204,104781,104782,104785,104787,104789,104791],{"class":206,"line":207},[204,104783,104784],{"class":214},"data.qpos[",[204,104786,292],{"class":263},[204,104788,4529],{"class":214},[204,104790,260],{"class":210},[204,104792,104793],{"class":263}," 2.0\n",[19,104795,104796],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[196,104798,104799],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},[81,104800,104801],{"__ignoreMap":125},[204,104802,104803],{"class":206,"line":207},[204,104804,104628],{"class":214},[49,104806,104808],{"id":104807},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104810,104811,104814,104815,104817],{},[81,104812,104813],{},"mujoco.mj_resetData(model, data)"," 会把 ",[81,104816,33487],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[196,104819,104821],{"className":30464,"code":104820,"language":30466,"meta":125,"style":125},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[81,104822,104823,104827,104837,104847],{"__ignoreMap":125},[204,104824,104825],{"class":206,"line":207},[204,104826,104611],{"class":214},[204,104828,104829,104832,104834],{"class":206,"line":126},[204,104830,104831],{"class":214},"data.qpos[:] ",[204,104833,260],{"class":210},[204,104835,104836],{"class":214}," random_qpos\n",[204,104838,104839,104842,104844],{"class":206,"line":131},[204,104840,104841],{"class":214},"data.qvel[:] ",[204,104843,260],{"class":210},[204,104845,104846],{"class":263}," 0.0\n",[204,104848,104849],{"class":206,"line":1281},[204,104850,104628],{"class":214},[14,104852,101338],{"id":101337},[196,104854,104856],{"className":30464,"code":104855,"language":30466,"meta":125,"style":125},"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",[81,104857,104858,104864,104874,104878,104882,104890,104895,104899,104903,104907,104912,104916,104921,104926,104931,104935,104939,104943,104947,104951,104955,104974,104981,104993,105004,105020,105036,105040,105044,105056,105068,105076,105080,105091,105095,105111,105115,105119,105128,105132,105137,105146,105150,105163,105168,105177,105181,105185,105197],{"__ignoreMap":125},[204,104859,104860,104862],{"class":206,"line":207},[204,104861,30478],{"class":210},[204,104863,101386],{"class":214},[204,104865,104866,104868,104870,104872],{"class":206,"line":126},[204,104867,30478],{"class":210},[204,104869,31466],{"class":214},[204,104871,31469],{"class":210},[204,104873,31472],{"class":214},[204,104875,104876],{"class":206,"line":131},[204,104877,2486],{"emptyLinePlaceholder":135},[204,104879,104880],{"class":206,"line":1281},[204,104881,2486],{"emptyLinePlaceholder":135},[204,104883,104884,104886,104888],{"class":206,"line":1287},[204,104885,101399],{"class":263},[204,104887,13651],{"class":210},[204,104889,101404],{"class":319},[204,104891,104892],{"class":206,"line":1301},[204,104893,104894],{"class":319},"\u003Cmujoco model=\"state_api\">\n",[204,104896,104897],{"class":206,"line":1307},[204,104898,101414],{"class":319},[204,104900,104901],{"class":206,"line":1398},[204,104902,2486],{"emptyLinePlaceholder":135},[204,104904,104905],{"class":206,"line":1404},[204,104906,101423],{"class":319},[204,104908,104909],{"class":206,"line":1416},[204,104910,104911],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[204,104913,104914],{"class":206,"line":1698},[204,104915,2486],{"emptyLinePlaceholder":135},[204,104917,104918],{"class":206,"line":1703},[204,104919,104920],{"class":319},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[204,104922,104923],{"class":206,"line":1709},[204,104924,104925],{"class":319},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[204,104927,104928],{"class":206,"line":1714},[204,104929,104930],{"class":319},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[204,104932,104933],{"class":206,"line":1728},[204,104934,101452],{"class":319},[204,104936,104937],{"class":206,"line":1733},[204,104938,101457],{"class":319},[204,104940,104941],{"class":206,"line":1739},[204,104942,101462],{"class":319},[204,104944,104945],{"class":206,"line":1760},[204,104946,95784],{"class":319},[204,104948,104949],{"class":206,"line":1765},[204,104950,2486],{"emptyLinePlaceholder":135},[204,104952,104953],{"class":206,"line":1779},[204,104954,2486],{"emptyLinePlaceholder":135},[204,104956,104957,104959,104962,104965,104967,104970,104972],{"class":206,"line":1784},[204,104958,32033],{"class":210},[204,104960,104961],{"class":2049}," print_state",[204,104963,104964],{"class":214},"(prefix: ",[204,104966,1386],{"class":263},[204,104968,104969],{"class":214},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[204,104971,95772],{"class":263},[204,104973,3825],{"class":214},[204,104975,104976,104978],{"class":206,"line":1813},[204,104977,31385],{"class":263},[204,104979,104980],{"class":214},"(prefix)\n",[204,104982,104983,104985,104987,104990],{"class":206,"line":1818},[204,104984,31385],{"class":263},[204,104986,215],{"class":214},[204,104988,104989],{"class":319},"\"  timestep:\"",[204,104991,104992],{"class":214},", model.opt.timestep)\n",[204,104994,104995,104997,104999,105002],{"class":206,"line":1835},[204,104996,31385],{"class":263},[204,104998,215],{"class":214},[204,105000,105001],{"class":319},"\"  time:\"",[204,105003,101563],{"class":214},[204,105005,105006,105008,105010,105013,105016,105018],{"class":206,"line":1840},[204,105007,31385],{"class":263},[204,105009,215],{"class":214},[204,105011,105012],{"class":319},"\"  qpos:\"",[204,105014,105015],{"class":214},", np.round(data.qpos.copy(), ",[204,105017,506],{"class":263},[204,105019,30583],{"class":214},[204,105021,105022,105024,105026,105029,105032,105034],{"class":206,"line":1845},[204,105023,31385],{"class":263},[204,105025,215],{"class":214},[204,105027,105028],{"class":319},"\"  qvel:\"",[204,105030,105031],{"class":214},", np.round(data.qvel.copy(), ",[204,105033,506],{"class":263},[204,105035,30583],{"class":214},[204,105037,105038],{"class":206,"line":1850},[204,105039,2486],{"emptyLinePlaceholder":135},[204,105041,105042],{"class":206,"line":1864},[204,105043,2486],{"emptyLinePlaceholder":135},[204,105045,105046,105048,105050,105052,105054],{"class":206,"line":1869},[204,105047,32033],{"class":210},[204,105049,2059],{"class":2049},[204,105051,101483],{"class":214},[204,105053,95772],{"class":263},[204,105055,3825],{"class":214},[204,105057,105058,105060,105062,105064,105066],{"class":206,"line":2663},[204,105059,101492],{"class":214},[204,105061,260],{"class":210},[204,105063,101497],{"class":214},[204,105065,101399],{"class":263},[204,105067,221],{"class":214},[204,105069,105070,105072,105074],{"class":206,"line":2677},[204,105071,101506],{"class":214},[204,105073,260],{"class":210},[204,105075,101511],{"class":214},[204,105077,105078],{"class":206,"line":2685},[204,105079,2486],{"emptyLinePlaceholder":135},[204,105081,105082,105085,105088],{"class":206,"line":2690},[204,105083,105084],{"class":214},"    print_state(",[204,105086,105087],{"class":319},"\"initial\"",[204,105089,105090],{"class":214},", model, data)\n",[204,105092,105093],{"class":206,"line":2696},[204,105094,2486],{"emptyLinePlaceholder":135},[204,105096,105097,105099,105101,105103,105105,105107,105109],{"class":206,"line":2702},[204,105098,3287],{"class":210},[204,105100,101586],{"class":214},[204,105102,26129],{"class":210},[204,105104,32529],{"class":263},[204,105106,215],{"class":214},[204,105108,869],{"class":263},[204,105110,30872],{"class":214},[204,105112,105113],{"class":206,"line":2707},[204,105114,101601],{"class":214},[204,105116,105117],{"class":206,"line":8035},[204,105118,2486],{"emptyLinePlaceholder":135},[204,105120,105121,105123,105126],{"class":206,"line":8059},[204,105122,105084],{"class":214},[204,105124,105125],{"class":319},"\"after 50 steps\"",[204,105127,105090],{"class":214},[204,105129,105130],{"class":206,"line":8064},[204,105131,2486],{"emptyLinePlaceholder":135},[204,105133,105134],{"class":206,"line":8070},[204,105135,105136],{"class":214},"    mujoco.mj_resetData(model, data)\n",[204,105138,105139,105141,105144],{"class":206,"line":8097},[204,105140,105084],{"class":214},[204,105142,105143],{"class":319},"\"after reset\"",[204,105145,105090],{"class":214},[204,105147,105148],{"class":206,"line":8102},[204,105149,2486],{"emptyLinePlaceholder":135},[204,105151,105152,105155,105157,105159,105161],{"class":206,"line":8108},[204,105153,105154],{"class":214},"    data.qpos[",[204,105156,292],{"class":263},[204,105158,4529],{"class":214},[204,105160,260],{"class":210},[204,105162,104793],{"class":263},[204,105164,105165],{"class":206,"line":8120},[204,105166,105167],{"class":214},"    mujoco.mj_forward(model, data)\n",[204,105169,105170,105172,105175],{"class":206,"line":8132},[204,105171,105084],{"class":214},[204,105173,105174],{"class":319},"\"after manual qpos edit\"",[204,105176,105090],{"class":214},[204,105178,105179],{"class":206,"line":8144},[204,105180,2486],{"emptyLinePlaceholder":135},[204,105182,105183],{"class":206,"line":9803},[204,105184,2486],{"emptyLinePlaceholder":135},[204,105186,105187,105189,105191,105193,105195],{"class":206,"line":9828},[204,105188,1617],{"class":210},[204,105190,31306],{"class":263},[204,105192,101644],{"class":210},[204,105194,101647],{"class":319},[204,105196,3825],{"class":214},[204,105198,105199],{"class":206,"line":9851},[204,105200,101654],{"class":214},[19,105202,103655],{},[196,105204,105206],{"className":23909,"code":105205,"language":23911,"meta":125,"style":125},"touch ch3_python_state.py\n",[81,105207,105208],{"__ignoreMap":125},[204,105209,105210,105212],{"class":206,"line":207},[204,105211,101368],{"class":2049},[204,105213,105214],{"class":319}," ch3_python_state.py\n",[19,105216,102386],{},[196,105218,105220],{"className":23909,"code":105219,"language":23911,"meta":125,"style":125},"python ch3_python_state.py\n",[81,105221,105222],{"__ignoreMap":125},[204,105223,105224,105226],{"class":206,"line":207},[204,105225,30466],{"class":2049},[204,105227,105214],{"class":319},[49,105229,101657],{"id":101657},[19,105231,105232],{},"打印状态的函数：",[196,105234,105236],{"className":30464,"code":105235,"language":30466,"meta":125,"style":125},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[81,105237,105238],{"__ignoreMap":125},[204,105239,105240,105242,105244,105246,105248,105250,105252],{"class":206,"line":207},[204,105241,32033],{"class":210},[204,105243,104961],{"class":2049},[204,105245,104964],{"class":214},[204,105247,1386],{"class":263},[204,105249,104969],{"class":214},[204,105251,95772],{"class":263},[204,105253,3825],{"class":214},[19,105255,105256,105257,105259],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[81,105258,33487],{}," 里发生了什么。",[19,105261,105262],{},"推进 50 步：",[196,105264,105266],{"className":30464,"code":105265,"language":30466,"meta":125,"style":125},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[81,105267,105268,105284],{"__ignoreMap":125},[204,105269,105270,105272,105274,105276,105278,105280,105282],{"class":206,"line":207},[204,105271,3111],{"class":210},[204,105273,101586],{"class":214},[204,105275,26129],{"class":210},[204,105277,32529],{"class":263},[204,105279,215],{"class":214},[204,105281,869],{"class":263},[204,105283,30872],{"class":214},[204,105285,105286],{"class":206,"line":126},[204,105287,101784],{"class":214},[19,105289,105290,105291,105294,105295,105297],{},"由于 ",[81,105292,105293],{},"timestep=0.01","，所以 50 步后时间约为 ",[81,105296,35415],{}," 秒。",[19,105299,105300],{},"重置：",[196,105302,105303],{"className":30464,"code":104611,"language":30466,"meta":125,"style":125},[81,105304,105305],{"__ignoreMap":125},[204,105306,105307],{"class":206,"line":207},[204,105308,104611],{"class":214},[19,105310,105311],{},"这会把时间、位置、速度恢复到初始状态。",[19,105313,105314],{},"手动改高度：",[196,105316,105318],{"className":30464,"code":105317,"language":30466,"meta":125,"style":125},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[81,105319,105320,105332],{"__ignoreMap":125},[204,105321,105322,105324,105326,105328,105330],{"class":206,"line":207},[204,105323,104784],{"class":214},[204,105325,292],{"class":263},[204,105327,4529],{"class":214},[204,105329,260],{"class":210},[204,105331,104793],{"class":263},[204,105333,105334],{"class":206,"line":126},[204,105335,104628],{"class":214},[19,105337,105338,105339,105342,105343,105346],{},"这个例子里 ",[81,105340,105341],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[81,105344,105345],{},"2.0"," 表示把小球放到更高的位置。",[49,105348,101793],{"id":101793},[196,105350,105351],{"className":30464,"code":105235,"language":30466,"meta":125,"style":125},[81,105352,105353],{"__ignoreMap":125},[204,105354,105355,105357,105359,105361,105363,105365,105367],{"class":206,"line":207},[204,105356,32033],{"class":210},[204,105358,104961],{"class":2049},[204,105360,104964],{"class":214},[204,105362,1386],{"class":263},[204,105364,104969],{"class":214},[204,105366,95772],{"class":263},[204,105368,3825],{"class":214},[19,105370,105371],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[161,105373,105374,105383,105388],{},[71,105375,105376,105379,105380,105382],{},[81,105377,105378],{},"prefix","：一段文字，比如 ",[81,105381,105087],{},"，用来说明现在打印的是哪个阶段。",[71,105384,105385,105387],{},[81,105386,102170],{},"：MuJoCo 模型。",[71,105389,105390,105392],{},[81,105391,33487],{},"：MuJoCo 当前状态。",[19,105394,105395,426,105398,105401],{},[81,105396,105397],{},"prefix: str",[81,105399,105400],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[196,105403,105405],{"className":30464,"code":105404,"language":30466,"meta":125,"style":125},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[81,105406,105407],{"__ignoreMap":125},[204,105408,105409,105411,105413,105415,105417,105419],{"class":206,"line":207},[204,105410,30501],{"class":263},[204,105412,215],{"class":214},[204,105414,105012],{"class":319},[204,105416,105015],{"class":214},[204,105418,506],{"class":263},[204,105420,30583],{"class":214},[19,105422,105423,105426],{},[81,105424,105425],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[196,105428,105430],{"className":30464,"code":105429,"language":30466,"meta":125,"style":125},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[81,105431,105432,105444],{"__ignoreMap":125},[204,105433,105434,105436,105438,105440,105442],{"class":206,"line":207},[204,105435,101719],{"class":214},[204,105437,260],{"class":210},[204,105439,101497],{"class":214},[204,105441,101399],{"class":263},[204,105443,221],{"class":214},[204,105445,105446,105448,105450],{"class":206,"line":126},[204,105447,101743],{"class":214},[204,105449,260],{"class":210},[204,105451,101511],{"class":214},[19,105453,105454],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[196,105456,105458],{"className":30464,"code":105457,"language":30466,"meta":125,"style":125},"print_state(\"initial\", model, data)\n",[81,105459,105460],{"__ignoreMap":125},[204,105461,105462,105465,105467],{"class":206,"line":207},[204,105463,105464],{"class":214},"print_state(",[204,105466,105087],{"class":319},[204,105468,105090],{"class":214},[19,105470,105471,105472,105475],{},"调用刚才定义的 ",[81,105473,105474],{},"print_state"," 函数，打印初始状态。",[196,105477,105478],{"className":30464,"code":105265,"language":30466,"meta":125,"style":125},[81,105479,105480,105496],{"__ignoreMap":125},[204,105481,105482,105484,105486,105488,105490,105492,105494],{"class":206,"line":207},[204,105483,3111],{"class":210},[204,105485,101586],{"class":214},[204,105487,26129],{"class":210},[204,105489,32529],{"class":263},[204,105491,215],{"class":214},[204,105493,869],{"class":263},[204,105495,30872],{"class":214},[204,105497,105498],{"class":206,"line":126},[204,105499,101784],{"class":214},[19,105501,105502],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[196,105504,105505],{"className":30464,"code":104611,"language":30466,"meta":125,"style":125},[81,105506,105507],{"__ignoreMap":125},[204,105508,105509],{"class":206,"line":207},[204,105510,104611],{"class":214},[19,105512,105513,105514,105516,105517,105519],{},"重置 ",[81,105515,33487],{},"。注意它不会重新创建 ",[81,105518,102170],{},"，因为模型结构没有变，只是状态回到初始值。",[196,105521,105522],{"className":30464,"code":104777,"language":30466,"meta":125,"style":125},[81,105523,105524],{"__ignoreMap":125},[204,105525,105526,105528,105530,105532,105534],{"class":206,"line":207},[204,105527,104784],{"class":214},[204,105529,292],{"class":263},[204,105531,4529],{"class":214},[204,105533,260],{"class":210},[204,105535,104793],{"class":263},[19,105537,105538,105539,426,105542,426,105545,105547],{},"这行是“手动改状态”。在 freejoint 中，",[81,105540,105541],{},"qpos[0]",[81,105543,105544],{},"qpos[1]",[81,105546,105341],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[196,105549,105550],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},[81,105551,105552],{"__ignoreMap":125},[204,105553,105554],{"class":206,"line":207},[204,105555,104628],{"class":214},[19,105557,105558,105559,105561,105562,105564],{},"手动改完 ",[81,105560,104115],{}," 后，调用 ",[81,105563,104335],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105566,102401],{"id":102400},[19,105568,105569],{},"你会看到:",[161,105571,105572,105577,105582,105585],{},[71,105573,105574,105575],{},"初始时间为 ",[81,105576,405],{},[71,105578,105579,105580],{},"50 步后时间约为 ",[81,105581,35415],{},[71,105583,105584],{},"reset 后状态恢复",[71,105586,105587,105588,105591,105592],{},"手动修改 ",[81,105589,105590],{},"data.qpos[2]"," 后，小球高度变为 ",[81,105593,105345],{},[19,105595,105596,105598],{},[81,105597,105341],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105600,105601],{},"输出里可以重点看三件事：",[161,105603,105604,105612,105617],{},[71,105605,105606,105608,105609,105611],{},[81,105607,2473],{}," 是否随着 ",[81,105610,101300],{}," 增加。",[71,105613,105614,105616],{},[81,105615,104115],{}," 的 z 坐标是否因为下落而变化。",[71,105618,105619,105621,105622,28471],{},[81,105620,104437],{}," 后时间是否回到 ",[81,105623,405],{},[14,105625,102433],{"id":102432},[161,105627,105628,105634,105640,105646,105649,105658],{},[71,105629,105630,105631,28471],{},"修改 timestep 为 ",[81,105632,105633],{},"0.005",[71,105635,105636,105637,28471],{},"重新运行，检查 50 步后时间是否约为 ",[81,105638,105639],{},"0.25",[71,105641,105642,105643,28471],{},"修改重力为 ",[81,105644,105645],{},"0 0 -1.0",[71,105647,105648],{},"观察小球下降速度是否变慢。",[71,105650,102496,105651,102499,105654,105657],{},[81,105652,105653],{},"data.qpos[2] = 2.0",[81,105655,105656],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[71,105659,105660,105661,105664],{},"注释掉 ",[81,105662,105663],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105666,102538],{"id":102537},[49,105668,105670,105671,105673],{"id":105669},"修改-dataqpos-后位置没有更新","修改 ",[81,105672,101155],{}," 后位置没有更新",[19,105675,102547],{},[196,105677,105678],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},[81,105679,105680],{"__ignoreMap":125},[204,105681,105682],{"class":206,"line":207},[204,105683,104628],{"class":214},[49,105685,105686],{"id":105686},"数组维度看不懂",[19,105688,105689],{},"打印模型维度:",[196,105691,105693],{"className":30464,"code":105692,"language":30466,"meta":125,"style":125},"print(model.nq, model.nv, model.nu)\n",[81,105694,105695],{"__ignoreMap":125},[204,105696,105697,105699],{"class":206,"line":207},[204,105698,30501],{"class":263},[204,105700,105701],{"class":214},"(model.nq, model.nv, model.nu)\n",[352,105703,105704,105712],{},[355,105705,105706],{},[358,105707,105708,105710],{},[361,105709,104659],{"align":23823},[361,105711,100786],{"align":23823},[398,105713,105714,105724,105734],{},[358,105715,105716,105721],{},[403,105717,105718],{"align":23823},[81,105719,105720],{},"nq",[403,105722,105723],{"align":23823},"位置变量数量",[358,105725,105726,105731],{},[403,105727,105728],{"align":23823},[81,105729,105730],{},"nv",[403,105732,105733],{"align":23823},"速度变量数量",[358,105735,105736,105740],{},[403,105737,105738],{"align":23823},[81,105739,102247],{},[403,105741,105742],{"align":23823},"控制输入数量",[49,105744,105746,105747,105749],{"id":105745},"误以为-qpos-一定等于关节数","误以为 ",[81,105748,104115],{}," 一定等于关节数",[19,105751,105752,105753,82616,105755,105757,105758,105760],{},"不是。例如 ",[81,105754,101705],{},[81,105756,104115],{}," 是 7 维，但 ",[81,105759,104445],{}," 是 6 维。",[49,105762,105764,105765,105767],{"id":105763},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[81,105766,104115],{}," 的第几位",[19,105769,105770],{},"初学时可以先打印：",[196,105772,105774],{"className":30464,"code":105773,"language":30466,"meta":125,"style":125},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[81,105775,105776,105786,105796,105808],{"__ignoreMap":125},[204,105777,105778,105780,105782,105784],{"class":206,"line":207},[204,105779,30501],{"class":263},[204,105781,215],{"class":214},[204,105783,101524],{"class":319},[204,105785,101527],{"class":214},[204,105787,105788,105790,105792,105794],{"class":206,"line":126},[204,105789,30501],{"class":263},[204,105791,215],{"class":214},[204,105793,101536],{"class":319},[204,105795,101539],{"class":214},[204,105797,105798,105800,105802,105805],{"class":206,"line":131},[204,105799,30501],{"class":263},[204,105801,215],{"class":214},[204,105803,105804],{"class":319},"\"qpos:\"",[204,105806,105807],{"class":214},", data.qpos)\n",[204,105809,105810,105812,105814,105817],{"class":206,"line":1281},[204,105811,30501],{"class":263},[204,105813,215],{"class":214},[204,105815,105816],{"class":319},"\"qvel:\"",[204,105818,105819],{"class":214},", data.qvel)\n",[19,105821,105822],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[49,105824,105825],{"id":105825},"仿真结果每次都一样",[19,105827,105828,105829,105831],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[81,105830,104115],{},"、目标点或控制输入。",[14,105833,102692],{"id":102691},[19,105835,105836,105837,24705],{},"Python 控制 MuJoCo 的核心就是读写 ",[81,105838,33487],{},[161,105840,105841,105849,105854,105859],{},[71,105842,105843,105844,43,105846,105848],{},"用 ",[81,105845,101155],{},[81,105847,101158],{}," 读取状态。",[71,105850,105843,105851,105853],{},[81,105852,101161],{}," 写入控制。",[71,105855,105843,105856,105858],{},[81,105857,101300],{}," 推进时间。",[71,105860,105861,105862,105864],{},"手动改状态后用 ",[81,105863,104335],{}," 刷新派生量。",[19,105866,105867],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5213,105869,105870],{},"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":125,"searchDepth":126,"depth":126,"links":105872},[105873,105874,105875,105882,105886,105887,105888,105898],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":105876},[105877,105879,105881],{"id":104640,"depth":131,"text":105878},"qpos、qvel、ctrl 是什么",{"id":104718,"depth":131,"text":105880},"mj_step 和 mj_forward 的区别",{"id":104807,"depth":131,"text":104808},{"id":101337,"depth":126,"text":101338,"children":105883},[105884,105885],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":105889},[105890,105892,105893,105895,105897],{"id":105669,"depth":131,"text":105891},"修改 data.qpos 后位置没有更新",{"id":105686,"depth":131,"text":105686},{"id":105745,"depth":131,"text":105894},"误以为 qpos 一定等于关节数",{"id":105763,"depth":131,"text":105896},"不知道某个元素在 qpos 的第几位",{"id":105825,"depth":131,"text":105825},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104403,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105905,"title":105906,"body":105907,"description":125,"extension":133,"meta":107597,"navigation":135,"path":107598,"seo":107599,"stem":107600,"__hash__":107601},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105908,"toc":107573},[105909,105912,105914,105917,105919,105944,105947,105966,105969,105971,105973,105997,105999,106013,106015,106056,106058,106082,106084,106087,106121,106123,106136,106139,106207,106216,106220,106223,106257,106263,106266,106270,106309,106312,106332,106336,106379,106381,106410,106413,106419,106422,106424,106818,106820,106832,106834,106845,106847,106850,106879,106887,106890,106925,106928,106930,106938,106941,106943,106954,106964,106984,106987,107023,107035,107083,107102,107144,107157,107185,107190,107211,107221,107239,107242,107276,107279,107299,107302,107321,107327,107329,107332,107338,107344,107354,107357,107363,107372,107374,107420,107422,107428,107434,107437,107440,107460,107463,107469,107475,107477,107500,107503,107506,107515,107518,107556,107558,107561,107567,107570],[10,105910,105906],{"id":105911},"_4关节actuator-与力控制",[14,105913,100733],{"id":100732},[19,105915,105916],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105918,104416],{},[161,105920,105921,105927,105932,105936,105941],{},[71,105922,105923,105926],{},[81,105924,105925],{},"hinge"," 关节",[71,105928,105929],{},[81,105930,105931],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[71,105933,105934],{},[81,105935,101161],{},[71,105937,105938],{},[81,105939,105940],{},"ctrlrange",[71,105942,105943],{},"读取关节角和角速度",[19,105945,105946],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[196,105948,105950],{"className":30464,"code":105949,"language":30466,"meta":125,"style":125},"data.ctrl[0] = ...\n",[81,105951,105952],{"__ignoreMap":125},[204,105953,105954,105957,105959,105961,105963],{"class":206,"line":207},[204,105955,105956],{"class":214},"data.ctrl[",[204,105958,405],{"class":263},[204,105960,4529],{"class":214},[204,105962,260],{"class":210},[204,105964,105965],{"class":263}," ...\n",[19,105967,105968],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,105970,100856],{"id":100855},[19,105972,100859],{},[196,105974,105975],{"className":23909,"code":104473,"language":23911,"meta":125,"style":125},[81,105976,105977],{"__ignoreMap":125},[204,105978,105979,105981,105983,105985,105987,105989,105991,105993,105995],{"class":206,"line":207},[204,105980,24663],{"class":2049},[204,105982,26401],{"class":319},[204,105984,23921],{"class":319},[204,105986,26486],{"class":263},[204,105988,104488],{"class":319},[204,105990,100884],{"class":319},[204,105992,102586],{"class":319},[204,105994,100900],{"class":319},[204,105996,104497],{"class":319},[19,105998,102904],{},[196,106000,106001],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},[81,106002,106003],{"__ignoreMap":125},[204,106004,106005,106007,106009,106011],{"class":206,"line":207},[204,106006,23918],{"class":2049},[204,106008,23921],{"class":319},[204,106010,101016],{"class":319},[204,106012,101019],{"class":319},[19,106014,102921],{},[196,106016,106018],{"className":23909,"code":106017,"language":23911,"meta":125,"style":125},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[81,106019,106020,106037,106046],{"__ignoreMap":125},[204,106021,106022,106024,106026,106028,106031,106033,106035],{"class":206,"line":207},[204,106023,30416],{"class":2049},[204,106025,29262],{"class":319},[204,106027,25202],{"class":263},[204,106029,106030],{"class":319}," mujoco-control",[204,106032,101061],{"class":319},[204,106034,101064],{"class":263},[204,106036,101067],{"class":263},[204,106038,106039,106041,106043],{"class":206,"line":126},[204,106040,30416],{"class":2049},[204,106042,101074],{"class":319},[204,106044,106045],{"class":319}," mujoco-control\n",[204,106047,106048,106050,106052,106054],{"class":206,"line":131},[204,106049,23918],{"class":2049},[204,106051,23921],{"class":319},[204,106053,101016],{"class":319},[204,106055,101019],{"class":319},[19,106057,101090],{},[161,106059,106060,106066,106073,106079],{},[71,106061,106062,106065],{},[81,106063,106064],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[71,106067,106068,106070,106071,28471],{},[81,106069,101161],{}," 长度等于 ",[81,106072,102243],{},[71,106074,82308,106075,106078],{},[81,106076,106077],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[71,106080,106081],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106083,101130],{"id":101129},[19,106085,106086],{},"关节决定 body 如何运动:",[196,106088,106090],{"className":53153,"code":106089,"language":53155,"meta":125,"style":125},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[81,106091,106092],{"__ignoreMap":125},[204,106093,106094,106096,106098,106100,106102,106105,106107,106109,106111,106114,106116,106119],{"class":206,"line":207},[204,106095,1123],{"class":214},[204,106097,103041],{"class":51386},[204,106099,15007],{"class":2049},[204,106101,260],{"class":214},[204,106103,106104],{"class":319},"\"hinge\"",[204,106106,53910],{"class":2049},[204,106108,260],{"class":214},[204,106110,106104],{"class":319},[204,106112,106113],{"class":2049}," axis",[204,106115,260],{"class":214},[204,106117,106118],{"class":319},"\"0 1 0\"",[204,106120,101229],{"class":214},[19,106122,103137],{},[161,106124,106125,106130,106133],{},[71,106126,106127,106128],{},"名字是 ",[81,106129,105925],{},[71,106131,106132],{},"类型是旋转关节",[71,106134,106135],{},"绕 y 轴旋转",[19,106137,106138],{},"actuator 决定如何施加控制:",[196,106140,106142],{"className":53153,"code":106141,"language":53155,"meta":125,"style":125},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[81,106143,106144,106153,106199],{"__ignoreMap":125},[204,106145,106146,106148,106151],{"class":206,"line":207},[204,106147,1123],{"class":214},[204,106149,106150],{"class":51386},"actuator",[204,106152,51393],{"class":214},[204,106154,106155,106157,106160,106162,106164,106167,106170,106172,106174,106177,106179,106181,106184,106186,106189,106192,106194,106197],{"class":206,"line":126},[204,106156,52230],{"class":214},[204,106158,106159],{"class":51386},"motor",[204,106161,15007],{"class":2049},[204,106163,260],{"class":214},[204,106165,106166],{"class":319},"\"hinge_motor\"",[204,106168,106169],{"class":2049}," joint",[204,106171,260],{"class":214},[204,106173,106104],{"class":319},[204,106175,106176],{"class":2049}," gear",[204,106178,260],{"class":214},[204,106180,3764],{"class":319},[204,106182,106183],{"class":2049}," ctrlrange",[204,106185,260],{"class":214},[204,106187,106188],{"class":319},"\"-2 2\"",[204,106190,106191],{"class":2049}," ctrllimited",[204,106193,260],{"class":214},[204,106195,106196],{"class":319},"\"true\"",[204,106198,101229],{"class":214},[204,106200,106201,106203,106205],{"class":206,"line":131},[204,106202,51871],{"class":214},[204,106204,106150],{"class":51386},[204,106206,51393],{"class":214},[19,106208,106209,106212,106213,28471],{},[81,106210,106211],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[81,106214,106215],{},"[-2, 2]",[49,106217,106219],{"id":106218},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106221,106222],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[352,106224,106225,106235],{},[355,106226,106227],{},[358,106228,106229,106231,106233],{},[361,106230,25839],{"align":23823},[361,106232,102781],{"align":23823},[361,106234,100820],{"align":23823},[398,106236,106237,106247],{},[358,106238,106239,106241,106244],{},[403,106240,103041],{"align":23823},[403,106242,106243],{"align":23823},"定义能怎么动",[403,106245,106246],{"align":23823},"门轴允许门旋转",[358,106248,106249,106251,106254],{},[403,106250,106150],{"align":23823},[403,106252,106253],{"align":23823},"定义怎么施力或控制",[403,106255,106256],{"align":23823},"人推门、马达带动门",[19,106258,106259,106260,106262],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[81,106261,101161],{}," 主动控制它。",[19,106264,106265],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[49,106267,106269],{"id":106268},"hinge-joint","hinge joint",[196,106271,106273],{"className":53153,"code":106272,"language":53155,"meta":125,"style":125},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[81,106274,106275],{"__ignoreMap":125},[204,106276,106277,106279,106281,106283,106285,106287,106289,106291,106293,106295,106297,106299,106302,106304,106307],{"class":206,"line":207},[204,106278,1123],{"class":214},[204,106280,103041],{"class":51386},[204,106282,15007],{"class":2049},[204,106284,260],{"class":214},[204,106286,106104],{"class":319},[204,106288,53910],{"class":2049},[204,106290,260],{"class":214},[204,106292,106104],{"class":319},[204,106294,106113],{"class":2049},[204,106296,260],{"class":214},[204,106298,106118],{"class":319},[204,106300,106301],{"class":2049}," damping",[204,106303,260],{"class":214},[204,106305,106306],{"class":319},"\"0.1\"",[204,106308,101229],{"class":214},[19,106310,106311],{},"含义：",[161,106313,106314,106320,106326],{},[71,106315,106316,106319],{},[81,106317,106318],{},"type=\"hinge\"","：只能绕一个轴旋转。",[71,106321,106322,106325],{},[81,106323,106324],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[71,106327,106328,106331],{},[81,106329,106330],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[49,106333,106335],{"id":106334},"motor-actuator","motor actuator",[196,106337,106339],{"className":53153,"code":106338,"language":53155,"meta":125,"style":125},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[81,106340,106341],{"__ignoreMap":125},[204,106342,106343,106345,106347,106349,106351,106353,106355,106357,106359,106361,106363,106365,106367,106369,106371,106373,106375,106377],{"class":206,"line":207},[204,106344,1123],{"class":214},[204,106346,106159],{"class":51386},[204,106348,15007],{"class":2049},[204,106350,260],{"class":214},[204,106352,106166],{"class":319},[204,106354,106169],{"class":2049},[204,106356,260],{"class":214},[204,106358,106104],{"class":319},[204,106360,106176],{"class":2049},[204,106362,260],{"class":214},[204,106364,3764],{"class":319},[204,106366,106183],{"class":2049},[204,106368,260],{"class":214},[204,106370,106188],{"class":319},[204,106372,106191],{"class":2049},[204,106374,260],{"class":214},[204,106376,106196],{"class":319},[204,106378,101229],{"class":214},[19,106380,106311],{},[161,106382,106383,106392,106398,106404],{},[71,106384,106385,106388,106389,106391],{},[81,106386,106387],{},"joint=\"hinge\"","：这个电机作用在名为 ",[81,106390,105925],{}," 的关节上。",[71,106393,106394,106397],{},[81,106395,106396],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[71,106399,106400,106403],{},[81,106401,106402],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[71,106405,106406,106409],{},[81,106407,106408],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106411,106412],{},"简单理解：",[196,106414,106417],{"className":106415,"code":106416,"language":5274,"meta":125},[5272],"实际施加效果 ≈ data.ctrl[0] * gear\n",[81,106418,106416],{"__ignoreMap":125},[19,106420,106421],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106423,101338],{"id":101337},[196,106425,106427],{"className":30464,"code":106426,"language":30466,"meta":125,"style":125},"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",[81,106428,106429,106436,106440,106446,106456,106460,106464,106472,106477,106482,106486,106490,106495,106500,106504,106509,106514,106519,106524,106528,106532,106536,106541,106546,106551,106555,106559,106563,106567,106579,106591,106599,106603,106613,106623,106633,106637,106650,106663,106667,106684,106698,106733,106737,106741,106752,106767,106782,106794,106798,106802,106814],{"__ignoreMap":125},[204,106430,106431,106433],{"class":206,"line":207},[204,106432,30478],{"class":210},[204,106434,106435],{"class":214}," math\n",[204,106437,106438],{"class":206,"line":126},[204,106439,2486],{"emptyLinePlaceholder":135},[204,106441,106442,106444],{"class":206,"line":131},[204,106443,30478],{"class":210},[204,106445,101386],{"class":214},[204,106447,106448,106450,106452,106454],{"class":206,"line":1281},[204,106449,30478],{"class":210},[204,106451,31466],{"class":214},[204,106453,31469],{"class":210},[204,106455,31472],{"class":214},[204,106457,106458],{"class":206,"line":1287},[204,106459,2486],{"emptyLinePlaceholder":135},[204,106461,106462],{"class":206,"line":1301},[204,106463,2486],{"emptyLinePlaceholder":135},[204,106465,106466,106468,106470],{"class":206,"line":1307},[204,106467,101399],{"class":263},[204,106469,13651],{"class":210},[204,106471,101404],{"class":319},[204,106473,106474],{"class":206,"line":1398},[204,106475,106476],{"class":319},"\u003Cmujoco model=\"one_link_motor\">\n",[204,106478,106479],{"class":206,"line":1404},[204,106480,106481],{"class":319},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[204,106483,106484],{"class":206,"line":1416},[204,106485,2486],{"emptyLinePlaceholder":135},[204,106487,106488],{"class":206,"line":1698},[204,106489,101423],{"class":319},[204,106491,106492],{"class":206,"line":1703},[204,106493,106494],{"class":319},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[204,106496,106497],{"class":206,"line":1709},[204,106498,106499],{"class":319},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[204,106501,106502],{"class":206,"line":1714},[204,106503,2486],{"emptyLinePlaceholder":135},[204,106505,106506],{"class":206,"line":1728},[204,106507,106508],{"class":319},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[204,106510,106511],{"class":206,"line":1733},[204,106512,106513],{"class":319},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[204,106515,106516],{"class":206,"line":1739},[204,106517,106518],{"class":319},"        \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",[204,106520,106521],{"class":206,"line":1760},[204,106522,106523],{"class":319},"      \u003C\u002Fbody>\n",[204,106525,106526],{"class":206,"line":1765},[204,106527,101452],{"class":319},[204,106529,106530],{"class":206,"line":1779},[204,106531,101457],{"class":319},[204,106533,106534],{"class":206,"line":1784},[204,106535,2486],{"emptyLinePlaceholder":135},[204,106537,106538],{"class":206,"line":1813},[204,106539,106540],{"class":319},"  \u003Cactuator>\n",[204,106542,106543],{"class":206,"line":1818},[204,106544,106545],{"class":319},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[204,106547,106548],{"class":206,"line":1835},[204,106549,106550],{"class":319},"  \u003C\u002Factuator>\n",[204,106552,106553],{"class":206,"line":1840},[204,106554,101462],{"class":319},[204,106556,106557],{"class":206,"line":1845},[204,106558,95784],{"class":319},[204,106560,106561],{"class":206,"line":1850},[204,106562,2486],{"emptyLinePlaceholder":135},[204,106564,106565],{"class":206,"line":1864},[204,106566,2486],{"emptyLinePlaceholder":135},[204,106568,106569,106571,106573,106575,106577],{"class":206,"line":1869},[204,106570,32033],{"class":210},[204,106572,2059],{"class":2049},[204,106574,101483],{"class":214},[204,106576,95772],{"class":263},[204,106578,3825],{"class":214},[204,106580,106581,106583,106585,106587,106589],{"class":206,"line":2663},[204,106582,101492],{"class":214},[204,106584,260],{"class":210},[204,106586,101497],{"class":214},[204,106588,101399],{"class":263},[204,106590,221],{"class":214},[204,106592,106593,106595,106597],{"class":206,"line":2677},[204,106594,101506],{"class":214},[204,106596,260],{"class":210},[204,106598,101511],{"class":214},[204,106600,106601],{"class":206,"line":2685},[204,106602,2486],{"emptyLinePlaceholder":135},[204,106604,106605,106607,106609,106611],{"class":206,"line":2690},[204,106606,31385],{"class":263},[204,106608,215],{"class":214},[204,106610,101524],{"class":319},[204,106612,101527],{"class":214},[204,106614,106615,106617,106619,106621],{"class":206,"line":2696},[204,106616,31385],{"class":263},[204,106618,215],{"class":214},[204,106620,101536],{"class":319},[204,106622,101539],{"class":214},[204,106624,106625,106627,106629,106631],{"class":206,"line":2702},[204,106626,31385],{"class":263},[204,106628,215],{"class":214},[204,106630,101548],{"class":319},[204,106632,101551],{"class":214},[204,106634,106635],{"class":206,"line":2707},[204,106636,2486],{"emptyLinePlaceholder":135},[204,106638,106639,106641,106644,106646,106648],{"class":206,"line":8035},[204,106640,3187],{"class":210},[204,106642,106643],{"class":214}," model.nu ",[204,106645,21035],{"class":210},[204,106647,25205],{"class":263},[204,106649,3825],{"class":214},[204,106651,106652,106654,106656,106658,106661],{"class":206,"line":8059},[204,106653,103517],{"class":210},[204,106655,103520],{"class":263},[204,106657,215],{"class":214},[204,106659,106660],{"class":319},"\"expected exactly one actuator\"",[204,106662,221],{"class":214},[204,106664,106665],{"class":206,"line":8064},[204,106666,2486],{"emptyLinePlaceholder":135},[204,106668,106669,106671,106673,106675,106677,106679,106682],{"class":206,"line":8070},[204,106670,3287],{"class":210},[204,106672,31702],{"class":214},[204,106674,26129],{"class":210},[204,106676,32529],{"class":263},[204,106678,215],{"class":214},[204,106680,106681],{"class":263},"2000",[204,106683,30872],{"class":214},[204,106685,106686,106689,106691,106693,106695],{"class":206,"line":8097},[204,106687,106688],{"class":214},"        t ",[204,106690,260],{"class":210},[204,106692,31702],{"class":214},[204,106694,668],{"class":210},[204,106696,106697],{"class":214}," model.opt.timestep\n",[204,106699,106700,106703,106705,106707,106709,106712,106714,106717,106719,106721,106724,106726,106728,106730],{"class":206,"line":8102},[204,106701,106702],{"class":214},"        data.ctrl[",[204,106704,405],{"class":263},[204,106706,4529],{"class":214},[204,106708,260],{"class":210},[204,106710,106711],{"class":263}," 1.5",[204,106713,6605],{"class":210},[204,106715,106716],{"class":214}," math.sin(",[204,106718,105345],{"class":263},[204,106720,6605],{"class":210},[204,106722,106723],{"class":214}," math.pi ",[204,106725,668],{"class":210},[204,106727,61953],{"class":263},[204,106729,6605],{"class":210},[204,106731,106732],{"class":214}," t)\n",[204,106734,106735],{"class":206,"line":8108},[204,106736,101601],{"class":214},[204,106738,106739],{"class":206,"line":8120},[204,106740,2486],{"emptyLinePlaceholder":135},[204,106742,106743,106745,106747,106750],{"class":206,"line":8132},[204,106744,31385],{"class":263},[204,106746,215],{"class":214},[204,106748,106749],{"class":319},"\"time:\"",[204,106751,101563],{"class":214},[204,106753,106754,106756,106758,106761,106763,106765],{"class":206,"line":8144},[204,106755,31385],{"class":263},[204,106757,215],{"class":214},[204,106759,106760],{"class":319},"\"joint qpos:\"",[204,106762,105015],{"class":214},[204,106764,506],{"class":263},[204,106766,30583],{"class":214},[204,106768,106769,106771,106773,106776,106778,106780],{"class":206,"line":9803},[204,106770,31385],{"class":263},[204,106772,215],{"class":214},[204,106774,106775],{"class":319},"\"joint qvel:\"",[204,106777,105031],{"class":214},[204,106779,506],{"class":263},[204,106781,30583],{"class":214},[204,106783,106784,106786,106788,106791],{"class":206,"line":9828},[204,106785,31385],{"class":263},[204,106787,215],{"class":214},[204,106789,106790],{"class":319},"\"last ctrl:\"",[204,106792,106793],{"class":214},", data.ctrl.copy())\n",[204,106795,106796],{"class":206,"line":9851},[204,106797,2486],{"emptyLinePlaceholder":135},[204,106799,106800],{"class":206,"line":9875},[204,106801,2486],{"emptyLinePlaceholder":135},[204,106803,106804,106806,106808,106810,106812],{"class":206,"line":9880},[204,106805,1617],{"class":210},[204,106807,31306],{"class":263},[204,106809,101644],{"class":210},[204,106811,101647],{"class":319},[204,106813,3825],{"class":214},[204,106815,106816],{"class":206,"line":9885},[204,106817,101654],{"class":214},[19,106819,103655],{},[196,106821,106823],{"className":23909,"code":106822,"language":23911,"meta":125,"style":125},"touch ch4_joint_motor.py\n",[81,106824,106825],{"__ignoreMap":125},[204,106826,106827,106829],{"class":206,"line":207},[204,106828,101368],{"class":2049},[204,106830,106831],{"class":319}," ch4_joint_motor.py\n",[19,106833,102386],{},[196,106835,106837],{"className":23909,"code":106836,"language":23911,"meta":125,"style":125},"python ch4_joint_motor.py\n",[81,106838,106839],{"__ignoreMap":125},[204,106840,106841,106843],{"class":206,"line":207},[204,106842,30466],{"class":2049},[204,106844,106831],{"class":319},[49,106846,101657],{"id":101657},[19,106848,106849],{},"检查 actuator 数量：",[196,106851,106853],{"className":30464,"code":106852,"language":30466,"meta":125,"style":125},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[81,106854,106855,106867],{"__ignoreMap":125},[204,106856,106857,106859,106861,106863,106865],{"class":206,"line":207},[204,106858,1617],{"class":210},[204,106860,106643],{"class":214},[204,106862,21035],{"class":210},[204,106864,25205],{"class":263},[204,106866,3825],{"class":214},[204,106868,106869,106871,106873,106875,106877],{"class":206,"line":126},[204,106870,103980],{"class":210},[204,106872,103520],{"class":263},[204,106874,215],{"class":214},[204,106876,106660],{"class":319},[204,106878,221],{"class":214},[19,106880,106881,106883,106884,106886],{},[81,106882,102243],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[81,106885,101161],{}," 长度应该是 1。",[19,106888,106889],{},"产生正弦控制信号：",[196,106891,106893],{"className":30464,"code":106892,"language":30466,"meta":125,"style":125},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[81,106894,106895],{"__ignoreMap":125},[204,106896,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921,106923],{"class":206,"line":207},[204,106898,105956],{"class":214},[204,106900,405],{"class":263},[204,106902,4529],{"class":214},[204,106904,260],{"class":210},[204,106906,106711],{"class":263},[204,106908,6605],{"class":210},[204,106910,106716],{"class":214},[204,106912,105345],{"class":263},[204,106914,6605],{"class":210},[204,106916,106723],{"class":214},[204,106918,668],{"class":210},[204,106920,61953],{"class":263},[204,106922,6605],{"class":210},[204,106924,106732],{"class":214},[19,106926,106927],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106929,101758],{},[196,106931,106932],{"className":30464,"code":104590,"language":30466,"meta":125,"style":125},[81,106933,106934],{"__ignoreMap":125},[204,106935,106936],{"class":206,"line":207},[204,106937,104590],{"class":214},[19,106939,106940],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[49,106942,101793],{"id":101793},[196,106944,106946],{"className":30464,"code":106945,"language":30466,"meta":125,"style":125},"import math\n",[81,106947,106948],{"__ignoreMap":125},[204,106949,106950,106952],{"class":206,"line":207},[204,106951,30478],{"class":210},[204,106953,106435],{"class":214},[19,106955,106956,106957,43,106960,106963],{},"导入 Python 标准库里的数学模块。后面要用 ",[81,106958,106959],{},"math.sin",[81,106961,106962],{},"math.pi"," 生成周期变化的控制信号。",[196,106965,106966],{"className":30464,"code":103771,"language":30466,"meta":125,"style":125},[81,106967,106968,106974],{"__ignoreMap":125},[204,106969,106970,106972],{"class":206,"line":207},[204,106971,30478],{"class":210},[204,106973,101386],{"class":214},[204,106975,106976,106978,106980,106982],{"class":206,"line":126},[204,106977,30478],{"class":210},[204,106979,31466],{"class":214},[204,106981,31469],{"class":210},[204,106983,31472],{"class":214},[19,106985,106986],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[196,106988,106989],{"className":53153,"code":106272,"language":53155,"meta":125,"style":125},[81,106990,106991],{"__ignoreMap":125},[204,106992,106993,106995,106997,106999,107001,107003,107005,107007,107009,107011,107013,107015,107017,107019,107021],{"class":206,"line":207},[204,106994,1123],{"class":214},[204,106996,103041],{"class":51386},[204,106998,15007],{"class":2049},[204,107000,260],{"class":214},[204,107002,106104],{"class":319},[204,107004,53910],{"class":2049},[204,107006,260],{"class":214},[204,107008,106104],{"class":319},[204,107010,106113],{"class":2049},[204,107012,260],{"class":214},[204,107014,106118],{"class":319},[204,107016,106301],{"class":2049},[204,107018,260],{"class":214},[204,107020,106306],{"class":319},[204,107022,101229],{"class":214},[19,107024,107025,107026,107028,107029,107031,107032,107034],{},"这行定义关节。",[81,107027,105925],{}," 表示旋转关节。",[81,107030,106324],{}," 表示绕 y 轴旋转。",[81,107033,106330],{}," 表示有一点阻尼，运动不会完全无损耗。",[196,107036,107038],{"className":53153,"code":107037,"language":53155,"meta":125,"style":125},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[81,107039,107040],{"__ignoreMap":125},[204,107041,107042,107044,107046,107048,107050,107053,107055,107057,107060,107063,107065,107068,107070,107072,107074,107076,107078,107081],{"class":206,"line":207},[204,107043,1123],{"class":214},[204,107045,101205],{"class":51386},[204,107047,15007],{"class":2049},[204,107049,260],{"class":214},[204,107051,107052],{"class":319},"\"link_geom\"",[204,107054,53910],{"class":2049},[204,107056,260],{"class":214},[204,107058,107059],{"class":319},"\"capsule\"",[204,107061,107062],{"class":2049}," fromto",[204,107064,260],{"class":214},[204,107066,107067],{"class":319},"\"0 0 0 0 0 0.5\"",[204,107069,101221],{"class":2049},[204,107071,260],{"class":214},[204,107073,103863],{"class":319},[204,107075,102086],{"class":2049},[204,107077,260],{"class":214},[204,107079,107080],{"class":319},"\"0.5\"",[204,107082,101229],{"class":214},[19,107084,107085,107086,107088,107089,107091,107092,107095,107096,28471,107099,107101],{},"这行定义摆杆的形状。",[81,107087,103250],{}," 是胶囊体，适合表示杆子。",[81,107090,103261],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[81,107093,107094],{},"(0,0,0)"," 延伸到 ",[81,107097,107098],{},"(0,0,0.5)",[81,107100,103255],{}," 是半径。",[196,107103,107104],{"className":53153,"code":106338,"language":53155,"meta":125,"style":125},[81,107105,107106],{"__ignoreMap":125},[204,107107,107108,107110,107112,107114,107116,107118,107120,107122,107124,107126,107128,107130,107132,107134,107136,107138,107140,107142],{"class":206,"line":207},[204,107109,1123],{"class":214},[204,107111,106159],{"class":51386},[204,107113,15007],{"class":2049},[204,107115,260],{"class":214},[204,107117,106166],{"class":319},[204,107119,106169],{"class":2049},[204,107121,260],{"class":214},[204,107123,106104],{"class":319},[204,107125,106176],{"class":2049},[204,107127,260],{"class":214},[204,107129,3764],{"class":319},[204,107131,106183],{"class":2049},[204,107133,260],{"class":214},[204,107135,106188],{"class":319},[204,107137,106191],{"class":2049},[204,107139,260],{"class":214},[204,107141,106196],{"class":319},[204,107143,101229],{"class":214},[19,107145,107146,107147,107149,107150,107153,107154,107156],{},"这行定义电机。它作用在 ",[81,107148,105925],{}," 关节上。",[81,107151,107152],{},"gear"," 可以理解成放大倍数。",[81,107155,105940],{}," 限制控制输入范围。",[196,107158,107159],{"className":30464,"code":106852,"language":30466,"meta":125,"style":125},[81,107160,107161,107173],{"__ignoreMap":125},[204,107162,107163,107165,107167,107169,107171],{"class":206,"line":207},[204,107164,1617],{"class":210},[204,107166,106643],{"class":214},[204,107168,21035],{"class":210},[204,107170,25205],{"class":263},[204,107172,3825],{"class":214},[204,107174,107175,107177,107179,107181,107183],{"class":206,"line":126},[204,107176,103980],{"class":210},[204,107178,103520],{"class":263},[204,107180,215],{"class":214},[204,107182,106660],{"class":319},[204,107184,221],{"class":214},[19,107186,107187,107189],{},[81,107188,102243],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[196,107191,107193],{"className":30464,"code":107192,"language":30466,"meta":125,"style":125},"for step in range(2000):\n",[81,107194,107195],{"__ignoreMap":125},[204,107196,107197,107199,107201,107203,107205,107207,107209],{"class":206,"line":207},[204,107198,3111],{"class":210},[204,107200,31702],{"class":214},[204,107202,26129],{"class":210},[204,107204,32529],{"class":263},[204,107206,215],{"class":214},[204,107208,106681],{"class":263},[204,107210,30872],{"class":214},[19,107212,107213,107214,107216,107217,107220],{},"循环 2000 步。这里没有用 ",[81,107215,1205],{},"，而是用 ",[81,107218,107219],{},"step","，因为后面要用当前步数计算时间。",[196,107222,107224],{"className":30464,"code":107223,"language":30466,"meta":125,"style":125},"t = step * model.opt.timestep\n",[81,107225,107226],{"__ignoreMap":125},[204,107227,107228,107231,107233,107235,107237],{"class":206,"line":207},[204,107229,107230],{"class":214},"t ",[204,107232,260],{"class":210},[204,107234,31702],{"class":214},[204,107236,668],{"class":210},[204,107238,106697],{"class":214},[19,107240,107241],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[196,107243,107244],{"className":30464,"code":106892,"language":30466,"meta":125,"style":125},[81,107245,107246],{"__ignoreMap":125},[204,107247,107248,107250,107252,107254,107256,107258,107260,107262,107264,107266,107268,107270,107272,107274],{"class":206,"line":207},[204,107249,105956],{"class":214},[204,107251,405],{"class":263},[204,107253,4529],{"class":214},[204,107255,260],{"class":210},[204,107257,106711],{"class":263},[204,107259,6605],{"class":210},[204,107261,106716],{"class":214},[204,107263,105345],{"class":263},[204,107265,6605],{"class":210},[204,107267,106723],{"class":214},[204,107269,668],{"class":210},[204,107271,61953],{"class":263},[204,107273,6605],{"class":210},[204,107275,106732],{"class":214},[19,107277,107278],{},"这行给电机输入一个正弦波。拆开看：",[161,107280,107281,107287,107293],{},[71,107282,107283,107286],{},[81,107284,107285],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[71,107288,107289,107292],{},[81,107290,107291],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[71,107294,107295,107298],{},[81,107296,107297],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107300,107301],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[196,107303,107305],{"className":30464,"code":107304,"language":30466,"meta":125,"style":125},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[81,107306,107307],{"__ignoreMap":125},[204,107308,107309,107311,107313,107315,107317,107319],{"class":206,"line":207},[204,107310,30501],{"class":263},[204,107312,215],{"class":214},[204,107314,106760],{"class":319},[204,107316,105015],{"class":214},[204,107318,506],{"class":263},[204,107320,30583],{"class":214},[19,107322,107323,107324,107326],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[81,107325,101155],{}," 只有一个数。",[14,107328,102401],{"id":102400},[19,107330,107331],{},"输出类似:",[196,107333,107336],{"className":107334,"code":107335,"language":5274,"meta":125},[5272],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[81,107337,107335],{"__ignoreMap":125},[19,107339,107340,107341,107343],{},"这里 ",[81,107342,106211],{}," 是电机输入。",[19,107345,107346,107349,107350,107353],{},[81,107347,107348],{},"joint qpos"," 是关节角度，单位通常是弧度。",[81,107351,107352],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107355,107356],{},"角度单位提示：",[196,107358,107361],{"className":107359,"code":107360,"language":5274,"meta":125},[5272],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[81,107362,107360],{"__ignoreMap":125},[19,107364,107365,107366,107368,107369,107371],{},"如果你看到 ",[81,107367,104115],{}," 是 ",[81,107370,35415],{},"，大约就是 28.6 度。",[14,107373,102433],{"id":102432},[161,107375,107376,107383,107386,107393,107396,107404,107412],{},[71,107377,102496,107378,102499,107380,28471],{},[81,107379,106396],{},[81,107381,107382],{},"gear=\"5\"",[71,107384,107385],{},"重新运行，观察关节运动是否更剧烈。",[71,107387,102496,107388,102499,107390,28471],{},[81,107389,105940],{},[81,107391,107392],{},"-0.2 0.2",[71,107394,107395],{},"重新运行，观察控制能力是否变弱。",[71,107397,107398,107399,107401,107402,28471],{},"去掉 actuator，确认 ",[81,107400,102243],{}," 变成 ",[81,107403,405],{},[71,107405,102496,107406,102499,107408,107411],{},[81,107407,106330],{},[81,107409,107410],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[71,107413,102496,107414,102499,107416,107419],{},[81,107415,106324],{},[81,107417,107418],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107421,102538],{"id":102537},[49,107423,107425],{"id":107424},"indexerror-index-0-is-out-of-bounds",[81,107426,107427],{},"IndexError: index 0 is out of bounds",[19,107429,107430,107431,107433],{},"原因是 ",[81,107432,106077],{},"，没有 actuator。",[49,107435,107436],{"id":107436},"关节几乎不动",[19,107438,107439],{},"可能原因:",[161,107441,107442,107447,107451,107457],{},[71,107443,107444,107446],{},[81,107445,107152],{}," 太小",[71,107448,107449,107446],{},[81,107450,105940],{},[71,107452,107453,107456],{},[81,107454,107455],{},"damping"," 太大",[71,107458,107459],{},"重力方向导致运动不明显",[49,107461,107462],{"id":107462},"模型编译失败",[19,107464,107465,107466,107468],{},"检查 actuator 引用的 ",[81,107467,106387],{}," 是否存在，joint 名称是否拼写一致。",[49,107470,107472,107474],{"id":107471},"datactrl0-写了但没有效果",[81,107473,106211],{}," 写了但没有效果",[19,107476,102660],{},[161,107478,107479,107484,107487,107492,107497],{},[71,107480,107481,107483],{},[81,107482,102243],{}," 是否大于 0。",[71,107485,107486],{},"motor 是否引用了正确 joint。",[71,107488,107489,107491],{},[81,107490,107152],{}," 是否太小。",[71,107493,107494,107496],{},[81,107495,105940],{}," 是否把输入限制得太小。",[71,107498,107499],{},"body 是否真的有可动 joint。",[49,107501,107502],{"id":107502},"控制输入超过范围会怎样",[19,107504,107505],{},"如果设置了：",[196,107507,107509],{"className":53153,"code":107508,"language":53155,"meta":125,"style":125},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[81,107510,107511],{"__ignoreMap":125},[204,107512,107513],{"class":206,"line":207},[204,107514,107508],{"class":214},[19,107516,107517],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[196,107519,107521],{"className":30464,"code":107520,"language":30466,"meta":125,"style":125},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[81,107522,107523,107543],{"__ignoreMap":125},[204,107524,107525,107528,107530,107533,107535,107537,107539,107541],{"class":206,"line":207},[204,107526,107527],{"class":214},"action ",[204,107529,260],{"class":210},[204,107531,107532],{"class":214}," np.clip(action, ",[204,107534,745],{"class":210},[204,107536,105345],{"class":263},[204,107538,12522],{"class":214},[204,107540,105345],{"class":263},[204,107542,221],{"class":214},[204,107544,107545,107547,107549,107551,107553],{"class":206,"line":126},[204,107546,105956],{"class":214},[204,107548,405],{"class":263},[204,107550,4529],{"class":214},[204,107552,260],{"class":210},[204,107554,107555],{"class":214}," action\n",[14,107557,102692],{"id":102691},[19,107559,107560],{},"这一章建立了控制任务的基本形式：",[196,107562,107565],{"className":107563,"code":107564,"language":5274,"meta":125},[5272],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[81,107566,107564],{"__ignoreMap":125},[19,107568,107569],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5213,107571,107572],{},"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":125,"searchDepth":126,"depth":126,"links":107574},[107575,107576,107577,107582,107586,107587,107588,107596],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":107578},[107579,107580,107581],{"id":106218,"depth":131,"text":106219},{"id":106268,"depth":131,"text":106269},{"id":106334,"depth":131,"text":106335},{"id":101337,"depth":126,"text":101338,"children":107583},[107584,107585],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":107589},[107590,107591,107592,107593,107595],{"id":107424,"depth":131,"text":107427},{"id":107436,"depth":131,"text":107436},{"id":107462,"depth":131,"text":107462},{"id":107471,"depth":131,"text":107594},"data.ctrl[0] 写了但没有效果",{"id":107502,"depth":131,"text":107502},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105906,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107603,"title":107604,"body":107605,"description":125,"extension":133,"meta":109514,"navigation":135,"path":109515,"seo":109516,"stem":109517,"__hash__":109518},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107606,"toc":109490},[107607,107610,107612,107615,107623,107626,107643,107646,107671,107674,107720,107722,107724,107779,107781,107800,107802,107845,107848,107865,107868,107884,107894,107901,107903,107906,107909,107943,107946,107994,107998,108001,108015,108024,108028,108031,108056,108059,108063,108076,108079,108085,108088,108103,108105,108108,108368,108370,108382,108385,108697,108699,108711,108713,108716,108731,108736,108739,108761,108764,108767,108801,108804,108808,108819,108822,108839,108842,108856,108863,108883,108890,108904,108907,108919,108934,108954,108957,108979,108982,108986,109001,109012,109027,109030,109060,109076,109105,109113,109137,109140,109158,109168,109180,109187,109196,109202,109211,109214,109216,109225,109228,109243,109245,109248,109259,109262,109273,109276,109294,109296,109313,109316,109344,109346,109350,109353,109383,109389,109392,109396,109404,109407,109409,109430,109433,109436,109452,109455,109471,109473,109476,109487],[10,107608,107604],{"id":107609},"_5viewer-可视化与-renderer-离屏渲染",[14,107611,100733],{"id":100732},[19,107613,107614],{},"本章掌握两类可视化方式:",[161,107616,107617,107620],{},[71,107618,107619],{},"交互式 viewer: 适合人工观察仿真",[71,107621,107622],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107624,107625],{},"使用官方接口:",[196,107627,107629],{"className":30464,"code":107628,"language":30466,"meta":125,"style":125},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[81,107630,107631,107638],{"__ignoreMap":125},[204,107632,107633,107635],{"class":206,"line":207},[204,107634,30478],{"class":210},[204,107636,107637],{"class":214}," mujoco.viewer\n",[204,107639,107640],{"class":206,"line":126},[204,107641,107642],{"class":214},"mujoco.viewer.launch_passive(model, data)\n",[19,107644,107645],{},"以及:",[196,107647,107649],{"className":30464,"code":107648,"language":30466,"meta":125,"style":125},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[81,107650,107651,107661],{"__ignoreMap":125},[204,107652,107653,107656,107658],{"class":206,"line":207},[204,107654,107655],{"class":214},"renderer ",[204,107657,260],{"class":210},[204,107659,107660],{"class":214}," mujoco.Renderer(model)\n",[204,107662,107663,107666,107668],{"class":206,"line":126},[204,107664,107665],{"class":214},"image ",[204,107667,260],{"class":210},[204,107669,107670],{"class":214}," renderer.render()\n",[19,107672,107673],{},"新手建议先理解二者区别：",[352,107675,107676,107692],{},[355,107677,107678],{},[358,107679,107680,107683,107686,107689],{},[361,107681,107682],{"align":23823},"工具",[361,107684,107685],{"align":23823},"用途",[361,107687,107688],{"align":23823},"是否打开窗口",[361,107690,107691],{"align":23823},"常见场景",[398,107693,107694,107707],{},[358,107695,107696,107699,107702,107704],{},[403,107697,107698],{"align":23823},"Viewer",[403,107700,107701],{"align":23823},"人眼实时观察仿真",[403,107703,104750],{"align":23823},[403,107705,107706],{"align":23823},"调试模型、看控制效果",[358,107708,107709,107712,107715,107717],{},[403,107710,107711],{"align":23823},"Renderer",[403,107713,107714],{"align":23823},"生成图像数组",[403,107716,104763],{"align":23823},[403,107718,107719],{"align":23823},"保存图片、训练视觉策略、服务器批量采集",[14,107721,100856],{"id":100855},[19,107723,100859],{},[196,107725,107727],{"className":23909,"code":107726,"language":23911,"meta":125,"style":125},"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",[81,107728,107729,107741,107751,107759,107767],{"__ignoreMap":125},[204,107730,107731,107733,107735,107737,107739],{"class":206,"line":207},[204,107732,24663],{"class":2049},[204,107734,26401],{"class":319},[204,107736,23921],{"class":319},[204,107738,26486],{"class":263},[204,107740,24765],{"class":263},[204,107742,107743,107745,107747,107749],{"class":206,"line":126},[204,107744,100894],{"class":319},[204,107746,100897],{"class":319},[204,107748,100900],{"class":319},[204,107750,24765],{"class":263},[204,107752,107753,107755,107757],{"class":206,"line":131},[204,107754,100907],{"class":319},[204,107756,100910],{"class":319},[204,107758,24765],{"class":263},[204,107760,107761,107763,107765],{"class":206,"line":1281},[204,107762,100917],{"class":319},[204,107764,100920],{"class":319},[204,107766,24765],{"class":263},[204,107768,107769,107771,107773,107775,107777],{"class":206,"line":1287},[204,107770,100927],{"class":319},[204,107772,100930],{"class":319},[204,107774,100933],{"class":319},[204,107776,100936],{"class":319},[204,107778,102601],{"class":319},[19,107780,102904],{},[196,107782,107784],{"className":23909,"code":107783,"language":23911,"meta":125,"style":125},"pip install \"mujoco>=2.3\" numpy pillow\n",[81,107785,107786],{"__ignoreMap":125},[204,107787,107788,107790,107792,107794,107797],{"class":206,"line":207},[204,107789,23918],{"class":2049},[204,107791,23921],{"class":319},[204,107793,101016],{"class":319},[204,107795,107796],{"class":319}," numpy",[204,107798,107799],{"class":319}," pillow\n",[19,107801,102921],{},[196,107803,107805],{"className":23909,"code":107804,"language":23911,"meta":125,"style":125},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[81,107806,107807,107824,107833],{"__ignoreMap":125},[204,107808,107809,107811,107813,107815,107818,107820,107822],{"class":206,"line":207},[204,107810,30416],{"class":2049},[204,107812,29262],{"class":319},[204,107814,25202],{"class":263},[204,107816,107817],{"class":319}," mujoco-render",[204,107819,101061],{"class":319},[204,107821,101064],{"class":263},[204,107823,101067],{"class":263},[204,107825,107826,107828,107830],{"class":206,"line":126},[204,107827,30416],{"class":2049},[204,107829,101074],{"class":319},[204,107831,107832],{"class":319}," mujoco-render\n",[204,107834,107835,107837,107839,107841,107843],{"class":206,"line":131},[204,107836,23918],{"class":2049},[204,107838,23921],{"class":319},[204,107840,101016],{"class":319},[204,107842,107796],{"class":319},[204,107844,107799],{"class":319},[19,107846,107847],{},"离屏渲染后端:",[196,107849,107851],{"className":23909,"code":107850,"language":23911,"meta":125,"style":125},"export MUJOCO_GL=egl\n",[81,107852,107853],{"__ignoreMap":125},[204,107854,107855,107857,107860,107862],{"class":206,"line":207},[204,107856,25129],{"class":210},[204,107858,107859],{"class":214}," MUJOCO_GL",[204,107861,260],{"class":210},[204,107863,107864],{"class":214},"egl\n",[19,107866,107867],{},"或:",[196,107869,107871],{"className":23909,"code":107870,"language":23911,"meta":125,"style":125},"export MUJOCO_GL=osmesa\n",[81,107872,107873],{"__ignoreMap":125},[204,107874,107875,107877,107879,107881],{"class":206,"line":207},[204,107876,25129],{"class":210},[204,107878,107859],{"class":214},[204,107880,260],{"class":210},[204,107882,107883],{"class":214},"osmesa\n",[19,107885,107886,107887,107890,107891,28471],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[81,107888,107889],{},"egl"," 失败，再尝试 ",[81,107892,107893],{},"osmesa",[19,107895,107896,107897,107900],{},"如果你在本机桌面环境运行，通常先不要设置 ",[81,107898,107899],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107902,101130],{"id":101129},[19,107904,107905],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107907,107908],{},"典型 viewer 流程:",[196,107910,107912],{"className":30464,"code":107911,"language":30466,"meta":125,"style":125},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[81,107913,107914,107927,107934,107938],{"__ignoreMap":125},[204,107915,107916,107919,107922,107924],{"class":206,"line":207},[204,107917,107918],{"class":210},"with",[204,107920,107921],{"class":214}," mujoco.viewer.launch_passive(model, data) ",[204,107923,31469],{"class":210},[204,107925,107926],{"class":214}," viewer:\n",[204,107928,107929,107931],{"class":206,"line":126},[204,107930,2337],{"class":210},[204,107932,107933],{"class":214}," viewer.is_running():\n",[204,107935,107936],{"class":206,"line":131},[204,107937,101601],{"class":214},[204,107939,107940],{"class":206,"line":1281},[204,107941,107942],{"class":214},"        viewer.sync()\n",[19,107944,107945],{},"典型 renderer 流程:",[196,107947,107949],{"className":30464,"code":107948,"language":30466,"meta":125,"style":125},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[81,107950,107951,107977,107981,107986],{"__ignoreMap":125},[204,107952,107953,107955,107957,107960,107962,107964,107966,107968,107970,107972,107975],{"class":206,"line":207},[204,107954,107655],{"class":214},[204,107956,260],{"class":210},[204,107958,107959],{"class":214}," mujoco.Renderer(model, ",[204,107961,25068],{"class":5303},[204,107963,260],{"class":210},[204,107965,42428],{"class":263},[204,107967,12522],{"class":214},[204,107969,25064],{"class":5303},[204,107971,260],{"class":210},[204,107973,107974],{"class":263},"640",[204,107976,221],{"class":214},[204,107978,107979],{"class":206,"line":126},[204,107980,104590],{"class":214},[204,107982,107983],{"class":206,"line":131},[204,107984,107985],{"class":214},"renderer.update_scene(data)\n",[204,107987,107988,107990,107992],{"class":206,"line":1281},[204,107989,107665],{"class":214},[204,107991,260],{"class":210},[204,107993,107670],{"class":214},[49,107995,107997],{"id":107996},"viewer-的同步逻辑","viewer 的同步逻辑",[19,107999,108000],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[196,108002,108004],{"className":30464,"code":108003,"language":30466,"meta":125,"style":125},"mujoco.mj_step(model, data)\nviewer.sync()\n",[81,108005,108006,108010],{"__ignoreMap":125},[204,108007,108008],{"class":206,"line":207},[204,108009,104590],{"class":214},[204,108011,108012],{"class":206,"line":126},[204,108013,108014],{"class":214},"viewer.sync()\n",[19,108016,108017,108019,108020,108023],{},[81,108018,101300],{}," 负责算物理，",[81,108021,108022],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[49,108025,108027],{"id":108026},"为什么要-sleep","为什么要 sleep",[19,108029,108030],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[196,108032,108034],{"className":30464,"code":108033,"language":30466,"meta":125,"style":125},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[81,108035,108036],{"__ignoreMap":125},[204,108037,108038,108041,108043,108046,108048,108051,108053],{"class":206,"line":207},[204,108039,108040],{"class":214},"sleep_time ",[204,108042,260],{"class":210},[204,108044,108045],{"class":214}," model.opt.timestep ",[204,108047,745],{"class":210},[204,108049,108050],{"class":214}," (time.time() ",[204,108052,745],{"class":210},[204,108054,108055],{"class":214}," step_start)\n",[19,108057,108058],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[49,108060,108062],{"id":108061},"renderer-输出是什么","renderer 输出是什么",[196,108064,108066],{"className":30464,"code":108065,"language":30466,"meta":125,"style":125},"image = renderer.render()\n",[81,108067,108068],{"__ignoreMap":125},[204,108069,108070,108072,108074],{"class":206,"line":207},[204,108071,107665],{"class":214},[204,108073,260],{"class":210},[204,108075,107670],{"class":214},[19,108077,108078],{},"得到的是 NumPy 数组，形状通常是：",[196,108080,108083],{"className":108081,"code":108082,"language":5274,"meta":125},[5272],"(height, width, 3)\n",[81,108084,108082],{"__ignoreMap":125},[19,108086,108087],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[196,108089,108091],{"className":30464,"code":108090,"language":30466,"meta":125,"style":125},"Image.fromarray(image).save(\"render_output.png\")\n",[81,108092,108093],{"__ignoreMap":125},[204,108094,108095,108098,108101],{"class":206,"line":207},[204,108096,108097],{"class":214},"Image.fromarray(image).save(",[204,108099,108100],{"class":319},"\"render_output.png\"",[204,108102,221],{"class":214},[14,108104,101338],{"id":101337},[19,108106,108107],{},"交互式 Viewer:",[196,108109,108111],{"className":30464,"code":108110,"language":30466,"meta":125,"style":125},"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",[81,108112,108113,108119,108123,108129,108135,108139,108143,108151,108156,108160,108164,108168,108173,108178,108182,108186,108190,108195,108199,108203,108207,108211,108215,108219,108231,108243,108251,108255,108265,108285,108295,108300,108305,108309,108326,108339,108344,108348,108352,108364],{"__ignoreMap":125},[204,108114,108115,108117],{"class":206,"line":207},[204,108116,30478],{"class":210},[204,108118,31915],{"class":214},[204,108120,108121],{"class":206,"line":126},[204,108122,2486],{"emptyLinePlaceholder":135},[204,108124,108125,108127],{"class":206,"line":131},[204,108126,30478],{"class":210},[204,108128,101386],{"class":214},[204,108130,108131,108133],{"class":206,"line":1281},[204,108132,30478],{"class":210},[204,108134,107637],{"class":214},[204,108136,108137],{"class":206,"line":1287},[204,108138,2486],{"emptyLinePlaceholder":135},[204,108140,108141],{"class":206,"line":1301},[204,108142,2486],{"emptyLinePlaceholder":135},[204,108144,108145,108147,108149],{"class":206,"line":1307},[204,108146,101399],{"class":263},[204,108148,13651],{"class":210},[204,108150,101404],{"class":319},[204,108152,108153],{"class":206,"line":1398},[204,108154,108155],{"class":319},"\u003Cmujoco model=\"viewer_demo\">\n",[204,108157,108158],{"class":206,"line":1404},[204,108159,101414],{"class":319},[204,108161,108162],{"class":206,"line":1416},[204,108163,2486],{"emptyLinePlaceholder":135},[204,108165,108166],{"class":206,"line":1698},[204,108167,101423],{"class":319},[204,108169,108170],{"class":206,"line":1703},[204,108171,108172],{"class":319},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[204,108174,108175],{"class":206,"line":1709},[204,108176,108177],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[204,108179,108180],{"class":206,"line":1714},[204,108181,2486],{"emptyLinePlaceholder":135},[204,108183,108184],{"class":206,"line":1728},[204,108185,101437],{"class":319},[204,108187,108188],{"class":206,"line":1733},[204,108189,101442],{"class":319},[204,108191,108192],{"class":206,"line":1739},[204,108193,108194],{"class":319},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[204,108196,108197],{"class":206,"line":1760},[204,108198,101452],{"class":319},[204,108200,108201],{"class":206,"line":1765},[204,108202,101457],{"class":319},[204,108204,108205],{"class":206,"line":1779},[204,108206,101462],{"class":319},[204,108208,108209],{"class":206,"line":1784},[204,108210,95784],{"class":319},[204,108212,108213],{"class":206,"line":1813},[204,108214,2486],{"emptyLinePlaceholder":135},[204,108216,108217],{"class":206,"line":1818},[204,108218,2486],{"emptyLinePlaceholder":135},[204,108220,108221,108223,108225,108227,108229],{"class":206,"line":1835},[204,108222,32033],{"class":210},[204,108224,2059],{"class":2049},[204,108226,101483],{"class":214},[204,108228,95772],{"class":263},[204,108230,3825],{"class":214},[204,108232,108233,108235,108237,108239,108241],{"class":206,"line":1840},[204,108234,101492],{"class":214},[204,108236,260],{"class":210},[204,108238,101497],{"class":214},[204,108240,101399],{"class":263},[204,108242,221],{"class":214},[204,108244,108245,108247,108249],{"class":206,"line":1845},[204,108246,101506],{"class":214},[204,108248,260],{"class":210},[204,108250,101511],{"class":214},[204,108252,108253],{"class":206,"line":1850},[204,108254,2486],{"emptyLinePlaceholder":135},[204,108256,108257,108259,108261,108263],{"class":206,"line":1864},[204,108258,34264],{"class":210},[204,108260,107921],{"class":214},[204,108262,31469],{"class":210},[204,108264,107926],{"class":214},[204,108266,108267,108270,108273,108275,108278,108280,108283],{"class":206,"line":1869},[204,108268,108269],{"class":210},"        while",[204,108271,108272],{"class":214}," viewer.is_running() ",[204,108274,30548],{"class":210},[204,108276,108277],{"class":214}," data.time ",[204,108279,1123],{"class":210},[204,108281,108282],{"class":263}," 5.0",[204,108284,3825],{"class":214},[204,108286,108287,108290,108292],{"class":206,"line":2663},[204,108288,108289],{"class":214},"            step_start ",[204,108291,260],{"class":210},[204,108293,108294],{"class":214}," time.time()\n",[204,108296,108297],{"class":206,"line":2677},[204,108298,108299],{"class":214},"            mujoco.mj_step(model, data)\n",[204,108301,108302],{"class":206,"line":2685},[204,108303,108304],{"class":214},"            viewer.sync()\n",[204,108306,108307],{"class":206,"line":2690},[204,108308,2486],{"emptyLinePlaceholder":135},[204,108310,108311,108314,108316,108318,108320,108322,108324],{"class":206,"line":2696},[204,108312,108313],{"class":214},"            sleep_time ",[204,108315,260],{"class":210},[204,108317,108045],{"class":214},[204,108319,745],{"class":210},[204,108321,108050],{"class":214},[204,108323,745],{"class":210},[204,108325,108055],{"class":214},[204,108327,108328,108330,108333,108335,108337],{"class":206,"line":2702},[204,108329,4728],{"class":210},[204,108331,108332],{"class":214}," sleep_time ",[204,108334,1173],{"class":210},[204,108336,4179],{"class":263},[204,108338,3825],{"class":214},[204,108340,108341],{"class":206,"line":2707},[204,108342,108343],{"class":214},"                time.sleep(sleep_time)\n",[204,108345,108346],{"class":206,"line":8035},[204,108347,2486],{"emptyLinePlaceholder":135},[204,108349,108350],{"class":206,"line":8059},[204,108351,2486],{"emptyLinePlaceholder":135},[204,108353,108354,108356,108358,108360,108362],{"class":206,"line":8064},[204,108355,1617],{"class":210},[204,108357,31306],{"class":263},[204,108359,101644],{"class":210},[204,108361,101647],{"class":319},[204,108363,3825],{"class":214},[204,108365,108366],{"class":206,"line":8070},[204,108367,101654],{"class":214},[19,108369,103655],{},[196,108371,108373],{"className":23909,"code":108372,"language":23911,"meta":125,"style":125},"touch ch5_viewer.py\n",[81,108374,108375],{"__ignoreMap":125},[204,108376,108377,108379],{"class":206,"line":207},[204,108378,101368],{"class":2049},[204,108380,108381],{"class":319}," ch5_viewer.py\n",[19,108383,108384],{},"离屏 Renderer 保存图片:",[196,108386,108388],{"className":30464,"code":108387,"language":30466,"meta":125,"style":125},"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",[81,108389,108390,108402,108406,108412,108422,108426,108430,108438,108443,108447,108451,108455,108459,108464,108468,108472,108476,108480,108484,108488,108492,108496,108500,108504,108508,108520,108532,108540,108565,108569,108585,108589,108593,108608,108617,108621,108635,108640,108645,108649,108661,108673,108677,108681,108693],{"__ignoreMap":125},[204,108391,108392,108394,108397,108399],{"class":206,"line":207},[204,108393,30823],{"class":210},[204,108395,108396],{"class":214}," pathlib ",[204,108398,30478],{"class":210},[204,108400,108401],{"class":214}," Path\n",[204,108403,108404],{"class":206,"line":126},[204,108405,2486],{"emptyLinePlaceholder":135},[204,108407,108408,108410],{"class":206,"line":131},[204,108409,30478],{"class":210},[204,108411,101386],{"class":214},[204,108413,108414,108416,108418,108420],{"class":206,"line":1281},[204,108415,30823],{"class":210},[204,108417,47349],{"class":263},[204,108419,47352],{"class":210},[204,108421,47355],{"class":214},[204,108423,108424],{"class":206,"line":1287},[204,108425,2486],{"emptyLinePlaceholder":135},[204,108427,108428],{"class":206,"line":1301},[204,108429,2486],{"emptyLinePlaceholder":135},[204,108431,108432,108434,108436],{"class":206,"line":1307},[204,108433,101399],{"class":263},[204,108435,13651],{"class":210},[204,108437,101404],{"class":319},[204,108439,108440],{"class":206,"line":1398},[204,108441,108442],{"class":319},"\u003Cmujoco model=\"renderer_demo\">\n",[204,108444,108445],{"class":206,"line":1404},[204,108446,101414],{"class":319},[204,108448,108449],{"class":206,"line":1416},[204,108450,2486],{"emptyLinePlaceholder":135},[204,108452,108453],{"class":206,"line":1698},[204,108454,101423],{"class":319},[204,108456,108457],{"class":206,"line":1703},[204,108458,108172],{"class":319},[204,108460,108461],{"class":206,"line":1709},[204,108462,108463],{"class":319},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[204,108465,108466],{"class":206,"line":1714},[204,108467,108177],{"class":319},[204,108469,108470],{"class":206,"line":1728},[204,108471,2486],{"emptyLinePlaceholder":135},[204,108473,108474],{"class":206,"line":1733},[204,108475,101437],{"class":319},[204,108477,108478],{"class":206,"line":1739},[204,108479,101442],{"class":319},[204,108481,108482],{"class":206,"line":1760},[204,108483,108194],{"class":319},[204,108485,108486],{"class":206,"line":1765},[204,108487,101452],{"class":319},[204,108489,108490],{"class":206,"line":1779},[204,108491,101457],{"class":319},[204,108493,108494],{"class":206,"line":1784},[204,108495,101462],{"class":319},[204,108497,108498],{"class":206,"line":1813},[204,108499,95784],{"class":319},[204,108501,108502],{"class":206,"line":1818},[204,108503,2486],{"emptyLinePlaceholder":135},[204,108505,108506],{"class":206,"line":1835},[204,108507,2486],{"emptyLinePlaceholder":135},[204,108509,108510,108512,108514,108516,108518],{"class":206,"line":1840},[204,108511,32033],{"class":210},[204,108513,2059],{"class":2049},[204,108515,101483],{"class":214},[204,108517,95772],{"class":263},[204,108519,3825],{"class":214},[204,108521,108522,108524,108526,108528,108530],{"class":206,"line":1845},[204,108523,101492],{"class":214},[204,108525,260],{"class":210},[204,108527,101497],{"class":214},[204,108529,101399],{"class":263},[204,108531,221],{"class":214},[204,108533,108534,108536,108538],{"class":206,"line":1850},[204,108535,101506],{"class":214},[204,108537,260],{"class":210},[204,108539,101511],{"class":214},[204,108541,108542,108545,108547,108549,108551,108553,108555,108557,108559,108561,108563],{"class":206,"line":1864},[204,108543,108544],{"class":214},"    renderer ",[204,108546,260],{"class":210},[204,108548,107959],{"class":214},[204,108550,25068],{"class":5303},[204,108552,260],{"class":210},[204,108554,42428],{"class":263},[204,108556,12522],{"class":214},[204,108558,25064],{"class":5303},[204,108560,260],{"class":210},[204,108562,107974],{"class":263},[204,108564,221],{"class":214},[204,108566,108567],{"class":206,"line":1869},[204,108568,2486],{"emptyLinePlaceholder":135},[204,108570,108571,108573,108575,108577,108579,108581,108583],{"class":206,"line":2663},[204,108572,3287],{"class":210},[204,108574,101586],{"class":214},[204,108576,26129],{"class":210},[204,108578,32529],{"class":263},[204,108580,215],{"class":214},[204,108582,524],{"class":263},[204,108584,30872],{"class":214},[204,108586,108587],{"class":206,"line":2677},[204,108588,101601],{"class":214},[204,108590,108591],{"class":206,"line":2685},[204,108592,2486],{"emptyLinePlaceholder":135},[204,108594,108595,108598,108601,108603,108606],{"class":206,"line":2690},[204,108596,108597],{"class":214},"    renderer.update_scene(data, ",[204,108599,108600],{"class":5303},"camera",[204,108602,260],{"class":210},[204,108604,108605],{"class":319},"\"fixed_camera\"",[204,108607,221],{"class":214},[204,108609,108610,108613,108615],{"class":206,"line":2696},[204,108611,108612],{"class":214},"    image ",[204,108614,260],{"class":210},[204,108616,107670],{"class":214},[204,108618,108619],{"class":206,"line":2702},[204,108620,2486],{"emptyLinePlaceholder":135},[204,108622,108623,108626,108628,108631,108633],{"class":206,"line":2707},[204,108624,108625],{"class":214},"    output_path ",[204,108627,260],{"class":210},[204,108629,108630],{"class":214}," Path(",[204,108632,108100],{"class":319},[204,108634,221],{"class":214},[204,108636,108637],{"class":206,"line":8035},[204,108638,108639],{"class":214},"    Image.fromarray(image).save(output_path)\n",[204,108641,108642],{"class":206,"line":8059},[204,108643,108644],{"class":214},"    renderer.close()\n",[204,108646,108647],{"class":206,"line":8064},[204,108648,2486],{"emptyLinePlaceholder":135},[204,108650,108651,108653,108655,108658],{"class":206,"line":8070},[204,108652,31385],{"class":263},[204,108654,215],{"class":214},[204,108656,108657],{"class":319},"\"saved:\"",[204,108659,108660],{"class":214},", output_path.resolve())\n",[204,108662,108663,108665,108667,108670],{"class":206,"line":8097},[204,108664,31385],{"class":263},[204,108666,215],{"class":214},[204,108668,108669],{"class":319},"\"image shape:\"",[204,108671,108672],{"class":214},", image.shape)\n",[204,108674,108675],{"class":206,"line":8102},[204,108676,2486],{"emptyLinePlaceholder":135},[204,108678,108679],{"class":206,"line":8108},[204,108680,2486],{"emptyLinePlaceholder":135},[204,108682,108683,108685,108687,108689,108691],{"class":206,"line":8120},[204,108684,1617],{"class":210},[204,108686,31306],{"class":263},[204,108688,101644],{"class":210},[204,108690,101647],{"class":319},[204,108692,3825],{"class":214},[204,108694,108695],{"class":206,"line":8132},[204,108696,101654],{"class":214},[19,108698,103655],{},[196,108700,108702],{"className":23909,"code":108701,"language":23911,"meta":125,"style":125},"touch ch5_renderer.py\n",[81,108703,108704],{"__ignoreMap":125},[204,108705,108706,108708],{"class":206,"line":207},[204,108707,101368],{"class":2049},[204,108709,108710],{"class":319}," ch5_renderer.py\n",[49,108712,101657],{"id":101657},[19,108714,108715],{},"viewer 上下文：",[196,108717,108719],{"className":30464,"code":108718,"language":30466,"meta":125,"style":125},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[81,108720,108721],{"__ignoreMap":125},[204,108722,108723,108725,108727,108729],{"class":206,"line":207},[204,108724,107918],{"class":210},[204,108726,107921],{"class":214},[204,108728,31469],{"class":210},[204,108730,107926],{"class":214},[19,108732,108733,108735],{},[81,108734,107918],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108737,108738],{},"窗口循环：",[196,108740,108742],{"className":30464,"code":108741,"language":30466,"meta":125,"style":125},"while viewer.is_running() and data.time \u003C 5.0:\n",[81,108743,108744],{"__ignoreMap":125},[204,108745,108746,108749,108751,108753,108755,108757,108759],{"class":206,"line":207},[204,108747,108748],{"class":210},"while",[204,108750,108272],{"class":214},[204,108752,30548],{"class":210},[204,108754,108277],{"class":214},[204,108756,1123],{"class":210},[204,108758,108282],{"class":263},[204,108760,3825],{"class":214},[19,108762,108763],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108765,108766],{},"固定相机：",[196,108768,108770],{"className":53153,"code":108769,"language":53155,"meta":125,"style":125},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[81,108771,108772],{"__ignoreMap":125},[204,108773,108774,108776,108778,108780,108782,108784,108786,108788,108791,108794,108796,108799],{"class":206,"line":207},[204,108775,1123],{"class":214},[204,108777,108600],{"class":51386},[204,108779,15007],{"class":2049},[204,108781,260],{"class":214},[204,108783,108605],{"class":319},[204,108785,101191],{"class":2049},[204,108787,260],{"class":214},[204,108789,108790],{"class":319},"\"1.5 -2.0 1.2\"",[204,108792,108793],{"class":2049}," xyaxes",[204,108795,260],{"class":214},[204,108797,108798],{"class":319},"\"1 0.75 0 0 0 1\"",[204,108800,101229],{"class":214},[19,108802,108803],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[49,108805,108807],{"id":108806},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[196,108809,108811],{"className":30464,"code":108810,"language":30466,"meta":125,"style":125},"import time\n",[81,108812,108813],{"__ignoreMap":125},[204,108814,108815,108817],{"class":206,"line":207},[204,108816,30478],{"class":210},[204,108818,31915],{"class":214},[19,108820,108821],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[196,108823,108825],{"className":30464,"code":108824,"language":30466,"meta":125,"style":125},"import mujoco\nimport mujoco.viewer\n",[81,108826,108827,108833],{"__ignoreMap":125},[204,108828,108829,108831],{"class":206,"line":207},[204,108830,30478],{"class":210},[204,108832,101386],{"class":214},[204,108834,108835,108837],{"class":206,"line":126},[204,108836,30478],{"class":210},[204,108838,107637],{"class":214},[19,108840,108841],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[196,108843,108844],{"className":30464,"code":108718,"language":30466,"meta":125,"style":125},[81,108845,108846],{"__ignoreMap":125},[204,108847,108848,108850,108852,108854],{"class":206,"line":207},[204,108849,107918],{"class":210},[204,108851,107921],{"class":214},[204,108853,31469],{"class":210},[204,108855,107926],{"class":214},[19,108857,108858,108859,108862],{},"打开一个 viewer 窗口。",[81,108860,108861],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[196,108864,108865],{"className":30464,"code":108741,"language":30466,"meta":125,"style":125},[81,108866,108867],{"__ignoreMap":125},[204,108868,108869,108871,108873,108875,108877,108879,108881],{"class":206,"line":207},[204,108870,108748],{"class":210},[204,108872,108272],{"class":214},[204,108874,30548],{"class":210},[204,108876,108277],{"class":214},[204,108878,1123],{"class":210},[204,108880,108282],{"class":263},[204,108882,3825],{"class":214},[19,108884,108885,108886,108889],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[81,108887,108888],{},"viewer.is_running()"," 会变成 false，循环结束。",[196,108891,108893],{"className":30464,"code":108892,"language":30466,"meta":125,"style":125},"step_start = time.time()\n",[81,108894,108895],{"__ignoreMap":125},[204,108896,108897,108900,108902],{"class":206,"line":207},[204,108898,108899],{"class":214},"step_start ",[204,108901,260],{"class":210},[204,108903,108294],{"class":214},[19,108905,108906],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[196,108908,108909],{"className":30464,"code":108003,"language":30466,"meta":125,"style":125},[81,108910,108911,108915],{"__ignoreMap":125},[204,108912,108913],{"class":206,"line":207},[204,108914,104590],{"class":214},[204,108916,108917],{"class":206,"line":126},[204,108918,108014],{"class":214},[19,108920,108921,108923,108924,108926,108927,108929,108930,108933],{},[81,108922,101300],{}," 推进物理仿真。",[81,108925,108022],{}," 把最新的 ",[81,108928,33487],{}," 同步到窗口里显示。没有 ",[81,108931,108932],{},"sync()","，窗口可能看不到最新状态。",[196,108935,108936],{"className":30464,"code":108033,"language":30466,"meta":125,"style":125},[81,108937,108938],{"__ignoreMap":125},[204,108939,108940,108942,108944,108946,108948,108950,108952],{"class":206,"line":207},[204,108941,108040],{"class":214},[204,108943,260],{"class":210},[204,108945,108045],{"class":214},[204,108947,745],{"class":210},[204,108949,108050],{"class":214},[204,108951,745],{"class":210},[204,108953,108055],{"class":214},[19,108955,108956],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[196,108958,108960],{"className":30464,"code":108959,"language":30466,"meta":125,"style":125},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[81,108961,108962,108974],{"__ignoreMap":125},[204,108963,108964,108966,108968,108970,108972],{"class":206,"line":207},[204,108965,1617],{"class":210},[204,108967,108332],{"class":214},[204,108969,1173],{"class":210},[204,108971,4179],{"class":263},[204,108973,3825],{"class":214},[204,108975,108976],{"class":206,"line":126},[204,108977,108978],{"class":214},"    time.sleep(sleep_time)\n",[19,108980,108981],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[49,108983,108985],{"id":108984},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[196,108987,108989],{"className":30464,"code":108988,"language":30466,"meta":125,"style":125},"from pathlib import Path\n",[81,108990,108991],{"__ignoreMap":125},[204,108992,108993,108995,108997,108999],{"class":206,"line":207},[204,108994,30823],{"class":210},[204,108996,108396],{"class":214},[204,108998,30478],{"class":210},[204,109000,108401],{"class":214},[19,109002,109003,109004,109007,109008,109011],{},"导入 ",[81,109005,109006],{},"Path","，用来处理文件路径。相比直接写字符串，",[81,109009,109010],{},"Path(\"render_output.png\")"," 更清晰。",[196,109013,109015],{"className":30464,"code":109014,"language":30466,"meta":125,"style":125},"from PIL import Image\n",[81,109016,109017],{"__ignoreMap":125},[204,109018,109019,109021,109023,109025],{"class":206,"line":207},[204,109020,30823],{"class":210},[204,109022,47349],{"class":263},[204,109024,47352],{"class":210},[204,109026,47355],{"class":214},[19,109028,109029],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[196,109031,109032],{"className":53153,"code":108769,"language":53155,"meta":125,"style":125},[81,109033,109034],{"__ignoreMap":125},[204,109035,109036,109038,109040,109042,109044,109046,109048,109050,109052,109054,109056,109058],{"class":206,"line":207},[204,109037,1123],{"class":214},[204,109039,108600],{"class":51386},[204,109041,15007],{"class":2049},[204,109043,260],{"class":214},[204,109045,108605],{"class":319},[204,109047,101191],{"class":2049},[204,109049,260],{"class":214},[204,109051,108790],{"class":319},[204,109053,108793],{"class":2049},[204,109055,260],{"class":214},[204,109057,108798],{"class":319},[204,109059,101229],{"class":214},[19,109061,109062,109063,109065,109066,109068,109069,109072,109073,109075],{},"定义一个相机。",[81,109064,79896],{}," 是相机名字。",[81,109067,104231],{}," 是相机在世界里的位置。",[81,109070,109071],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[81,109074,104231],{}," 来调视角。",[196,109077,109079],{"className":30464,"code":109078,"language":30466,"meta":125,"style":125},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[81,109080,109081],{"__ignoreMap":125},[204,109082,109083,109085,109087,109089,109091,109093,109095,109097,109099,109101,109103],{"class":206,"line":207},[204,109084,107655],{"class":214},[204,109086,260],{"class":210},[204,109088,107959],{"class":214},[204,109090,25068],{"class":5303},[204,109092,260],{"class":210},[204,109094,42428],{"class":263},[204,109096,12522],{"class":214},[204,109098,25064],{"class":5303},[204,109100,260],{"class":210},[204,109102,107974],{"class":263},[204,109104,221],{"class":214},[19,109106,109107,109108,43,109110,109112],{},"创建离屏渲染器。",[81,109109,25068],{},[81,109111,25064],{}," 决定输出图片大小。",[196,109114,109115],{"className":30464,"code":101761,"language":30466,"meta":125,"style":125},[81,109116,109117,109133],{"__ignoreMap":125},[204,109118,109119,109121,109123,109125,109127,109129,109131],{"class":206,"line":207},[204,109120,3111],{"class":210},[204,109122,101586],{"class":214},[204,109124,26129],{"class":210},[204,109126,32529],{"class":263},[204,109128,215],{"class":214},[204,109130,524],{"class":263},[204,109132,30872],{"class":214},[204,109134,109135],{"class":206,"line":126},[204,109136,101784],{"class":214},[19,109138,109139],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[196,109141,109143],{"className":30464,"code":109142,"language":30466,"meta":125,"style":125},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[81,109144,109145],{"__ignoreMap":125},[204,109146,109147,109150,109152,109154,109156],{"class":206,"line":207},[204,109148,109149],{"class":214},"renderer.update_scene(data, ",[204,109151,108600],{"class":5303},[204,109153,260],{"class":210},[204,109155,108605],{"class":319},[204,109157,221],{"class":214},[19,109159,109160,109161,109163,109164,109167],{},"告诉 renderer：用当前 ",[81,109162,33487],{}," 的状态更新画面，并使用名为 ",[81,109165,109166],{},"fixed_camera"," 的相机视角。",[196,109169,109170],{"className":30464,"code":108065,"language":30466,"meta":125,"style":125},[81,109171,109172],{"__ignoreMap":125},[204,109173,109174,109176,109178],{"class":206,"line":207},[204,109175,107665],{"class":214},[204,109177,260],{"class":210},[204,109179,107670],{"class":214},[19,109181,109182,109183,109186],{},"真正渲染出图像。",[81,109184,109185],{},"image"," 是一个 NumPy 数组，不是文件。",[196,109188,109190],{"className":30464,"code":109189,"language":30466,"meta":125,"style":125},"Image.fromarray(image).save(output_path)\n",[81,109191,109192],{"__ignoreMap":125},[204,109193,109194],{"class":206,"line":207},[204,109195,109189],{"class":214},[19,109197,109198,109199,28471],{},"把数组转换成图片，并保存到 ",[81,109200,109201],{},"render_output.png",[196,109203,109205],{"className":30464,"code":109204,"language":30466,"meta":125,"style":125},"renderer.close()\n",[81,109206,109207],{"__ignoreMap":125},[204,109208,109209],{"class":206,"line":207},[204,109210,109204],{"class":214},[19,109212,109213],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109215,102401],{"id":102400},[19,109217,109218,109219,109221,109222,28471],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[81,109220,109201],{},"，并输出图像数组形状，例如 ",[81,109223,109224],{},"(480, 640, 3)",[19,109226,109227],{},"如果图片里看不到方块，先检查：",[161,109229,109230,109233,109236],{},[71,109231,109232],{},"方块是否掉到相机视野外。",[71,109234,109235],{},"camera 位置是否合理。",[71,109237,109238,109239,109242],{},"是否在 ",[81,109240,109241],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109244,102433],{"id":102432},[19,109246,109247],{},"运行 viewer:",[196,109249,109251],{"className":23909,"code":109250,"language":23911,"meta":125,"style":125},"python ch5_viewer.py\n",[81,109252,109253],{"__ignoreMap":125},[204,109254,109255,109257],{"class":206,"line":207},[204,109256,30466],{"class":2049},[204,109258,108381],{"class":319},[19,109260,109261],{},"运行 renderer:",[196,109263,109265],{"className":23909,"code":109264,"language":23911,"meta":125,"style":125},"python ch5_renderer.py\n",[81,109266,109267],{"__ignoreMap":125},[204,109268,109269,109271],{"class":206,"line":207},[204,109270,30466],{"class":2049},[204,109272,108710],{"class":319},[19,109274,109275],{},"如果在服务器上运行:",[196,109277,109279],{"className":23909,"code":109278,"language":23911,"meta":125,"style":125},"MUJOCO_GL=egl python ch5_renderer.py\n",[81,109280,109281],{"__ignoreMap":125},[204,109282,109283,109285,109287,109289,109292],{"class":206,"line":207},[204,109284,107899],{"class":214},[204,109286,260],{"class":210},[204,109288,107889],{"class":319},[204,109290,109291],{"class":2049}," python",[204,109293,108710],{"class":319},[19,109295,107867],{},[196,109297,109299],{"className":23909,"code":109298,"language":23911,"meta":125,"style":125},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[81,109300,109301],{"__ignoreMap":125},[204,109302,109303,109305,109307,109309,109311],{"class":206,"line":207},[204,109304,107899],{"class":214},[204,109306,260],{"class":210},[204,109308,107893],{"class":319},[204,109310,109291],{"class":2049},[204,109312,108710],{"class":319},[19,109314,109315],{},"再做几个练习：",[161,109317,109318,109325,109328,109334],{},[71,109319,109320,109321,109324],{},"把 renderer 分辨率改成 ",[81,109322,109323],{},"height=240, width=320","，观察输出 shape。",[71,109326,109327],{},"把方块颜色改成蓝色，重新保存图片。",[71,109329,109330,109331,109333],{},"把相机 ",[81,109332,104231],{}," 改远一点，观察画面中物体是否变小。",[71,109335,109336,109337,102499,109340,109343],{},"把 viewer 示例中的 ",[81,109338,109339],{},"data.time \u003C 5.0",[81,109341,109342],{},"data.time \u003C 20.0","，观察更长时间。",[14,109345,102538],{"id":102537},[49,109347,109349],{"id":109348},"viewer-窗口打不开","viewer 窗口打不开",[19,109351,109352],{},"安装:",[196,109354,109356],{"className":23909,"code":109355,"language":23911,"meta":125,"style":125},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[81,109357,109358],{"__ignoreMap":125},[204,109359,109360,109362,109364,109366,109368,109370,109372,109374,109376,109378,109380],{"class":206,"line":207},[204,109361,24663],{"class":2049},[204,109363,26401],{"class":319},[204,109365,23921],{"class":319},[204,109367,26486],{"class":263},[204,109369,102591],{"class":319},[204,109371,100920],{"class":319},[204,109373,102596],{"class":319},[204,109375,100933],{"class":319},[204,109377,100939],{"class":319},[204,109379,100930],{"class":319},[204,109381,109382],{"class":319}," libXinerama\n",[49,109384,109386],{"id":109385},"glfwerror",[81,109387,109388],{},"GLFWError",[19,109390,109391],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[49,109393,109395],{"id":109394},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109397,109398,109399,82625,109401,109403],{},"尝试 ",[81,109400,101122],{},[81,109402,101125],{},"。可能存在版本差异。",[49,109405,109406],{"id":109406},"保存图片是黑的",[19,109408,102660],{},[161,109410,109411,109414,109417,109427],{},[71,109412,109413],{},"XML 里是否有 light。",[71,109415,109416],{},"相机是否对着模型。",[71,109418,109419,109420,109423,109424,28471],{},"是否先 ",[81,109421,109422],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[81,109425,109426],{},"renderer.render()",[71,109428,109429],{},"物体是否已经掉出视野。",[49,109431,109432],{"id":109432},"远程服务器没有显示器",[19,109434,109435],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[196,109437,109438],{"className":23909,"code":109278,"language":23911,"meta":125,"style":125},[81,109439,109440],{"__ignoreMap":125},[204,109441,109442,109444,109446,109448,109450],{"class":206,"line":207},[204,109443,107899],{"class":214},[204,109445,260],{"class":210},[204,109447,107889],{"class":319},[204,109449,109291],{"class":2049},[204,109451,108710],{"class":319},[19,109453,109454],{},"如果 EGL 不可用，再尝试：",[196,109456,109457],{"className":23909,"code":109298,"language":23911,"meta":125,"style":125},[81,109458,109459],{"__ignoreMap":125},[204,109460,109461,109463,109465,109467,109469],{"class":206,"line":207},[204,109462,107899],{"class":214},[204,109464,260],{"class":210},[204,109466,107893],{"class":319},[204,109468,109291],{"class":2049},[204,109470,108710],{"class":319},[14,109472,102692],{"id":102691},[19,109474,109475],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[161,109477,109478,109481,109484],{},[71,109479,109480],{},"先用 viewer 看模型和控制是否正常。",[71,109482,109483],{},"再用 renderer 保存图片或构造视觉观测。",[71,109485,109486],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5213,109488,109489],{},"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":125,"searchDepth":126,"depth":126,"links":109491},[109492,109493,109494,109499,109504,109505,109506,109513],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":109495},[109496,109497,109498],{"id":107996,"depth":131,"text":107997},{"id":108026,"depth":131,"text":108027},{"id":108061,"depth":131,"text":108062},{"id":101337,"depth":126,"text":101338,"children":109500},[109501,109502,109503],{"id":101657,"depth":131,"text":101657},{"id":108806,"depth":131,"text":108807},{"id":108984,"depth":131,"text":108985},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":109507},[109508,109509,109510,109511,109512],{"id":109348,"depth":131,"text":109349},{"id":109385,"depth":131,"text":109388},{"id":109394,"depth":131,"text":109395},{"id":109406,"depth":131,"text":109406},{"id":109432,"depth":131,"text":109432},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107604,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109520,"title":109521,"body":109522,"description":125,"extension":133,"meta":111433,"navigation":135,"path":111434,"seo":111435,"stem":111436,"__hash__":111437},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109523,"toc":111409},[109524,109527,109529,109532,109534,109553,109556,109562,109565,109567,109569,109593,109595,109609,109611,109652,109654,109665,109667,109670,109676,109679,109713,109716,109748,109751,109783,109787,109790,109830,109833,109839,109842,109848,109852,109855,109861,109864,109868,109871,109911,109913,109926,109929,109931,110513,110515,110527,110530,110541,110543,110546,110565,110577,110580,110601,110604,110607,110650,110653,110656,110676,110683,110685,110703,110718,110721,110727,110730,110736,110753,110760,110791,110802,110836,110847,110864,110873,110881,110886,110900,110903,110924,110930,110944,110949,110979,110989,111014,111022,111045,111048,111064,111067,111075,111081,111103,111116,111137,111146,111185,111196,111198,111201,111207,111210,111213,111219,111222,111242,111245,111247,111286,111288,111291,111299,111302,111305,111332,111335,111345,111351,111354,111360,111362,111368,111372,111375,111377,111380,111404,111407],[10,109525,109521],{"id":109526},"_6控制任务cartpole",[14,109528,100733],{"id":100732},[19,109530,109531],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109533,104416],{},[161,109535,109536,109539,109541,109544,109547,109550],{},[71,109537,109538],{},"slide joint",[71,109540,106269],{},[71,109542,109543],{},"cart force actuator",[71,109545,109546],{},"状态观测",[71,109548,109549],{},"简单控制循环",[71,109551,109552],{},"reward 设计雏形",[19,109554,109555],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[196,109557,109560],{"className":109558,"code":109559,"language":5274,"meta":125},[5272],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[81,109561,109559],{"__ignoreMap":125},[19,109563,109564],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109566,100856],{"id":100855},[19,109568,100859],{},[196,109570,109571],{"className":23909,"code":104473,"language":23911,"meta":125,"style":125},[81,109572,109573],{"__ignoreMap":125},[204,109574,109575,109577,109579,109581,109583,109585,109587,109589,109591],{"class":206,"line":207},[204,109576,24663],{"class":2049},[204,109578,26401],{"class":319},[204,109580,23921],{"class":319},[204,109582,26486],{"class":263},[204,109584,104488],{"class":319},[204,109586,100884],{"class":319},[204,109588,102586],{"class":319},[204,109590,100900],{"class":319},[204,109592,104497],{"class":319},[19,109594,102904],{},[196,109596,109597],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},[81,109598,109599],{"__ignoreMap":125},[204,109600,109601,109603,109605,109607],{"class":206,"line":207},[204,109602,23918],{"class":2049},[204,109604,23921],{"class":319},[204,109606,101016],{"class":319},[204,109608,101019],{"class":319},[19,109610,102921],{},[196,109612,109614],{"className":23909,"code":109613,"language":23911,"meta":125,"style":125},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[81,109615,109616,109633,109642],{"__ignoreMap":125},[204,109617,109618,109620,109622,109624,109627,109629,109631],{"class":206,"line":207},[204,109619,30416],{"class":2049},[204,109621,29262],{"class":319},[204,109623,25202],{"class":263},[204,109625,109626],{"class":319}," mujoco-cartpole",[204,109628,101061],{"class":319},[204,109630,101064],{"class":263},[204,109632,101067],{"class":263},[204,109634,109635,109637,109639],{"class":206,"line":126},[204,109636,30416],{"class":2049},[204,109638,101074],{"class":319},[204,109640,109641],{"class":319}," mujoco-cartpole\n",[204,109643,109644,109646,109648,109650],{"class":206,"line":131},[204,109645,23918],{"class":2049},[204,109647,23921],{"class":319},[204,109649,101016],{"class":319},[204,109651,101019],{"class":319},[19,109653,101090],{},[161,109655,109656,109659,109662],{},[71,109657,109658],{},"本章不依赖 Gymnasium。",[71,109660,109661],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[71,109663,109664],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109666,101130],{"id":101129},[19,109668,109669],{},"Cartpole 的模型结构:",[196,109671,109674],{"className":109672,"code":109673,"language":5274,"meta":125},[5272],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[81,109675,109673],{"__ignoreMap":125},[19,109677,109678],{},"小车通过 slide joint 左右移动:",[196,109680,109682],{"className":53153,"code":109681,"language":53155,"meta":125,"style":125},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[81,109683,109684],{"__ignoreMap":125},[204,109685,109686,109688,109690,109692,109694,109697,109699,109701,109704,109706,109708,109711],{"class":206,"line":207},[204,109687,1123],{"class":214},[204,109689,103041],{"class":51386},[204,109691,15007],{"class":2049},[204,109693,260],{"class":214},[204,109695,109696],{"class":319},"\"cart_x\"",[204,109698,53910],{"class":2049},[204,109700,260],{"class":214},[204,109702,109703],{"class":319},"\"slide\"",[204,109705,106113],{"class":2049},[204,109707,260],{"class":214},[204,109709,109710],{"class":319},"\"1 0 0\"",[204,109712,101229],{"class":214},[19,109714,109715],{},"杆子通过 hinge joint 旋转:",[196,109717,109719],{"className":53153,"code":109718,"language":53155,"meta":125,"style":125},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[81,109720,109721],{"__ignoreMap":125},[204,109722,109723,109725,109727,109729,109731,109734,109736,109738,109740,109742,109744,109746],{"class":206,"line":207},[204,109724,1123],{"class":214},[204,109726,103041],{"class":51386},[204,109728,15007],{"class":2049},[204,109730,260],{"class":214},[204,109732,109733],{"class":319},"\"pole_hinge\"",[204,109735,53910],{"class":2049},[204,109737,260],{"class":214},[204,109739,106104],{"class":319},[204,109741,106113],{"class":2049},[204,109743,260],{"class":214},[204,109745,106118],{"class":319},[204,109747,101229],{"class":214},[19,109749,109750],{},"控制力作用在小车 slide joint 上:",[196,109752,109754],{"className":53153,"code":109753,"language":53155,"meta":125,"style":125},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[81,109755,109756],{"__ignoreMap":125},[204,109757,109758,109760,109762,109764,109766,109769,109771,109773,109775,109777,109779,109781],{"class":206,"line":207},[204,109759,1123],{"class":214},[204,109761,106159],{"class":51386},[204,109763,15007],{"class":2049},[204,109765,260],{"class":214},[204,109767,109768],{"class":319},"\"cart_motor\"",[204,109770,106169],{"class":2049},[204,109772,260],{"class":214},[204,109774,109696],{"class":319},[204,109776,106176],{"class":2049},[204,109778,260],{"class":214},[204,109780,54402],{"class":319},[204,109782,101229],{"class":214},[49,109784,109786],{"id":109785},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109788,109789],{},"这个简化模型有两个关节：",[352,109791,109792,109803],{},[355,109793,109794],{},[358,109795,109796,109798,109800],{},[361,109797,102844],{"align":23823},[361,109799,23824],{"align":23823},[361,109801,109802],{"align":23823},"对应状态",[398,109804,109805,109818],{},[358,109806,109807,109812,109815],{},[403,109808,109809],{"align":23823},[81,109810,109811],{},"cart_x",[403,109813,109814],{"align":23823},"slide",[403,109816,109817],{"align":23823},"小车 x 位置",[358,109819,109820,109825,109827],{},[403,109821,109822],{"align":23823},[81,109823,109824],{},"pole_hinge",[403,109826,105925],{"align":23823},[403,109828,109829],{"align":23823},"杆子角度",[19,109831,109832],{},"所以：",[196,109834,109837],{"className":109835,"code":109836,"language":5274,"meta":125},[5272],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[81,109838,109836],{"__ignoreMap":125},[19,109840,109841],{},"把它们拼起来就是观测：",[196,109843,109846],{"className":109844,"code":109845,"language":5274,"meta":125},[5272],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[81,109847,109845],{"__ignoreMap":125},[49,109849,109851],{"id":109850},"action-是什么","action 是什么",[19,109853,109854],{},"本章只有一个 actuator：",[196,109856,109859],{"className":109857,"code":109858,"language":5274,"meta":125},[5272],"data.ctrl[0] = action\n",[81,109860,109858],{"__ignoreMap":125},[19,109862,109863],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[49,109865,109867],{"id":109866},"reward-是什么","reward 是什么",[19,109869,109870],{},"奖励函数：",[196,109872,109874],{"className":30464,"code":109873,"language":30466,"meta":125,"style":125},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[81,109875,109876],{"__ignoreMap":125},[204,109877,109878,109880,109883,109885,109887,109889,109892,109894,109897,109899,109901,109903,109906,109908],{"class":206,"line":207},[204,109879,17133],{"class":210},[204,109881,109882],{"class":263}," float",[204,109884,215],{"class":214},[204,109886,102488],{"class":263},[204,109888,52357],{"class":210},[204,109890,109891],{"class":263}," 0.1",[204,109893,6605],{"class":210},[204,109895,109896],{"class":214}," cart_x ",[204,109898,668],{"class":210},[204,109900,109896],{"class":214},[204,109902,745],{"class":210},[204,109904,109905],{"class":214}," pole_angle ",[204,109907,668],{"class":210},[204,109909,109910],{"class":214}," pole_angle)\n",[19,109912,106311],{},[161,109914,109915,109920,109923],{},[71,109916,109917,109918,28471],{},"基础奖励是 ",[81,109919,102488],{},[71,109921,109922],{},"小车离中心越远，扣分越多。",[71,109924,109925],{},"杆子角度越大，扣分越多。",[19,109927,109928],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109930,101338],{"id":101337},[196,109932,109934],{"className":30464,"code":109933,"language":30466,"meta":125,"style":125},"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",[81,109935,109936,109942,109952,109956,109960,109968,109973,109977,109981,109985,109990,109994,109999,110004,110009,110013,110018,110023,110028,110032,110036,110040,110044,110048,110053,110057,110061,110065,110069,110073,110083,110090,110094,110098,110112,110126,110139,110169,110173,110177,110189,110201,110209,110213,110226,110230,110234,110243,110247,110263,110273,110286,110299,110303,110326,110344,110348,110360,110364,110368,110378,110388,110392,110408,110449,110453,110473,110489,110493,110497,110509],{"__ignoreMap":125},[204,109937,109938,109940],{"class":206,"line":207},[204,109939,30478],{"class":210},[204,109941,101386],{"class":214},[204,109943,109944,109946,109948,109950],{"class":206,"line":126},[204,109945,30478],{"class":210},[204,109947,31466],{"class":214},[204,109949,31469],{"class":210},[204,109951,31472],{"class":214},[204,109953,109954],{"class":206,"line":131},[204,109955,2486],{"emptyLinePlaceholder":135},[204,109957,109958],{"class":206,"line":1281},[204,109959,2486],{"emptyLinePlaceholder":135},[204,109961,109962,109964,109966],{"class":206,"line":1287},[204,109963,101399],{"class":263},[204,109965,13651],{"class":210},[204,109967,101404],{"class":319},[204,109969,109970],{"class":206,"line":1301},[204,109971,109972],{"class":319},"\u003Cmujoco model=\"cartpole\">\n",[204,109974,109975],{"class":206,"line":1307},[204,109976,101414],{"class":319},[204,109978,109979],{"class":206,"line":1398},[204,109980,2486],{"emptyLinePlaceholder":135},[204,109982,109983],{"class":206,"line":1404},[204,109984,101423],{"class":319},[204,109986,109987],{"class":206,"line":1416},[204,109988,109989],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[204,109991,109992],{"class":206,"line":1698},[204,109993,2486],{"emptyLinePlaceholder":135},[204,109995,109996],{"class":206,"line":1703},[204,109997,109998],{"class":319},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[204,110000,110001],{"class":206,"line":1709},[204,110002,110003],{"class":319},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[204,110005,110006],{"class":206,"line":1714},[204,110007,110008],{"class":319},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[204,110010,110011],{"class":206,"line":1728},[204,110012,2486],{"emptyLinePlaceholder":135},[204,110014,110015],{"class":206,"line":1733},[204,110016,110017],{"class":319},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[204,110019,110020],{"class":206,"line":1739},[204,110021,110022],{"class":319},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[204,110024,110025],{"class":206,"line":1760},[204,110026,110027],{"class":319},"        \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",[204,110029,110030],{"class":206,"line":1765},[204,110031,106523],{"class":319},[204,110033,110034],{"class":206,"line":1779},[204,110035,101452],{"class":319},[204,110037,110038],{"class":206,"line":1784},[204,110039,101457],{"class":319},[204,110041,110042],{"class":206,"line":1813},[204,110043,2486],{"emptyLinePlaceholder":135},[204,110045,110046],{"class":206,"line":1818},[204,110047,106540],{"class":319},[204,110049,110050],{"class":206,"line":1835},[204,110051,110052],{"class":319},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[204,110054,110055],{"class":206,"line":1840},[204,110056,106550],{"class":319},[204,110058,110059],{"class":206,"line":1845},[204,110060,101462],{"class":319},[204,110062,110063],{"class":206,"line":1850},[204,110064,95784],{"class":319},[204,110066,110067],{"class":206,"line":1864},[204,110068,2486],{"emptyLinePlaceholder":135},[204,110070,110071],{"class":206,"line":1869},[204,110072,2486],{"emptyLinePlaceholder":135},[204,110074,110075,110077,110080],{"class":206,"line":2663},[204,110076,32033],{"class":210},[204,110078,110079],{"class":2049}," get_observation",[204,110081,110082],{"class":214},"(data: mujoco.MjData) -> np.ndarray:\n",[204,110084,110085,110087],{"class":206,"line":2677},[204,110086,4176],{"class":210},[204,110088,110089],{"class":214}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[204,110091,110092],{"class":206,"line":2685},[204,110093,2486],{"emptyLinePlaceholder":135},[204,110095,110096],{"class":206,"line":2690},[204,110097,2486],{"emptyLinePlaceholder":135},[204,110099,110100,110102,110105,110108,110110],{"class":206,"line":2696},[204,110101,32033],{"class":210},[204,110103,110104],{"class":2049}," compute_reward",[204,110106,110107],{"class":214},"(obs: np.ndarray) -> ",[204,110109,254],{"class":263},[204,110111,3825],{"class":214},[204,110113,110114,110117,110119,110122,110124],{"class":206,"line":2702},[204,110115,110116],{"class":214},"    cart_x ",[204,110118,260],{"class":210},[204,110120,110121],{"class":214}," obs[",[204,110123,405],{"class":263},[204,110125,33332],{"class":214},[204,110127,110128,110131,110133,110135,110137],{"class":206,"line":2707},[204,110129,110130],{"class":214},"    pole_angle ",[204,110132,260],{"class":210},[204,110134,110121],{"class":214},[204,110136,431],{"class":263},[204,110138,33332],{"class":214},[204,110140,110141,110143,110145,110147,110149,110151,110153,110155,110157,110159,110161,110163,110165,110167],{"class":206,"line":8035},[204,110142,4176],{"class":210},[204,110144,109882],{"class":263},[204,110146,215],{"class":214},[204,110148,102488],{"class":263},[204,110150,52357],{"class":210},[204,110152,109891],{"class":263},[204,110154,6605],{"class":210},[204,110156,109896],{"class":214},[204,110158,668],{"class":210},[204,110160,109896],{"class":214},[204,110162,745],{"class":210},[204,110164,109905],{"class":214},[204,110166,668],{"class":210},[204,110168,109910],{"class":214},[204,110170,110171],{"class":206,"line":8059},[204,110172,2486],{"emptyLinePlaceholder":135},[204,110174,110175],{"class":206,"line":8064},[204,110176,2486],{"emptyLinePlaceholder":135},[204,110178,110179,110181,110183,110185,110187],{"class":206,"line":8070},[204,110180,32033],{"class":210},[204,110182,2059],{"class":2049},[204,110184,101483],{"class":214},[204,110186,95772],{"class":263},[204,110188,3825],{"class":214},[204,110190,110191,110193,110195,110197,110199],{"class":206,"line":8097},[204,110192,101492],{"class":214},[204,110194,260],{"class":210},[204,110196,101497],{"class":214},[204,110198,101399],{"class":263},[204,110200,221],{"class":214},[204,110202,110203,110205,110207],{"class":206,"line":8102},[204,110204,101506],{"class":214},[204,110206,260],{"class":210},[204,110208,101511],{"class":214},[204,110210,110211],{"class":206,"line":8108},[204,110212,2486],{"emptyLinePlaceholder":135},[204,110214,110215,110217,110219,110221,110223],{"class":206,"line":8120},[204,110216,105154],{"class":214},[204,110218,431],{"class":263},[204,110220,4529],{"class":214},[204,110222,260],{"class":210},[204,110224,110225],{"class":263}," 0.1\n",[204,110227,110228],{"class":206,"line":8132},[204,110229,105167],{"class":214},[204,110231,110232],{"class":206,"line":8144},[204,110233,2486],{"emptyLinePlaceholder":135},[204,110235,110236,110239,110241],{"class":206,"line":9803},[204,110237,110238],{"class":214},"    total_reward ",[204,110240,260],{"class":210},[204,110242,104846],{"class":263},[204,110244,110245],{"class":206,"line":9828},[204,110246,2486],{"emptyLinePlaceholder":135},[204,110248,110249,110251,110253,110255,110257,110259,110261],{"class":206,"line":9851},[204,110250,3287],{"class":210},[204,110252,31702],{"class":214},[204,110254,26129],{"class":210},[204,110256,32529],{"class":263},[204,110258,215],{"class":214},[204,110260,6497],{"class":263},[204,110262,30872],{"class":214},[204,110264,110265,110268,110270],{"class":206,"line":9875},[204,110266,110267],{"class":214},"        obs ",[204,110269,260],{"class":210},[204,110271,110272],{"class":214}," get_observation(data)\n",[204,110274,110275,110278,110280,110282,110284],{"class":206,"line":9880},[204,110276,110277],{"class":214},"        pole_angle ",[204,110279,260],{"class":210},[204,110281,110121],{"class":214},[204,110283,431],{"class":263},[204,110285,33332],{"class":214},[204,110287,110288,110291,110293,110295,110297],{"class":206,"line":9885},[204,110289,110290],{"class":214},"        pole_angular_velocity ",[204,110292,260],{"class":210},[204,110294,110121],{"class":214},[204,110296,286],{"class":263},[204,110298,33332],{"class":214},[204,110300,110301],{"class":206,"line":9890},[204,110302,2486],{"emptyLinePlaceholder":135},[204,110304,110305,110308,110310,110313,110315,110317,110319,110321,110323],{"class":206,"line":9899},[204,110306,110307],{"class":214},"        action ",[204,110309,260],{"class":210},[204,110311,110312],{"class":263}," 2.0",[204,110314,6605],{"class":210},[204,110316,109905],{"class":214},[204,110318,694],{"class":210},[204,110320,61953],{"class":263},[204,110322,6605],{"class":210},[204,110324,110325],{"class":214}," pole_angular_velocity\n",[204,110327,110328,110330,110332,110334,110336,110338,110340,110342],{"class":206,"line":9904},[204,110329,110307],{"class":214},[204,110331,260],{"class":210},[204,110333,107532],{"class":214},[204,110335,745],{"class":210},[204,110337,102488],{"class":263},[204,110339,12522],{"class":214},[204,110341,102488],{"class":263},[204,110343,221],{"class":214},[204,110345,110346],{"class":206,"line":9910},[204,110347,2486],{"emptyLinePlaceholder":135},[204,110349,110350,110352,110354,110356,110358],{"class":206,"line":9931},[204,110351,106702],{"class":214},[204,110353,405],{"class":263},[204,110355,4529],{"class":214},[204,110357,260],{"class":210},[204,110359,107555],{"class":214},[204,110361,110362],{"class":206,"line":9937},[204,110363,101601],{"class":214},[204,110365,110366],{"class":206,"line":9951},[204,110367,2486],{"emptyLinePlaceholder":135},[204,110369,110370,110373,110375],{"class":206,"line":9957},[204,110371,110372],{"class":214},"        reward ",[204,110374,260],{"class":210},[204,110376,110377],{"class":214}," compute_reward(get_observation(data))\n",[204,110379,110380,110383,110385],{"class":206,"line":9984},[204,110381,110382],{"class":214},"        total_reward ",[204,110384,9564],{"class":210},[204,110386,110387],{"class":214}," reward\n",[204,110389,110390],{"class":206,"line":9993},[204,110391,2486],{"emptyLinePlaceholder":135},[204,110393,110394,110396,110398,110400,110402,110404,110406],{"class":206,"line":9999},[204,110395,2583],{"class":210},[204,110397,31702],{"class":214},[204,110399,541],{"class":210},[204,110401,5841],{"class":263},[204,110403,101644],{"class":210},[204,110405,4179],{"class":263},[204,110407,3825],{"class":214},[204,110409,110410,110412,110414,110417,110420,110423,110426,110428,110431,110434,110436,110438,110440,110442,110445,110447],{"class":206,"line":10007},[204,110411,34736],{"class":263},[204,110413,215],{"class":214},[204,110415,110416],{"class":319},"\"step:\"",[204,110418,110419],{"class":214},", step, ",[204,110421,110422],{"class":319},"\"obs:\"",[204,110424,110425],{"class":214},", np.round(obs, ",[204,110427,286],{"class":263},[204,110429,110430],{"class":214},"), ",[204,110432,110433],{"class":319},"\"action:\"",[204,110435,12522],{"class":214},[204,110437,32104],{"class":263},[204,110439,215],{"class":214},[204,110441,254],{"class":263},[204,110443,110444],{"class":214},"(action), ",[204,110446,286],{"class":263},[204,110448,30583],{"class":214},[204,110450,110451],{"class":206,"line":10012},[204,110452,2486],{"emptyLinePlaceholder":135},[204,110454,110455,110457,110459,110462,110464,110466,110469,110471],{"class":206,"line":16691},[204,110456,31385],{"class":263},[204,110458,215],{"class":214},[204,110460,110461],{"class":319},"\"total_reward:\"",[204,110463,12522],{"class":214},[204,110465,32104],{"class":263},[204,110467,110468],{"class":214},"(total_reward, ",[204,110470,286],{"class":263},[204,110472,30583],{"class":214},[204,110474,110475,110477,110479,110482,110485,110487],{"class":206,"line":16697},[204,110476,31385],{"class":263},[204,110478,215],{"class":214},[204,110480,110481],{"class":319},"\"final obs:\"",[204,110483,110484],{"class":214},", np.round(get_observation(data), ",[204,110486,286],{"class":263},[204,110488,30583],{"class":214},[204,110490,110491],{"class":206,"line":16720},[204,110492,2486],{"emptyLinePlaceholder":135},[204,110494,110495],{"class":206,"line":16726},[204,110496,2486],{"emptyLinePlaceholder":135},[204,110498,110499,110501,110503,110505,110507],{"class":206,"line":16749},[204,110500,1617],{"class":210},[204,110502,31306],{"class":263},[204,110504,101644],{"class":210},[204,110506,101647],{"class":319},[204,110508,3825],{"class":214},[204,110510,110511],{"class":206,"line":16763},[204,110512,101654],{"class":214},[19,110514,103655],{},[196,110516,110518],{"className":23909,"code":110517,"language":23911,"meta":125,"style":125},"touch ch6_cartpole.py\n",[81,110519,110520],{"__ignoreMap":125},[204,110521,110522,110524],{"class":206,"line":207},[204,110523,101368],{"class":2049},[204,110525,110526],{"class":319}," ch6_cartpole.py\n",[19,110528,110529],{},"运行：",[196,110531,110533],{"className":23909,"code":110532,"language":23911,"meta":125,"style":125},"python ch6_cartpole.py\n",[81,110534,110535],{"__ignoreMap":125},[204,110536,110537,110539],{"class":206,"line":207},[204,110538,30466],{"class":2049},[204,110540,110526],{"class":319},[49,110542,101657],{"id":101657},[19,110544,110545],{},"构造观测：",[196,110547,110549],{"className":30464,"code":110548,"language":30466,"meta":125,"style":125},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[81,110550,110551,110559],{"__ignoreMap":125},[204,110552,110553,110555,110557],{"class":206,"line":207},[204,110554,32033],{"class":210},[204,110556,110079],{"class":2049},[204,110558,110082],{"class":214},[204,110560,110561,110563],{"class":206,"line":126},[204,110562,4176],{"class":210},[204,110564,110089],{"class":214},[19,110566,110567,110570,110571,110573,110574,110576],{},[81,110568,110569],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[81,110572,104115],{}," 2 维，",[81,110575,104445],{}," 2 维，所以 obs 是 4 维。",[19,110578,110579],{},"设置初始角度：",[196,110581,110583],{"className":30464,"code":110582,"language":30466,"meta":125,"style":125},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[81,110584,110585,110597],{"__ignoreMap":125},[204,110586,110587,110589,110591,110593,110595],{"class":206,"line":207},[204,110588,104784],{"class":214},[204,110590,431],{"class":263},[204,110592,4529],{"class":214},[204,110594,260],{"class":210},[204,110596,110225],{"class":263},[204,110598,110599],{"class":206,"line":126},[204,110600,104628],{"class":214},[19,110602,110603],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110605,110606],{},"简单反馈控制：",[196,110608,110610],{"className":30464,"code":110609,"language":30466,"meta":125,"style":125},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[81,110611,110612,110632],{"__ignoreMap":125},[204,110613,110614,110616,110618,110620,110622,110624,110626,110628,110630],{"class":206,"line":207},[204,110615,107527],{"class":214},[204,110617,260],{"class":210},[204,110619,110312],{"class":263},[204,110621,6605],{"class":210},[204,110623,109905],{"class":214},[204,110625,694],{"class":210},[204,110627,61953],{"class":263},[204,110629,6605],{"class":210},[204,110631,110325],{"class":214},[204,110633,110634,110636,110638,110640,110642,110644,110646,110648],{"class":206,"line":126},[204,110635,107527],{"class":214},[204,110637,260],{"class":210},[204,110639,107532],{"class":214},[204,110641,745],{"class":210},[204,110643,102488],{"class":263},[204,110645,12522],{"class":214},[204,110647,102488],{"class":263},[204,110649,221],{"class":214},[19,110651,110652],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110654,110655],{},"限制动作：",[196,110657,110659],{"className":30464,"code":110658,"language":30466,"meta":125,"style":125},"np.clip(action, -1.0, 1.0)\n",[81,110660,110661],{"__ignoreMap":125},[204,110662,110663,110666,110668,110670,110672,110674],{"class":206,"line":207},[204,110664,110665],{"class":214},"np.clip(action, ",[204,110667,745],{"class":210},[204,110669,102488],{"class":263},[204,110671,12522],{"class":214},[204,110673,102488],{"class":263},[204,110675,221],{"class":214},[19,110677,110678,110679,110682],{},"因为 XML 里 ",[81,110680,110681],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[49,110684,101793],{"id":101793},[196,110686,110687],{"className":30464,"code":110548,"language":30466,"meta":125,"style":125},[81,110688,110689,110697],{"__ignoreMap":125},[204,110690,110691,110693,110695],{"class":206,"line":207},[204,110692,32033],{"class":210},[204,110694,110079],{"class":2049},[204,110696,110082],{"class":214},[204,110698,110699,110701],{"class":206,"line":126},[204,110700,4176],{"class":210},[204,110702,110089],{"class":214},[19,110704,110705,110706,110709,110710,110713,110714,110717],{},"这段定义了一个函数，用来获取当前观测。",[81,110707,110708],{},"data.qpos.copy()"," 是位置数组副本，",[81,110711,110712],{},"data.qvel.copy()"," 是速度数组副本。",[81,110715,110716],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110719,110720],{},"在本章模型里：",[196,110722,110725],{"className":110723,"code":110724,"language":5274,"meta":125},[5272],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[81,110726,110724],{"__ignoreMap":125},[19,110728,110729],{},"所以返回的 obs 是：",[196,110731,110734],{"className":110732,"code":110733,"language":5274,"meta":125},[5272],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[81,110735,110733],{"__ignoreMap":125},[196,110737,110739],{"className":30464,"code":110738,"language":30466,"meta":125,"style":125},"def compute_reward(obs: np.ndarray) -> float:\n",[81,110740,110741],{"__ignoreMap":125},[204,110742,110743,110745,110747,110749,110751],{"class":206,"line":207},[204,110744,32033],{"class":210},[204,110746,110104],{"class":2049},[204,110748,110107],{"class":214},[204,110750,254],{"class":263},[204,110752,3825],{"class":214},[19,110754,110755,110756,110759],{},"这行定义奖励函数。输入是观测 ",[81,110757,110758],{},"obs","，输出是一个浮点数奖励。",[196,110761,110763],{"className":30464,"code":110762,"language":30466,"meta":125,"style":125},"cart_x = obs[0]\npole_angle = obs[1]\n",[81,110764,110765,110778],{"__ignoreMap":125},[204,110766,110767,110770,110772,110774,110776],{"class":206,"line":207},[204,110768,110769],{"class":214},"cart_x ",[204,110771,260],{"class":210},[204,110773,110121],{"class":214},[204,110775,405],{"class":263},[204,110777,33332],{"class":214},[204,110779,110780,110783,110785,110787,110789],{"class":206,"line":126},[204,110781,110782],{"class":214},"pole_angle ",[204,110784,260],{"class":210},[204,110786,110121],{"class":214},[204,110788,431],{"class":263},[204,110790,33332],{"class":214},[19,110792,110793,110794,110797,110798,110801],{},"数组索引从 0 开始。",[81,110795,110796],{},"obs[0]"," 是第一个元素，也就是小车位置。",[81,110799,110800],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[196,110803,110804],{"className":30464,"code":109873,"language":30466,"meta":125,"style":125},[81,110805,110806],{"__ignoreMap":125},[204,110807,110808,110810,110812,110814,110816,110818,110820,110822,110824,110826,110828,110830,110832,110834],{"class":206,"line":207},[204,110809,17133],{"class":210},[204,110811,109882],{"class":263},[204,110813,215],{"class":214},[204,110815,102488],{"class":263},[204,110817,52357],{"class":210},[204,110819,109891],{"class":263},[204,110821,6605],{"class":210},[204,110823,109896],{"class":214},[204,110825,668],{"class":210},[204,110827,109896],{"class":214},[204,110829,745],{"class":210},[204,110831,109905],{"class":214},[204,110833,668],{"class":210},[204,110835,109910],{"class":214},[19,110837,110838,110839,110842,110843,110846],{},"这行计算奖励。",[81,110840,110841],{},"cart_x * cart_x"," 是小车位置的平方，",[81,110844,110845],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[196,110848,110850],{"className":30464,"code":110849,"language":30466,"meta":125,"style":125},"data.qpos[1] = 0.1\n",[81,110851,110852],{"__ignoreMap":125},[204,110853,110854,110856,110858,110860,110862],{"class":206,"line":207},[204,110855,104784],{"class":214},[204,110857,431],{"class":263},[204,110859,4529],{"class":214},[204,110861,260],{"class":210},[204,110863,110225],{"class":263},[19,110865,110866,110867,110869,110870,110872],{},"手动设置杆子的初始角度。因为 ",[81,110868,105541],{}," 是小车位置，",[81,110871,105544],{}," 是杆子角度，所以这里改的是杆子。",[196,110874,110875],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},[81,110876,110877],{"__ignoreMap":125},[204,110878,110879],{"class":206,"line":207},[204,110880,104628],{"class":214},[19,110882,105587,110883,110885],{},[81,110884,104115],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[196,110887,110889],{"className":30464,"code":110888,"language":30466,"meta":125,"style":125},"total_reward = 0.0\n",[81,110890,110891],{"__ignoreMap":125},[204,110892,110893,110896,110898],{"class":206,"line":207},[204,110894,110895],{"class":214},"total_reward ",[204,110897,260],{"class":210},[204,110899,104846],{"class":263},[19,110901,110902],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[196,110904,110906],{"className":30464,"code":110905,"language":30466,"meta":125,"style":125},"for step in range(1000):\n",[81,110907,110908],{"__ignoreMap":125},[204,110909,110910,110912,110914,110916,110918,110920,110922],{"class":206,"line":207},[204,110911,3111],{"class":210},[204,110913,31702],{"class":214},[204,110915,26129],{"class":210},[204,110917,32529],{"class":263},[204,110919,215],{"class":214},[204,110921,6497],{"class":263},[204,110923,30872],{"class":214},[19,110925,110926,110927,110929],{},"循环 1000 步。",[81,110928,107219],{}," 是当前步数，从 0 到 999。",[196,110931,110933],{"className":30464,"code":110932,"language":30466,"meta":125,"style":125},"obs = get_observation(data)\n",[81,110934,110935],{"__ignoreMap":125},[204,110936,110937,110940,110942],{"class":206,"line":207},[204,110938,110939],{"class":214},"obs ",[204,110941,260],{"class":210},[204,110943,110272],{"class":214},[19,110945,110946,110947,28471],{},"读取当前状态，保存到 ",[81,110948,110758],{},[196,110950,110952],{"className":30464,"code":110951,"language":30466,"meta":125,"style":125},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[81,110953,110954,110966],{"__ignoreMap":125},[204,110955,110956,110958,110960,110962,110964],{"class":206,"line":207},[204,110957,110782],{"class":214},[204,110959,260],{"class":210},[204,110961,110121],{"class":214},[204,110963,431],{"class":263},[204,110965,33332],{"class":214},[204,110967,110968,110971,110973,110975,110977],{"class":206,"line":126},[204,110969,110970],{"class":214},"pole_angular_velocity ",[204,110972,260],{"class":210},[204,110974,110121],{"class":214},[204,110976,286],{"class":263},[204,110978,33332],{"class":214},[19,110980,110981,110982,110985,110986,28471],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[81,110983,110984],{},"obs[3]","？因为 obs 的顺序是 ",[81,110987,110988],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[196,110990,110992],{"className":30464,"code":110991,"language":30466,"meta":125,"style":125},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[81,110993,110994],{"__ignoreMap":125},[204,110995,110996,110998,111000,111002,111004,111006,111008,111010,111012],{"class":206,"line":207},[204,110997,107527],{"class":214},[204,110999,260],{"class":210},[204,111001,110312],{"class":263},[204,111003,6605],{"class":210},[204,111005,109905],{"class":214},[204,111007,694],{"class":210},[204,111009,61953],{"class":263},[204,111011,6605],{"class":210},[204,111013,110325],{"class":214},[19,111015,111016,111017,43,111019,111021],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[81,111018,105345],{},[81,111020,35415],{}," 是人为设置的系数，不是固定公式。",[196,111023,111025],{"className":30464,"code":111024,"language":30466,"meta":125,"style":125},"action = np.clip(action, -1.0, 1.0)\n",[81,111026,111027],{"__ignoreMap":125},[204,111028,111029,111031,111033,111035,111037,111039,111041,111043],{"class":206,"line":207},[204,111030,107527],{"class":214},[204,111032,260],{"class":210},[204,111034,107532],{"class":214},[204,111036,745],{"class":210},[204,111038,102488],{"class":263},[204,111040,12522],{"class":214},[204,111042,102488],{"class":263},[204,111044,221],{"class":214},[19,111046,111047],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[196,111049,111050],{"className":30464,"code":109858,"language":30466,"meta":125,"style":125},[81,111051,111052],{"__ignoreMap":125},[204,111053,111054,111056,111058,111060,111062],{"class":206,"line":207},[204,111055,105956],{"class":214},[204,111057,405],{"class":263},[204,111059,4529],{"class":214},[204,111061,260],{"class":210},[204,111063,107555],{"class":214},[19,111065,111066],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[196,111068,111069],{"className":30464,"code":104590,"language":30466,"meta":125,"style":125},[81,111070,111071],{"__ignoreMap":125},[204,111072,111073],{"class":206,"line":207},[204,111074,104590],{"class":214},[19,111076,111077,111078,111080],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[81,111079,106211],{}," 计算小车和杆子的下一刻状态。",[196,111082,111084],{"className":30464,"code":111083,"language":30466,"meta":125,"style":125},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[81,111085,111086,111095],{"__ignoreMap":125},[204,111087,111088,111091,111093],{"class":206,"line":207},[204,111089,111090],{"class":214},"reward ",[204,111092,260],{"class":210},[204,111094,110377],{"class":214},[204,111096,111097,111099,111101],{"class":206,"line":126},[204,111098,110895],{"class":214},[204,111100,9564],{"class":210},[204,111102,110387],{"class":214},[19,111104,111105,111106,111108,111109,111112,111113,28471],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[81,111107,9564],{}," 是简写，",[81,111110,111111],{},"total_reward += reward"," 等价于 ",[81,111114,111115],{},"total_reward = total_reward + reward",[196,111117,111119],{"className":30464,"code":111118,"language":30466,"meta":125,"style":125},"if step % 100 == 0:\n",[81,111120,111121],{"__ignoreMap":125},[204,111122,111123,111125,111127,111129,111131,111133,111135],{"class":206,"line":207},[204,111124,1617],{"class":210},[204,111126,31702],{"class":214},[204,111128,541],{"class":210},[204,111130,5841],{"class":263},[204,111132,101644],{"class":210},[204,111134,4179],{"class":263},[204,111136,3825],{"class":214},[19,111138,111139,111141,111142,111145],{},[81,111140,541],{}," 是取余数。",[81,111143,111144],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[196,111147,111149],{"className":30464,"code":111148,"language":30466,"meta":125,"style":125},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[81,111150,111151],{"__ignoreMap":125},[204,111152,111153,111155,111157,111159,111161,111163,111165,111167,111169,111171,111173,111175,111177,111179,111181,111183],{"class":206,"line":207},[204,111154,30501],{"class":263},[204,111156,215],{"class":214},[204,111158,110416],{"class":319},[204,111160,110419],{"class":214},[204,111162,110422],{"class":319},[204,111164,110425],{"class":214},[204,111166,286],{"class":263},[204,111168,110430],{"class":214},[204,111170,110433],{"class":319},[204,111172,12522],{"class":214},[204,111174,32104],{"class":263},[204,111176,215],{"class":214},[204,111178,254],{"class":263},[204,111180,110444],{"class":214},[204,111182,286],{"class":263},[204,111184,30583],{"class":214},[19,111186,111187,111188,111191,111192,111195],{},"打印当前步数、观测和动作。",[81,111189,111190],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[81,111193,111194],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111197,102401],{"id":102400},[19,111199,111200],{},"观测向量:",[196,111202,111205],{"className":111203,"code":111204,"language":5274,"meta":125},[5272],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[81,111206,111204],{"__ignoreMap":125},[19,111208,111209],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111211,111212],{},"每隔 100 步会打印一次：",[196,111214,111217],{"className":111215,"code":111216,"language":5274,"meta":125},[5272],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[81,111218,111216],{"__ignoreMap":125},[19,111220,111221],{},"重点观察：",[161,111223,111224,111230,111235],{},[71,111225,111226,111229],{},[81,111227,111228],{},"pole_angle"," 是否越来越大。",[71,111231,111232,111234],{},[81,111233,109811],{}," 是否跑得太远。",[71,111236,111237,111238,82625,111240,28471],{},"action 是否经常被 clip 到 ",[81,111239,104000],{},[81,111241,431],{},[19,111243,111244],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111246,102433],{"id":102432},[161,111248,111249,111255,111258,111264,111274,111280,111283],{},[71,111250,111251,111252,28471],{},"把初始角度改为 ",[81,111253,111254],{},"data.qpos[1] = 0.3",[71,111256,111257],{},"重新运行，观察控制是否变差。",[71,111259,111260,111261,111263],{},"把 actuator ",[81,111262,107152],{}," 改小。",[71,111265,111266,111267,111270,111271,28471],{},"打印 ",[81,111268,111269],{},"model.nq, model.nv, model.nu","，应为 ",[81,111272,111273],{},"2 2 1",[71,111275,111276,111277,111279],{},"把 reward 里的 ",[81,111278,110845],{}," 系数改大，观察总奖励变化。",[71,111281,111282],{},"把控制器改成反号，观察杆子是否更容易倒。",[71,111284,111285],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111287,102538],{"id":102537},[49,111289,111290],{"id":111290},"杆子方向和预期不一致",[19,111292,102481,111293,111295,111296,111298],{},[81,111294,106324],{}," 和 capsule 的 ",[81,111297,103261],{},"，必要时用 viewer 可视化确认。",[49,111300,111301],{"id":111301},"控制器越控越倒",[19,111303,111304],{},"说明反馈符号可能反了，尝试:",[196,111306,111308],{"className":30464,"code":111307,"language":30466,"meta":125,"style":125},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[81,111309,111310],{"__ignoreMap":125},[204,111311,111312,111314,111316,111318,111320,111322,111324,111326,111328,111330],{"class":206,"line":207},[204,111313,107527],{"class":214},[204,111315,260],{"class":210},[204,111317,52357],{"class":210},[204,111319,105345],{"class":263},[204,111321,6605],{"class":210},[204,111323,109905],{"class":214},[204,111325,745],{"class":210},[204,111327,61953],{"class":263},[204,111329,6605],{"class":210},[204,111331,110325],{"class":214},[49,111333,111334],{"id":111334},"小车飞走",[19,111336,111337,111338,111340,111341,111344],{},"降低 ",[81,111339,107152],{}," 或缩小 ",[81,111342,111343],{},"action"," 的 clip 范围。",[49,111346,111348,111350],{"id":111347},"obs3-为什么是杆子角速度",[81,111349,110984],{}," 为什么是杆子角速度",[19,111352,111353],{},"因为这个模型里：",[196,111355,111358],{"className":111356,"code":111357,"language":5274,"meta":125},[5272],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[81,111359,111357],{"__ignoreMap":125},[19,111361,109832],{},[196,111363,111366],{"className":111364,"code":111365,"language":5274,"meta":125},[5272],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[81,111367,111365],{"__ignoreMap":125},[49,111369,111371],{"id":111370},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111373,111374],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111376,102692],{"id":102691},[19,111378,111379],{},"一个控制任务通常包含：",[161,111381,111382,111385,111393,111398,111401],{},[71,111383,111384],{},"模型：Cartpole 的 body、joint、actuator。",[71,111386,111387,111388,426,111390,111392],{},"观测：从 ",[81,111389,104115],{},[81,111391,104445],{}," 里取状态。",[71,111394,111395,111396,28471],{},"动作：写入 ",[81,111397,101161],{},[71,111399,111400],{},"奖励：根据任务目标打分。",[71,111402,111403],{},"循环：obs -> action -> step -> reward。",[19,111405,111406],{},"这就是后面 Gymnasium 环境的基本骨架。",[5213,111408,104371],{},{"title":125,"searchDepth":126,"depth":126,"links":111410},[111411,111412,111413,111418,111422,111423,111424,111432],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":111414},[111415,111416,111417],{"id":109785,"depth":131,"text":109786},{"id":109850,"depth":131,"text":109851},{"id":109866,"depth":131,"text":109867},{"id":101337,"depth":126,"text":101338,"children":111419},[111420,111421],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":111425},[111426,111427,111428,111429,111431],{"id":111290,"depth":131,"text":111290},{"id":111301,"depth":131,"text":111301},{"id":111334,"depth":131,"text":111334},{"id":111347,"depth":131,"text":111430},"obs[3] 为什么是杆子角速度",{"id":111370,"depth":131,"text":111371},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109521,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111439,"title":111440,"body":111441,"description":125,"extension":133,"meta":113455,"navigation":135,"path":113456,"seo":113457,"stem":113458,"__hash__":113459},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111442,"toc":113431},[111443,111446,111448,111451,111453,111470,111473,111476,111482,111485,111487,111489,111513,111515,111529,111531,111572,111574,111592,111594,111597,111603,111606,111634,111638,111644,111669,111672,111703,111710,111713,111716,111722,111725,111731,111734,111740,111744,111747,111772,111775,111777,112537,112539,112551,112553,112564,112566,112569,112586,112589,112591,112602,112605,112607,112653,112656,112669,112672,112754,112757,112759,112775,112785,112798,112801,112840,112850,112861,112871,112884,112887,112916,112919,112929,112932,112938,112955,112966,112968,112974,112991,113002,113023,113026,113038,113041,113062,113065,113073,113081,113098,113101,113170,113177,113185,113188,113201,113208,113210,113213,113219,113222,113225,113231,113237,113239,113279,113281,113287,113296,113299,113301,113321,113324,113327,113333,113337,113339,113366,113369,113372,113399,113405,113408,113411,113413,113416,113419,113425,113428],[10,111444,111440],{"id":111445},"_7控制任务reacher-机械臂到达目标",[14,111447,100733],{"id":100732},[19,111449,111450],{},"本章搭建一个二维两关节 reacher 任务。",[19,111452,104416],{},[161,111454,111455,111458,111461,111464,111467],{},[71,111456,111457],{},"两个 hinge joint",[71,111459,111460],{},"两个 motor actuator",[71,111462,111463],{},"site 作为末端点和目标点",[71,111465,111466],{},"根据末端和目标距离设计 reward",[71,111468,111469],{},"构造机械臂任务的基本形式",[19,111471,111472],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111474,111475],{},"Reacher 任务可以理解为：",[196,111477,111480],{"className":111478,"code":111479,"language":5274,"meta":125},[5272],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[81,111481,111479],{"__ignoreMap":125},[19,111483,111484],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111486,100856],{"id":100855},[19,111488,100859],{},[196,111490,111491],{"className":23909,"code":104473,"language":23911,"meta":125,"style":125},[81,111492,111493],{"__ignoreMap":125},[204,111494,111495,111497,111499,111501,111503,111505,111507,111509,111511],{"class":206,"line":207},[204,111496,24663],{"class":2049},[204,111498,26401],{"class":319},[204,111500,23921],{"class":319},[204,111502,26486],{"class":263},[204,111504,104488],{"class":319},[204,111506,100884],{"class":319},[204,111508,102586],{"class":319},[204,111510,100900],{"class":319},[204,111512,104497],{"class":319},[19,111514,102904],{},[196,111516,111517],{"className":23909,"code":101005,"language":23911,"meta":125,"style":125},[81,111518,111519],{"__ignoreMap":125},[204,111520,111521,111523,111525,111527],{"class":206,"line":207},[204,111522,23918],{"class":2049},[204,111524,23921],{"class":319},[204,111526,101016],{"class":319},[204,111528,101019],{"class":319},[19,111530,102921],{},[196,111532,111534],{"className":23909,"code":111533,"language":23911,"meta":125,"style":125},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[81,111535,111536,111553,111562],{"__ignoreMap":125},[204,111537,111538,111540,111542,111544,111547,111549,111551],{"class":206,"line":207},[204,111539,30416],{"class":2049},[204,111541,29262],{"class":319},[204,111543,25202],{"class":263},[204,111545,111546],{"class":319}," mujoco-reacher",[204,111548,101061],{"class":319},[204,111550,101064],{"class":263},[204,111552,101067],{"class":263},[204,111554,111555,111557,111559],{"class":206,"line":126},[204,111556,30416],{"class":2049},[204,111558,101074],{"class":319},[204,111560,111561],{"class":319}," mujoco-reacher\n",[204,111563,111564,111566,111568,111570],{"class":206,"line":131},[204,111565,23918],{"class":2049},[204,111567,23921],{"class":319},[204,111569,101016],{"class":319},[204,111571,101019],{"class":319},[19,111573,101090],{},[161,111575,111576,111579,111582],{},[71,111577,111578],{},"本章使用低维状态，不使用图像输入。",[71,111580,111581],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[71,111583,111584,111585,426,111587,426,111589,111591],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[81,111586,104115],{},[81,111588,104445],{},[81,111590,103765],{}," 的方法一致。",[14,111593,101130],{"id":101129},[19,111595,111596],{},"Reacher 任务核心:",[196,111598,111601],{"className":111599,"code":111600,"language":5274,"meta":125},[5272],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[81,111602,111600],{"__ignoreMap":125},[19,111604,111605],{},"读取 site 世界坐标:",[196,111607,111609],{"className":30464,"code":111608,"language":30466,"meta":125,"style":125},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[81,111610,111611,111624],{"__ignoreMap":125},[204,111612,111613,111615,111617,111619,111622],{"class":206,"line":207},[204,111614,103719],{"class":214},[204,111616,260],{"class":210},[204,111618,103490],{"class":214},[204,111620,111621],{"class":319},"\"tip\"",[204,111623,221],{"class":214},[204,111625,111626,111629,111631],{"class":206,"line":126},[204,111627,111628],{"class":214},"tip_pos ",[204,111630,260],{"class":210},[204,111632,111633],{"class":214}," data.site_xpos[site_id]\n",[49,111635,111637],{"id":111636},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111639,111640,111641,111643],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[81,111642,104115],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[196,111645,111647],{"className":30464,"code":111646,"language":30466,"meta":125,"style":125},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[81,111648,111649,111659],{"__ignoreMap":125},[204,111650,111651,111654,111656],{"class":206,"line":207},[204,111652,111653],{"class":214},"tip ",[204,111655,260],{"class":210},[204,111657,111658],{"class":214}," data.site_xpos[tip_site_id]\n",[204,111660,111661,111664,111666],{"class":206,"line":126},[204,111662,111663],{"class":214},"target ",[204,111665,260],{"class":210},[204,111667,111668],{"class":214}," data.site_xpos[target_site_id]\n",[19,111670,111671],{},"这样 reward 就很容易写：",[196,111673,111675],{"className":30464,"code":111674,"language":30466,"meta":125,"style":125},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[81,111676,111677,111692],{"__ignoreMap":125},[204,111678,111679,111682,111684,111687,111689],{"class":206,"line":207},[204,111680,111681],{"class":214},"dist ",[204,111683,260],{"class":210},[204,111685,111686],{"class":214}," np.linalg.norm(tip ",[204,111688,745],{"class":210},[204,111690,111691],{"class":214}," target)\n",[204,111693,111694,111696,111698,111700],{"class":206,"line":126},[204,111695,111090],{"class":214},[204,111697,260],{"class":210},[204,111699,52357],{"class":210},[204,111701,111702],{"class":214},"dist\n",[19,111704,111705,111706,111709],{},"距离越小，",[81,111707,111708],{},"-dist"," 越接近 0，奖励越高。",[49,111711,111712],{"id":111712},"两关节机械臂的状态",[19,111714,111715],{},"这个模型有两个 hinge joint：",[196,111717,111720],{"className":111718,"code":111719,"language":5274,"meta":125},[5272],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[81,111721,111719],{"__ignoreMap":125},[19,111723,111724],{},"再加上末端和目标位置：",[196,111726,111729],{"className":111727,"code":111728,"language":5274,"meta":125},[5272],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[81,111730,111728],{"__ignoreMap":125},[19,111732,111733],{},"总维度：",[196,111735,111738],{"className":111736,"code":111737,"language":5274,"meta":125},[5272],"2 + 2 + 3 + 3 = 10\n",[81,111739,111737],{"__ignoreMap":125},[49,111741,111743],{"id":111742},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111745,111746],{},"本章把重力设为：",[196,111748,111750],{"className":53153,"code":111749,"language":53155,"meta":125,"style":125},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[81,111751,111752],{"__ignoreMap":125},[204,111753,111754,111756,111758,111760,111762,111764,111766,111768,111770],{"class":206,"line":207},[204,111755,1123],{"class":214},[204,111757,69252],{"class":51386},[204,111759,101279],{"class":2049},[204,111761,260],{"class":214},[204,111763,101284],{"class":319},[204,111765,101287],{"class":2049},[204,111767,260],{"class":214},[204,111769,103856],{"class":319},[204,111771,101229],{"class":214},[19,111773,111774],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111776,101338],{"id":101337},[196,111778,111780],{"className":30464,"code":111779,"language":30466,"meta":125,"style":125},"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",[81,111781,111782,111788,111798,111802,111806,111814,111819,111824,111828,111832,111837,111842,111846,111851,111856,111861,111865,111870,111875,111880,111885,111889,111893,111897,111901,111905,111910,111915,111919,111923,111927,111931,111935,111950,111959,111971,111994,112001,112005,112009,112019,112033,112047,112054,112058,112062,112076,112088,112100,112113,112128,112145,112149,112153,112165,112177,112185,112193,112197,112213,112218,112231,112244,112259,112263,112298,112330,112334,112338,112347,112351,112367,112377,112388,112404,112420,112436,112452,112456,112474,112494,112513,112517,112521,112533],{"__ignoreMap":125},[204,111783,111784,111786],{"class":206,"line":207},[204,111785,30478],{"class":210},[204,111787,101386],{"class":214},[204,111789,111790,111792,111794,111796],{"class":206,"line":126},[204,111791,30478],{"class":210},[204,111793,31466],{"class":214},[204,111795,31469],{"class":210},[204,111797,31472],{"class":214},[204,111799,111800],{"class":206,"line":131},[204,111801,2486],{"emptyLinePlaceholder":135},[204,111803,111804],{"class":206,"line":1281},[204,111805,2486],{"emptyLinePlaceholder":135},[204,111807,111808,111810,111812],{"class":206,"line":1287},[204,111809,101399],{"class":263},[204,111811,13651],{"class":210},[204,111813,101404],{"class":319},[204,111815,111816],{"class":206,"line":1301},[204,111817,111818],{"class":319},"\u003Cmujoco model=\"two_link_reacher\">\n",[204,111820,111821],{"class":206,"line":1307},[204,111822,111823],{"class":319},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[204,111825,111826],{"class":206,"line":1398},[204,111827,2486],{"emptyLinePlaceholder":135},[204,111829,111830],{"class":206,"line":1404},[204,111831,101423],{"class":319},[204,111833,111834],{"class":206,"line":1416},[204,111835,111836],{"class":319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[204,111838,111839],{"class":206,"line":1698},[204,111840,111841],{"class":319},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[204,111843,111844],{"class":206,"line":1703},[204,111845,2486],{"emptyLinePlaceholder":135},[204,111847,111848],{"class":206,"line":1709},[204,111849,111850],{"class":319},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[204,111852,111853],{"class":206,"line":1714},[204,111854,111855],{"class":319},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[204,111857,111858],{"class":206,"line":1728},[204,111859,111860],{"class":319},"      \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",[204,111862,111863],{"class":206,"line":1733},[204,111864,2486],{"emptyLinePlaceholder":135},[204,111866,111867],{"class":206,"line":1739},[204,111868,111869],{"class":319},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[204,111871,111872],{"class":206,"line":1760},[204,111873,111874],{"class":319},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[204,111876,111877],{"class":206,"line":1765},[204,111878,111879],{"class":319},"        \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",[204,111881,111882],{"class":206,"line":1779},[204,111883,111884],{"class":319},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[204,111886,111887],{"class":206,"line":1784},[204,111888,106523],{"class":319},[204,111890,111891],{"class":206,"line":1813},[204,111892,101452],{"class":319},[204,111894,111895],{"class":206,"line":1818},[204,111896,101457],{"class":319},[204,111898,111899],{"class":206,"line":1835},[204,111900,2486],{"emptyLinePlaceholder":135},[204,111902,111903],{"class":206,"line":1840},[204,111904,106540],{"class":319},[204,111906,111907],{"class":206,"line":1845},[204,111908,111909],{"class":319},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[204,111911,111912],{"class":206,"line":1850},[204,111913,111914],{"class":319},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[204,111916,111917],{"class":206,"line":1864},[204,111918,106550],{"class":319},[204,111920,111921],{"class":206,"line":1869},[204,111922,101462],{"class":319},[204,111924,111925],{"class":206,"line":2663},[204,111926,95784],{"class":319},[204,111928,111929],{"class":206,"line":2677},[204,111930,2486],{"emptyLinePlaceholder":135},[204,111932,111933],{"class":206,"line":2685},[204,111934,2486],{"emptyLinePlaceholder":135},[204,111936,111937,111939,111942,111945,111947],{"class":206,"line":2690},[204,111938,32033],{"class":210},[204,111940,111941],{"class":2049}," site_position",[204,111943,111944],{"class":214},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[204,111946,1386],{"class":263},[204,111948,111949],{"class":214},") -> np.ndarray:\n",[204,111951,111952,111954,111956],{"class":206,"line":2696},[204,111953,103485],{"class":214},[204,111955,260],{"class":210},[204,111957,111958],{"class":214}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[204,111960,111961,111963,111965,111967,111969],{"class":206,"line":2702},[204,111962,3187],{"class":210},[204,111964,103534],{"class":214},[204,111966,1123],{"class":210},[204,111968,4179],{"class":263},[204,111970,3825],{"class":214},[204,111972,111973,111975,111977,111979,111981,111984,111986,111988,111990,111992],{"class":206,"line":2707},[204,111974,103517],{"class":210},[204,111976,103520],{"class":263},[204,111978,215],{"class":214},[204,111980,267],{"class":210},[204,111982,111983],{"class":319},"\"site not found: ",[204,111985,1109],{"class":263},[204,111987,79896],{"class":214},[204,111989,1159],{"class":263},[204,111991,464],{"class":319},[204,111993,221],{"class":214},[204,111995,111996,111998],{"class":206,"line":8035},[204,111997,4176],{"class":210},[204,111999,112000],{"class":214}," data.site_xpos[site_id].copy()\n",[204,112002,112003],{"class":206,"line":8059},[204,112004,2486],{"emptyLinePlaceholder":135},[204,112006,112007],{"class":206,"line":8064},[204,112008,2486],{"emptyLinePlaceholder":135},[204,112010,112011,112013,112016],{"class":206,"line":8070},[204,112012,32033],{"class":210},[204,112014,112015],{"class":2049}," get_obs",[204,112017,112018],{"class":214},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[204,112020,112021,112024,112026,112029,112031],{"class":206,"line":8097},[204,112022,112023],{"class":214},"    tip ",[204,112025,260],{"class":210},[204,112027,112028],{"class":214}," site_position(model, data, ",[204,112030,111621],{"class":319},[204,112032,221],{"class":214},[204,112034,112035,112038,112040,112042,112045],{"class":206,"line":8102},[204,112036,112037],{"class":214},"    target ",[204,112039,260],{"class":210},[204,112041,112028],{"class":214},[204,112043,112044],{"class":319},"\"target\"",[204,112046,221],{"class":214},[204,112048,112049,112051],{"class":206,"line":8108},[204,112050,4176],{"class":210},[204,112052,112053],{"class":214}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[204,112055,112056],{"class":206,"line":8120},[204,112057,2486],{"emptyLinePlaceholder":135},[204,112059,112060],{"class":206,"line":8132},[204,112061,2486],{"emptyLinePlaceholder":135},[204,112063,112064,112066,112069,112072,112074],{"class":206,"line":8144},[204,112065,32033],{"class":210},[204,112067,112068],{"class":2049}," reward",[204,112070,112071],{"class":214},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[204,112073,254],{"class":263},[204,112075,3825],{"class":214},[204,112077,112078,112080,112082,112084,112086],{"class":206,"line":9803},[204,112079,112023],{"class":214},[204,112081,260],{"class":210},[204,112083,112028],{"class":214},[204,112085,111621],{"class":319},[204,112087,221],{"class":214},[204,112089,112090,112092,112094,112096,112098],{"class":206,"line":9828},[204,112091,112037],{"class":214},[204,112093,260],{"class":210},[204,112095,112028],{"class":214},[204,112097,112044],{"class":319},[204,112099,221],{"class":214},[204,112101,112102,112105,112107,112109,112111],{"class":206,"line":9851},[204,112103,112104],{"class":214},"    dist ",[204,112106,260],{"class":210},[204,112108,111686],{"class":214},[204,112110,745],{"class":210},[204,112112,111691],{"class":214},[204,112114,112115,112118,112120,112123,112125],{"class":206,"line":9875},[204,112116,112117],{"class":214},"    control_cost ",[204,112119,260],{"class":210},[204,112121,112122],{"class":263}," 0.01",[204,112124,6605],{"class":210},[204,112126,112127],{"class":214}," np.sum(np.square(data.ctrl))\n",[204,112129,112130,112132,112134,112136,112138,112140,112142],{"class":206,"line":9880},[204,112131,4176],{"class":210},[204,112133,109882],{"class":263},[204,112135,215],{"class":214},[204,112137,745],{"class":210},[204,112139,111681],{"class":214},[204,112141,745],{"class":210},[204,112143,112144],{"class":214}," control_cost)\n",[204,112146,112147],{"class":206,"line":9885},[204,112148,2486],{"emptyLinePlaceholder":135},[204,112150,112151],{"class":206,"line":9890},[204,112152,2486],{"emptyLinePlaceholder":135},[204,112154,112155,112157,112159,112161,112163],{"class":206,"line":9899},[204,112156,32033],{"class":210},[204,112158,2059],{"class":2049},[204,112160,101483],{"class":214},[204,112162,95772],{"class":263},[204,112164,3825],{"class":214},[204,112166,112167,112169,112171,112173,112175],{"class":206,"line":9904},[204,112168,101492],{"class":214},[204,112170,260],{"class":210},[204,112172,101497],{"class":214},[204,112174,101399],{"class":263},[204,112176,221],{"class":214},[204,112178,112179,112181,112183],{"class":206,"line":9910},[204,112180,101506],{"class":214},[204,112182,260],{"class":210},[204,112184,101511],{"class":214},[204,112186,112187,112189,112191],{"class":206,"line":9931},[204,112188,110238],{"class":214},[204,112190,260],{"class":210},[204,112192,104846],{"class":263},[204,112194,112195],{"class":206,"line":9937},[204,112196,2486],{"emptyLinePlaceholder":135},[204,112198,112199,112201,112203,112205,112207,112209,112211],{"class":206,"line":9951},[204,112200,3287],{"class":210},[204,112202,31702],{"class":214},[204,112204,26129],{"class":210},[204,112206,32529],{"class":263},[204,112208,215],{"class":214},[204,112210,65160],{"class":263},[204,112212,30872],{"class":214},[204,112214,112215],{"class":206,"line":9957},[204,112216,112217],{"class":214},"        mujoco.mj_forward(model, data)\n",[204,112219,112220,112223,112225,112227,112229],{"class":206,"line":9984},[204,112221,112222],{"class":214},"        tip ",[204,112224,260],{"class":210},[204,112226,112028],{"class":214},[204,112228,111621],{"class":319},[204,112230,221],{"class":214},[204,112232,112233,112236,112238,112240,112242],{"class":206,"line":9993},[204,112234,112235],{"class":214},"        target ",[204,112237,260],{"class":210},[204,112239,112028],{"class":214},[204,112241,112044],{"class":319},[204,112243,221],{"class":214},[204,112245,112246,112249,112251,112254,112256],{"class":206,"line":9999},[204,112247,112248],{"class":214},"        error ",[204,112250,260],{"class":210},[204,112252,112253],{"class":214}," target ",[204,112255,745],{"class":210},[204,112257,112258],{"class":214}," tip\n",[204,112260,112261],{"class":206,"line":10007},[204,112262,2486],{"emptyLinePlaceholder":135},[204,112264,112265,112267,112269,112271,112273,112276,112278,112280,112283,112285,112288,112290,112292,112294,112296],{"class":206,"line":10012},[204,112266,106702],{"class":214},[204,112268,405],{"class":263},[204,112270,4529],{"class":214},[204,112272,260],{"class":210},[204,112274,112275],{"class":214}," np.clip(",[204,112277,105345],{"class":263},[204,112279,6605],{"class":210},[204,112281,112282],{"class":214}," error[",[204,112284,292],{"class":263},[204,112286,112287],{"class":214},"], ",[204,112289,745],{"class":210},[204,112291,102488],{"class":263},[204,112293,12522],{"class":214},[204,112295,102488],{"class":263},[204,112297,221],{"class":214},[204,112299,112300,112302,112304,112306,112308,112310,112312,112314,112316,112318,112320,112322,112324,112326,112328],{"class":206,"line":16691},[204,112301,106702],{"class":214},[204,112303,431],{"class":263},[204,112305,4529],{"class":214},[204,112307,260],{"class":210},[204,112309,112275],{"class":214},[204,112311,105345],{"class":263},[204,112313,6605],{"class":210},[204,112315,112282],{"class":214},[204,112317,405],{"class":263},[204,112319,112287],{"class":214},[204,112321,745],{"class":210},[204,112323,102488],{"class":263},[204,112325,12522],{"class":214},[204,112327,102488],{"class":263},[204,112329,221],{"class":214},[204,112331,112332],{"class":206,"line":16697},[204,112333,2486],{"emptyLinePlaceholder":135},[204,112335,112336],{"class":206,"line":16720},[204,112337,101601],{"class":214},[204,112339,112340,112342,112344],{"class":206,"line":16726},[204,112341,110382],{"class":214},[204,112343,9564],{"class":210},[204,112345,112346],{"class":214}," reward(model, data)\n",[204,112348,112349],{"class":206,"line":16749},[204,112350,2486],{"emptyLinePlaceholder":135},[204,112352,112353,112355,112357,112359,112361,112363,112365],{"class":206,"line":16763},[204,112354,2583],{"class":210},[204,112356,31702],{"class":214},[204,112358,541],{"class":210},[204,112360,5841],{"class":263},[204,112362,101644],{"class":210},[204,112364,4179],{"class":263},[204,112366,3825],{"class":214},[204,112368,112369,112372,112374],{"class":206,"line":16783},[204,112370,112371],{"class":214},"            obs ",[204,112373,260],{"class":210},[204,112375,112376],{"class":214}," get_obs(model, data)\n",[204,112378,112379,112381,112383,112385],{"class":206,"line":16789},[204,112380,34736],{"class":263},[204,112382,215],{"class":214},[204,112384,110416],{"class":319},[204,112386,112387],{"class":214},", step)\n",[204,112389,112390,112392,112394,112397,112400,112402],{"class":206,"line":16800},[204,112391,34736],{"class":263},[204,112393,215],{"class":214},[204,112395,112396],{"class":319},"\"  tip:\"",[204,112398,112399],{"class":214},", np.round(tip, ",[204,112401,286],{"class":263},[204,112403,30583],{"class":214},[204,112405,112406,112408,112410,112413,112416,112418],{"class":206,"line":16823},[204,112407,34736],{"class":263},[204,112409,215],{"class":214},[204,112411,112412],{"class":319},"\"  target:\"",[204,112414,112415],{"class":214},", np.round(target, ",[204,112417,286],{"class":263},[204,112419,30583],{"class":214},[204,112421,112422,112424,112426,112429,112432,112434],{"class":206,"line":16845},[204,112423,34736],{"class":263},[204,112425,215],{"class":214},[204,112427,112428],{"class":319},"\"  ctrl:\"",[204,112430,112431],{"class":214},", np.round(data.ctrl.copy(), ",[204,112433,286],{"class":263},[204,112435,30583],{"class":214},[204,112437,112438,112440,112442,112445,112448,112450],{"class":206,"line":16850},[204,112439,34736],{"class":263},[204,112441,215],{"class":214},[204,112443,112444],{"class":319},"\"  obs_dim:\"",[204,112446,112447],{"class":214},", obs.shape[",[204,112449,405],{"class":263},[204,112451,4743],{"class":214},[204,112453,112454],{"class":206,"line":16856},[204,112455,2486],{"emptyLinePlaceholder":135},[204,112457,112458,112460,112462,112464,112466,112468,112470,112472],{"class":206,"line":16870},[204,112459,31385],{"class":263},[204,112461,215],{"class":214},[204,112463,110461],{"class":319},[204,112465,12522],{"class":214},[204,112467,32104],{"class":263},[204,112469,110468],{"class":214},[204,112471,286],{"class":263},[204,112473,30583],{"class":214},[204,112475,112476,112478,112480,112483,112486,112488,112490,112492],{"class":206,"line":16883},[204,112477,31385],{"class":263},[204,112479,215],{"class":214},[204,112481,112482],{"class":319},"\"final tip:\"",[204,112484,112485],{"class":214},", np.round(site_position(model, data, ",[204,112487,111621],{"class":319},[204,112489,110430],{"class":214},[204,112491,286],{"class":263},[204,112493,30583],{"class":214},[204,112495,112496,112498,112500,112503,112505,112507,112509,112511],{"class":206,"line":16888},[204,112497,31385],{"class":263},[204,112499,215],{"class":214},[204,112501,112502],{"class":319},"\"target:\"",[204,112504,112485],{"class":214},[204,112506,112044],{"class":319},[204,112508,110430],{"class":214},[204,112510,286],{"class":263},[204,112512,30583],{"class":214},[204,112514,112515],{"class":206,"line":16902},[204,112516,2486],{"emptyLinePlaceholder":135},[204,112518,112519],{"class":206,"line":16907},[204,112520,2486],{"emptyLinePlaceholder":135},[204,112522,112523,112525,112527,112529,112531],{"class":206,"line":16913},[204,112524,1617],{"class":210},[204,112526,31306],{"class":263},[204,112528,101644],{"class":210},[204,112530,101647],{"class":319},[204,112532,3825],{"class":214},[204,112534,112535],{"class":206,"line":16918},[204,112536,101654],{"class":214},[19,112538,103655],{},[196,112540,112542],{"className":23909,"code":112541,"language":23911,"meta":125,"style":125},"touch ch7_reacher.py\n",[81,112543,112544],{"__ignoreMap":125},[204,112545,112546,112548],{"class":206,"line":207},[204,112547,101368],{"class":2049},[204,112549,112550],{"class":319}," ch7_reacher.py\n",[19,112552,110529],{},[196,112554,112556],{"className":23909,"code":112555,"language":23911,"meta":125,"style":125},"python ch7_reacher.py\n",[81,112557,112558],{"__ignoreMap":125},[204,112559,112560,112562],{"class":206,"line":207},[204,112561,30466],{"class":2049},[204,112563,112550],{"class":319},[49,112565,101657],{"id":101657},[19,112567,112568],{},"读取 site 坐标：",[196,112570,112572],{"className":30464,"code":112571,"language":30466,"meta":125,"style":125},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[81,112573,112574],{"__ignoreMap":125},[204,112575,112576,112578,112580,112582,112584],{"class":206,"line":207},[204,112577,32033],{"class":210},[204,112579,111941],{"class":2049},[204,112581,111944],{"class":214},[204,112583,1386],{"class":263},[204,112585,111949],{"class":214},[19,112587,112588],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112590,110545],{},[196,112592,112594],{"className":30464,"code":112593,"language":30466,"meta":125,"style":125},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[81,112595,112596],{"__ignoreMap":125},[204,112597,112598,112600],{"class":206,"line":207},[204,112599,17133],{"class":210},[204,112601,112053],{"class":214},[19,112603,112604],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112606,109870],{},[196,112608,112610],{"className":30464,"code":112609,"language":30466,"meta":125,"style":125},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[81,112611,112612,112624,112637],{"__ignoreMap":125},[204,112613,112614,112616,112618,112620,112622],{"class":206,"line":207},[204,112615,111681],{"class":214},[204,112617,260],{"class":210},[204,112619,111686],{"class":214},[204,112621,745],{"class":210},[204,112623,111691],{"class":214},[204,112625,112626,112629,112631,112633,112635],{"class":206,"line":126},[204,112627,112628],{"class":214},"control_cost ",[204,112630,260],{"class":210},[204,112632,112122],{"class":263},[204,112634,6605],{"class":210},[204,112636,112127],{"class":214},[204,112638,112639,112641,112643,112645,112647,112649,112651],{"class":206,"line":131},[204,112640,17133],{"class":210},[204,112642,109882],{"class":263},[204,112644,215],{"class":214},[204,112646,745],{"class":210},[204,112648,111681],{"class":214},[204,112650,745],{"class":210},[204,112652,112144],{"class":214},[19,112654,112655],{},"奖励由两部分组成：",[161,112657,112658,112663],{},[71,112659,112660,112662],{},[81,112661,111708],{},"：末端离目标越远，奖励越低。",[71,112664,112665,112668],{},[81,112666,112667],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112670,112671],{},"简单控制器：",[196,112673,112675],{"className":30464,"code":112674,"language":30466,"meta":125,"style":125},"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",[81,112676,112677,112690,112722],{"__ignoreMap":125},[204,112678,112679,112682,112684,112686,112688],{"class":206,"line":207},[204,112680,112681],{"class":214},"error ",[204,112683,260],{"class":210},[204,112685,112253],{"class":214},[204,112687,745],{"class":210},[204,112689,112258],{"class":214},[204,112691,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716,112718,112720],{"class":206,"line":126},[204,112693,105956],{"class":214},[204,112695,405],{"class":263},[204,112697,4529],{"class":214},[204,112699,260],{"class":210},[204,112701,112275],{"class":214},[204,112703,105345],{"class":263},[204,112705,6605],{"class":210},[204,112707,112282],{"class":214},[204,112709,292],{"class":263},[204,112711,112287],{"class":214},[204,112713,745],{"class":210},[204,112715,102488],{"class":263},[204,112717,12522],{"class":214},[204,112719,102488],{"class":263},[204,112721,221],{"class":214},[204,112723,112724,112726,112728,112730,112732,112734,112736,112738,112740,112742,112744,112746,112748,112750,112752],{"class":206,"line":131},[204,112725,105956],{"class":214},[204,112727,431],{"class":263},[204,112729,4529],{"class":214},[204,112731,260],{"class":210},[204,112733,112275],{"class":214},[204,112735,105345],{"class":263},[204,112737,6605],{"class":210},[204,112739,112282],{"class":214},[204,112741,405],{"class":263},[204,112743,112287],{"class":214},[204,112745,745],{"class":210},[204,112747,102488],{"class":263},[204,112749,12522],{"class":214},[204,112751,102488],{"class":263},[204,112753,221],{"class":214},[19,112755,112756],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[49,112758,101793],{"id":101793},[196,112760,112761],{"className":30464,"code":112571,"language":30466,"meta":125,"style":125},[81,112762,112763],{"__ignoreMap":125},[204,112764,112765,112767,112769,112771,112773],{"class":206,"line":207},[204,112766,32033],{"class":210},[204,112768,111941],{"class":2049},[204,112770,111944],{"class":214},[204,112772,1386],{"class":263},[204,112774,111949],{"class":214},[19,112776,112777,112778,112780,112781,82625,112783,28471],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[81,112779,79896],{}," 是 site 的名字，比如 ",[81,112782,111621],{},[81,112784,112044],{},[196,112786,112788],{"className":30464,"code":112787,"language":30466,"meta":125,"style":125},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[81,112789,112790],{"__ignoreMap":125},[204,112791,112792,112794,112796],{"class":206,"line":207},[204,112793,103719],{"class":214},[204,112795,260],{"class":210},[204,112797,111958],{"class":214},[19,112799,112800],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[196,112802,112804],{"className":30464,"code":112803,"language":30466,"meta":125,"style":125},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[81,112805,112806,112818],{"__ignoreMap":125},[204,112807,112808,112810,112812,112814,112816],{"class":206,"line":207},[204,112809,1617],{"class":210},[204,112811,103534],{"class":214},[204,112813,1123],{"class":210},[204,112815,4179],{"class":263},[204,112817,3825],{"class":214},[204,112819,112820,112822,112824,112826,112828,112830,112832,112834,112836,112838],{"class":206,"line":126},[204,112821,103980],{"class":210},[204,112823,103520],{"class":263},[204,112825,215],{"class":214},[204,112827,267],{"class":210},[204,112829,111983],{"class":319},[204,112831,1109],{"class":263},[204,112833,79896],{"class":214},[204,112835,1159],{"class":263},[204,112837,464],{"class":319},[204,112839,221],{"class":214},[19,112841,112842,112843,112846,112847,112849],{},"如果 site 没找到，就主动报错。",[81,112844,112845],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[81,112848,79896],{}," 的值放进字符串里。",[196,112851,112853],{"className":30464,"code":112852,"language":30466,"meta":125,"style":125},"return data.site_xpos[site_id].copy()\n",[81,112854,112855],{"__ignoreMap":125},[204,112856,112857,112859],{"class":206,"line":207},[204,112858,17133],{"class":210},[204,112860,112000],{"class":214},[19,112862,112863,112864,112866,112867,112870],{},"返回这个 site 的世界坐标。",[81,112865,103765],{}," 里的每一行都是一个 site 的 ",[81,112868,112869],{},"(x, y, z)"," 坐标。",[196,112872,112874],{"className":30464,"code":112873,"language":30466,"meta":125,"style":125},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[81,112875,112876],{"__ignoreMap":125},[204,112877,112878,112880,112882],{"class":206,"line":207},[204,112879,32033],{"class":210},[204,112881,112015],{"class":2049},[204,112883,112018],{"class":214},[19,112885,112886],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[196,112888,112890],{"className":30464,"code":112889,"language":30466,"meta":125,"style":125},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[81,112891,112892,112904],{"__ignoreMap":125},[204,112893,112894,112896,112898,112900,112902],{"class":206,"line":207},[204,112895,111653],{"class":214},[204,112897,260],{"class":210},[204,112899,112028],{"class":214},[204,112901,111621],{"class":319},[204,112903,221],{"class":214},[204,112905,112906,112908,112910,112912,112914],{"class":206,"line":126},[204,112907,111663],{"class":214},[204,112909,260],{"class":210},[204,112911,112028],{"class":214},[204,112913,112044],{"class":319},[204,112915,221],{"class":214},[19,112917,112918],{},"分别读取末端点和目标点的世界坐标。",[196,112920,112921],{"className":30464,"code":112593,"language":30466,"meta":125,"style":125},[81,112922,112923],{"__ignoreMap":125},[204,112924,112925,112927],{"class":206,"line":207},[204,112926,17133],{"class":210},[204,112928,112053],{"class":214},[19,112930,112931],{},"把四部分拼成一个观测数组：",[196,112933,112936],{"className":112934,"code":112935,"language":5274,"meta":125},[5272],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[81,112937,112935],{"__ignoreMap":125},[196,112939,112941],{"className":30464,"code":112940,"language":30466,"meta":125,"style":125},"dist = np.linalg.norm(tip - target)\n",[81,112942,112943],{"__ignoreMap":125},[204,112944,112945,112947,112949,112951,112953],{"class":206,"line":207},[204,112946,111681],{"class":214},[204,112948,260],{"class":210},[204,112950,111686],{"class":214},[204,112952,745],{"class":210},[204,112954,111691],{"class":214},[19,112956,112957,112958,112961,112962,112965],{},"计算 tip 到 target 的距离。",[81,112959,112960],{},"tip - target"," 得到一个三维向量，",[81,112963,112964],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,112967,14720],{},[196,112969,112972],{"className":112970,"code":112971,"language":5274,"meta":125},[5272],"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",[81,112973,112971],{"__ignoreMap":125},[196,112975,112977],{"className":30464,"code":112976,"language":30466,"meta":125,"style":125},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[81,112978,112979],{"__ignoreMap":125},[204,112980,112981,112983,112985,112987,112989],{"class":206,"line":207},[204,112982,112628],{"class":214},[204,112984,260],{"class":210},[204,112986,112122],{"class":263},[204,112988,6605],{"class":210},[204,112990,112127],{"class":214},[19,112992,112993,112994,112997,112998,113001],{},"计算动作惩罚。",[81,112995,112996],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[81,112999,113000],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[196,113003,113005],{"className":30464,"code":113004,"language":30466,"meta":125,"style":125},"return float(-dist - control_cost)\n",[81,113006,113007],{"__ignoreMap":125},[204,113008,113009,113011,113013,113015,113017,113019,113021],{"class":206,"line":207},[204,113010,17133],{"class":210},[204,113012,109882],{"class":263},[204,113014,215],{"class":214},[204,113016,745],{"class":210},[204,113018,111681],{"class":214},[204,113020,745],{"class":210},[204,113022,112144],{"class":214},[19,113024,113025],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[196,113027,113028],{"className":30464,"code":110888,"language":30466,"meta":125,"style":125},[81,113029,113030],{"__ignoreMap":125},[204,113031,113032,113034,113036],{"class":206,"line":207},[204,113033,110895],{"class":214},[204,113035,260],{"class":210},[204,113037,104846],{"class":263},[19,113039,113040],{},"累计奖励变量，记录整个运行过程的总分。",[196,113042,113044],{"className":30464,"code":113043,"language":30466,"meta":125,"style":125},"for step in range(500):\n",[81,113045,113046],{"__ignoreMap":125},[204,113047,113048,113050,113052,113054,113056,113058,113060],{"class":206,"line":207},[204,113049,3111],{"class":210},[204,113051,31702],{"class":214},[204,113053,26129],{"class":210},[204,113055,32529],{"class":263},[204,113057,215],{"class":214},[204,113059,65160],{"class":263},[204,113061,30872],{"class":214},[19,113063,113064],{},"运行 500 个控制步。",[196,113066,113067],{"className":30464,"code":104628,"language":30466,"meta":125,"style":125},[81,113068,113069],{"__ignoreMap":125},[204,113070,113071],{"class":206,"line":207},[204,113072,104628],{"class":214},[19,113074,113075,113076,43,113078,113080],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[81,113077,103316],{},[81,113079,103319],{}," 是当前状态下的坐标。",[196,113082,113084],{"className":30464,"code":113083,"language":30466,"meta":125,"style":125},"error = target - tip\n",[81,113085,113086],{"__ignoreMap":125},[204,113087,113088,113090,113092,113094,113096],{"class":206,"line":207},[204,113089,112681],{"class":214},[204,113091,260],{"class":210},[204,113093,112253],{"class":214},[204,113095,745],{"class":210},[204,113097,112258],{"class":214},[19,113099,113100],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[196,113102,113104],{"className":30464,"code":113103,"language":30466,"meta":125,"style":125},"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",[81,113105,113106,113138],{"__ignoreMap":125},[204,113107,113108,113110,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132,113134,113136],{"class":206,"line":207},[204,113109,105956],{"class":214},[204,113111,405],{"class":263},[204,113113,4529],{"class":214},[204,113115,260],{"class":210},[204,113117,112275],{"class":214},[204,113119,105345],{"class":263},[204,113121,6605],{"class":210},[204,113123,112282],{"class":214},[204,113125,292],{"class":263},[204,113127,112287],{"class":214},[204,113129,745],{"class":210},[204,113131,102488],{"class":263},[204,113133,12522],{"class":214},[204,113135,102488],{"class":263},[204,113137,221],{"class":214},[204,113139,113140,113142,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164,113166,113168],{"class":206,"line":126},[204,113141,105956],{"class":214},[204,113143,431],{"class":263},[204,113145,4529],{"class":214},[204,113147,260],{"class":210},[204,113149,112275],{"class":214},[204,113151,105345],{"class":263},[204,113153,6605],{"class":210},[204,113155,112282],{"class":214},[204,113157,405],{"class":263},[204,113159,112287],{"class":214},[204,113161,745],{"class":210},[204,113163,102488],{"class":263},[204,113165,12522],{"class":214},[204,113167,102488],{"class":263},[204,113169,221],{"class":214},[19,113171,113172,113173,113176],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[81,113174,113175],{},"error -> ctrl -> step"," 的流程。",[196,113178,113179],{"className":30464,"code":104590,"language":30466,"meta":125,"style":125},[81,113180,113181],{"__ignoreMap":125},[204,113182,113183],{"class":206,"line":207},[204,113184,104590],{"class":214},[19,113186,113187],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[196,113189,113191],{"className":30464,"code":113190,"language":30466,"meta":125,"style":125},"obs = get_obs(model, data)\n",[81,113192,113193],{"__ignoreMap":125},[204,113194,113195,113197,113199],{"class":206,"line":207},[204,113196,110939],{"class":214},[204,113198,260],{"class":210},[204,113200,112376],{"class":214},[19,113202,113203,113204,113207],{},"读取最新观测。后面打印 ",[81,113205,113206],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113209,102401],{"id":102400},[19,113211,113212],{},"观测维度为:",[196,113214,113217],{"className":113215,"code":113216,"language":5274,"meta":125},[5272],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[81,113218,113216],{"__ignoreMap":125},[19,113220,113221],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113223,113224],{},"程序每 100 步打印：",[196,113226,113229],{"className":113227,"code":113228,"language":5274,"meta":125},[5272],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[81,113230,113228],{"__ignoreMap":125},[19,113232,113233,113234,113236],{},"如果控制有效，你应该看到最终 ",[81,113235,103316],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113238,102433],{"id":102432},[161,113240,113241,113244,113247,113253,113259,113266,113276],{},[71,113242,113243],{},"修改目标点位置。",[71,113245,113246],{},"重新运行，观察最终 tip 是否变化。",[71,113248,113249,113250,113252],{},"把 gravity 改成 ",[81,113251,102674],{},"，观察控制是否变差。",[71,113254,111266,113255,111270,113257,28471],{},[81,113256,102243],{},[81,113258,292],{},[71,113260,102496,113261,102499,113263,113265],{},[81,113262,110681],{},[81,113264,107392],{},"，观察机械臂是否更难移动。",[71,113267,102496,113268,82616,113270,102499,113272,113275],{},[81,113269,103319],{},[81,113271,104231],{},[81,113273,113274],{},"0.2 0 0.6","，观察 reward 和 final tip。",[71,113277,113278],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113280,102538],{"id":102537},[49,113282,113284],{"id":113283},"site-not-found",[81,113285,113286],{},"site not found",[19,113288,113289,113290,43,113293,28471],{},"检查 XML 中是否有 ",[81,113291,113292],{},"site name=\"tip\"",[81,113294,113295],{},"site name=\"target\"",[49,113297,113298],{"id":113298},"机械臂完全不动",[19,113300,102608],{},[161,113302,113303,113308,113311,113316],{},[71,113304,113305,113307],{},[81,113306,102243],{}," 是否为 2",[71,113309,113310],{},"actuator 是否引用正确 joint",[71,113312,113313,113315],{},[81,113314,101161],{}," 是否被赋值",[71,113317,113318,113319],{},"是否执行了 ",[81,113320,100771],{},[49,113322,113323],{"id":113323},"控制效果不好",[19,113325,113326],{},"正常。本章重点不是控制器最优，而是任务结构:",[196,113328,113331],{"className":113329,"code":113330,"language":5274,"meta":125},[5272],"obs → action → mj_step → reward → next_obs\n",[81,113332,113330],{"__ignoreMap":125},[49,113334,113336],{"id":113335},"tip-坐标不变化","tip 坐标不变化",[19,113338,102660],{},[161,113340,113341,113346,113354,113363],{},[71,113342,113343,113344,28471],{},"是否每步调用了 ",[81,113345,100771],{},[71,113347,113348,113349,43,113351,28471],{},"是否写入了 ",[81,113350,106211],{},[81,113352,113353],{},"data.ctrl[1]",[71,113355,113356,113357,426,113360,28471],{},"actuator 是否正确引用 ",[81,113358,113359],{},"joint1",[81,113361,113362],{},"joint2",[71,113364,113365],{},"控制输入是否太小。",[49,113367,113368],{"id":113368},"目标点不会动",[19,113370,113371],{},"本章的 target 是固定 site：",[196,113373,113375],{"className":53153,"code":113374,"language":53155,"meta":125,"style":125},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[81,113376,113377],{"__ignoreMap":125},[204,113378,113379,113381,113383,113385,113387,113389,113391,113393,113396],{"class":206,"line":207},[204,113380,1123],{"class":214},[204,113382,103295],{"class":51386},[204,113384,15007],{"class":2049},[204,113386,260],{"class":214},[204,113388,112044],{"class":319},[204,113390,101191],{"class":2049},[204,113392,260],{"class":214},[204,113394,113395],{"class":319},"\"0.5 0 0.4\"",[204,113397,113398],{"class":214}," ...\u002F>\n",[19,113400,113401,113402,113404],{},"它直接挂在 ",[81,113403,101926],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[49,113406,113407],{"id":113407},"机械臂不像真实机械臂",[19,113409,113410],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113412,102692],{"id":102691},[19,113414,113415],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113417,113418],{},"核心公式：",[196,113420,113423],{"className":113421,"code":113422,"language":5274,"meta":125},[5272],"distance = ||tip - target||\nreward = -distance - action_cost\n",[81,113424,113422],{"__ignoreMap":125},[19,113426,113427],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5213,113429,113430],{},"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":125,"searchDepth":126,"depth":126,"links":113432},[113433,113434,113435,113440,113444,113445,113446,113454],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":113436},[113437,113438,113439],{"id":111636,"depth":131,"text":111637},{"id":111712,"depth":131,"text":111712},{"id":111742,"depth":131,"text":111743},{"id":101337,"depth":126,"text":101338,"children":113441},[113442,113443],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":113447},[113448,113449,113450,113451,113452,113453],{"id":113283,"depth":131,"text":113286},{"id":113298,"depth":131,"text":113298},{"id":113323,"depth":131,"text":113323},{"id":113335,"depth":131,"text":113336},{"id":113368,"depth":131,"text":113368},{"id":113407,"depth":131,"text":113407},{"id":102691,"depth":126,"text":102692},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111440,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113461,"title":113462,"body":113463,"description":125,"extension":133,"meta":116925,"navigation":135,"path":116926,"seo":116927,"stem":116928,"__hash__":116929},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113464,"toc":116896},[113465,113468,113470,113473,113476,113501,113504,113510,113513,113519,113521,113523,113547,113549,113567,113569,113612,113614,113641,113643,113646,113698,113701,113707,113716,113719,113757,113760,113799,113802,113810,113817,113820,113826,113828,113882,113889,113934,113937,113941,113957,113967,113969,115230,115232,115244,115246,115257,115259,115262,115283,115286,115289,115322,115328,115331,115364,115367,115370,115411,115416,115430,115433,115446,115451,115474,115476,115491,115501,115516,115523,115543,115558,115576,115579,115596,115604,115620,115626,115658,115671,115703,115713,115748,115762,115808,115822,115864,115875,115888,115894,115927,115930,115957,115967,116007,116017,116034,116041,116059,116062,116103,116116,116131,116134,116157,116160,116172,116175,116194,116199,116220,116223,116238,116241,116275,116287,116302,116305,116330,116333,116352,116355,116387,116390,116414,116420,116450,116457,116470,116473,116475,116477,116483,116486,116489,116501,116504,116506,116560,116562,116566,116572,116581,116584,116591,116593,116616,116619,116623,116625,116643,116649,116651,116684,116687,116693,116697,116700,116720,116725,116729,116736,116756,116761,116765,116768,116788,116791,116877,116881,116884,116890,116893],[10,113466,113462],{"id":113467},"_8gymnasium-风格强化学习接口基础",[14,113469,100733],{"id":100732},[19,113471,113472],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113474,113475],{},"你将实现:",[196,113477,113479],{"className":30464,"code":113478,"language":30466,"meta":125,"style":125},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[81,113480,113481,113491],{"__ignoreMap":125},[204,113482,113483,113486,113488],{"class":206,"line":207},[204,113484,113485],{"class":214},"obs, info ",[204,113487,260],{"class":210},[204,113489,113490],{"class":214}," env.reset()\n",[204,113492,113493,113496,113498],{"class":206,"line":126},[204,113494,113495],{"class":214},"obs, reward, terminated, truncated, info ",[204,113497,260],{"class":210},[204,113499,113500],{"class":214}," env.step(action)\n",[19,113502,113503],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113505,113506,113507,113509],{},"前面章节的代码都是“脚本式”的：在 ",[81,113508,102380],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113511,113512],{},"可以先记住 Gymnasium 环境的核心交互：",[196,113514,113517],{"className":113515,"code":113516,"language":5274,"meta":125},[5272],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[81,113518,113516],{"__ignoreMap":125},[14,113520,100856],{"id":100855},[19,113522,100859],{},[196,113524,113525],{"className":23909,"code":104473,"language":23911,"meta":125,"style":125},[81,113526,113527],{"__ignoreMap":125},[204,113528,113529,113531,113533,113535,113537,113539,113541,113543,113545],{"class":206,"line":207},[204,113530,24663],{"class":2049},[204,113532,26401],{"class":319},[204,113534,23921],{"class":319},[204,113536,26486],{"class":263},[204,113538,104488],{"class":319},[204,113540,100884],{"class":319},[204,113542,102586],{"class":319},[204,113544,100900],{"class":319},[204,113546,104497],{"class":319},[19,113548,102904],{},[196,113550,113552],{"className":23909,"code":113551,"language":23911,"meta":125,"style":125},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[81,113553,113554],{"__ignoreMap":125},[204,113555,113556,113558,113560,113562,113564],{"class":206,"line":207},[204,113557,23918],{"class":2049},[204,113559,23921],{"class":319},[204,113561,101016],{"class":319},[204,113563,107796],{"class":319},[204,113565,113566],{"class":319}," gymnasium\n",[19,113568,102921],{},[196,113570,113572],{"className":23909,"code":113571,"language":23911,"meta":125,"style":125},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[81,113573,113574,113591,113600],{"__ignoreMap":125},[204,113575,113576,113578,113580,113582,113585,113587,113589],{"class":206,"line":207},[204,113577,30416],{"class":2049},[204,113579,29262],{"class":319},[204,113581,25202],{"class":263},[204,113583,113584],{"class":319}," mujoco-gym-api",[204,113586,101061],{"class":319},[204,113588,101064],{"class":263},[204,113590,101067],{"class":263},[204,113592,113593,113595,113597],{"class":206,"line":126},[204,113594,30416],{"class":2049},[204,113596,101074],{"class":319},[204,113598,113599],{"class":319}," mujoco-gym-api\n",[204,113601,113602,113604,113606,113608,113610],{"class":206,"line":131},[204,113603,23918],{"class":2049},[204,113605,23921],{"class":319},[204,113607,101016],{"class":319},[204,113609,107796],{"class":319},[204,113611,113566],{"class":319},[19,113613,101090],{},[161,113615,113616,113626,113629,113635],{},[71,113617,113618,113619,113622,113623,28471],{},"本章使用 ",[81,113620,113621],{},"gymnasium","，不是旧版 ",[81,113624,113625],{},"gym",[71,113627,113628],{},"Gymnasium API 与旧 Gym API 有差异。",[71,113630,113631,113632,28471],{},"旧 Gym 常见返回值是 4 个: ",[81,113633,113634],{},"obs, reward, done, info",[71,113636,113637,113638,28471],{},"Gymnasium 返回值是 5 个: ",[81,113639,113640],{},"obs, reward, terminated, truncated, info",[14,113642,101130],{"id":101129},[19,113644,113645],{},"强化学习环境接口包含:",[352,113647,113648,113657],{},[355,113649,113650],{},[358,113651,113652,113655],{},[361,113653,113654],{"align":23823},"方法",[361,113656,102781],{"align":23823},[398,113658,113659,113669,113679,113689],{},[358,113660,113661,113666],{},[403,113662,113663],{"align":23823},[81,113664,113665],{},"reset()",[403,113667,113668],{"align":23823},"重置环境",[358,113670,113671,113676],{},[403,113672,113673],{"align":23823},[81,113674,113675],{},"step(action)",[403,113677,113678],{"align":23823},"执行动作",[358,113680,113681,113686],{},[403,113682,113683],{"align":23823},[81,113684,113685],{},"observation_space",[403,113687,113688],{"align":23823},"观测空间",[358,113690,113691,113696],{},[403,113692,113693],{"align":23823},[81,113694,113695],{},"action_space",[403,113697,23741],{"align":23823},[19,113699,113700],{},"一个最小环境需要完成:",[196,113702,113705],{"className":113703,"code":113704,"language":5274,"meta":125},[5272],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[81,113706,113704],{"__ignoreMap":125},[49,113708,113710,43,113713,104723],{"id":113709},"terminated-和-truncated-的区别",[81,113711,113712],{},"terminated",[81,113714,113715],{},"truncated",[19,113717,113718],{},"Gymnasium 把“结束”拆成两个概念：",[352,113720,113721,113731],{},[355,113722,113723],{},[358,113724,113725,113727,113729],{},[361,113726,104659],{"align":23823},[361,113728,100786],{"align":23823},[361,113730,21274],{"align":23823},[398,113732,113733,113745],{},[358,113734,113735,113739,113742],{},[403,113736,113737],{"align":23823},[81,113738,113712],{},[403,113740,113741],{"align":23823},"任务自然结束",[403,113743,113744],{"align":23823},"机械臂到达目标、机器人摔倒",[358,113746,113747,113751,113754],{},[403,113748,113749],{"align":23823},[81,113750,113715],{},[403,113752,113753],{"align":23823},"因外部限制截断",[403,113755,113756],{"align":23823},"达到最大步数、时间限制",[19,113758,113759],{},"本章中：",[196,113761,113763],{"className":30464,"code":113762,"language":30466,"meta":125,"style":125},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[81,113764,113765,113780],{"__ignoreMap":125},[204,113766,113767,113770,113772,113775,113777],{"class":206,"line":207},[204,113768,113769],{"class":214},"terminated ",[204,113771,260],{"class":210},[204,113773,113774],{"class":214}," dist ",[204,113776,1123],{"class":210},[204,113778,113779],{"class":263}," 0.05\n",[204,113781,113782,113785,113787,113789,113792,113794,113796],{"class":206,"line":126},[204,113783,113784],{"class":214},"truncated ",[204,113786,260],{"class":210},[204,113788,38959],{"class":263},[204,113790,113791],{"class":214},".steps ",[204,113793,1796],{"class":210},[204,113795,38959],{"class":263},[204,113797,113798],{"class":214},".max_steps\n",[19,113800,113801],{},"也就是：",[161,113803,113804,113807],{},[71,113805,113806],{},"末端距离目标小于 0.05，任务成功结束。",[71,113808,113809],{},"步数超过上限，episode 被截断。",[49,113811,113813,43,113815],{"id":113812},"observation_space-和-action_space",[81,113814,113685],{},[81,113816,113695],{},[19,113818,113819],{},"这两个对象告诉算法：",[196,113821,113824],{"className":113822,"code":113823,"language":5274,"meta":125},[5272],"观测长什么样\n动作允许多大\n",[81,113825,113823],{"__ignoreMap":125},[19,113827,14720],{},[196,113829,113831],{"className":30464,"code":113830,"language":30466,"meta":125,"style":125},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[81,113832,113833],{"__ignoreMap":125},[204,113834,113835,113837,113840,113842,113845,113848,113851,113853,113855,113858,113860,113862,113864,113866,113868,113870,113872,113875,113877,113879],{"class":206,"line":207},[204,113836,30909],{"class":263},[204,113838,113839],{"class":214},".action_space ",[204,113841,260],{"class":210},[204,113843,113844],{"class":214}," spaces.Box(",[204,113846,113847],{"class":5303},"low",[204,113849,113850],{"class":210},"=-",[204,113852,102488],{"class":263},[204,113854,12522],{"class":214},[204,113856,113857],{"class":5303},"high",[204,113859,260],{"class":210},[204,113861,102488],{"class":263},[204,113863,12522],{"class":214},[204,113865,96049],{"class":5303},[204,113867,260],{"class":210},[204,113869,215],{"class":214},[204,113871,292],{"class":263},[204,113873,113874],{"class":214},",), ",[204,113876,93586],{"class":5303},[204,113878,260],{"class":210},[204,113880,113881],{"class":214},"np.float32)\n",[19,113883,113884,113885,113888],{},"表示动作是 2 维数组，每个值都在 ",[81,113886,113887],{},"[-1, 1]"," 范围内。",[196,113890,113892],{"className":30464,"code":113891,"language":30466,"meta":125,"style":125},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[81,113893,113894],{"__ignoreMap":125},[204,113895,113896,113898,113901,113903,113905,113907,113909,113912,113914,113916,113918,113920,113922,113924,113926,113928,113930,113932],{"class":206,"line":207},[204,113897,30909],{"class":263},[204,113899,113900],{"class":214},".observation_space ",[204,113902,260],{"class":210},[204,113904,113844],{"class":214},[204,113906,113847],{"class":5303},[204,113908,113850],{"class":210},[204,113910,113911],{"class":214},"np.inf, ",[204,113913,113857],{"class":5303},[204,113915,260],{"class":210},[204,113917,113911],{"class":214},[204,113919,96049],{"class":5303},[204,113921,260],{"class":210},[204,113923,215],{"class":214},[204,113925,659],{"class":263},[204,113927,113874],{"class":214},[204,113929,93586],{"class":5303},[204,113931,260],{"class":210},[204,113933,113881],{"class":214},[19,113935,113936],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[49,113938,113940],{"id":113939},"frame_skip-是什么","frame_skip 是什么",[196,113942,113944],{"className":30464,"code":113943,"language":30466,"meta":125,"style":125},"self.frame_skip = 5\n",[81,113945,113946],{"__ignoreMap":125},[204,113947,113948,113950,113953,113955],{"class":206,"line":207},[204,113949,30909],{"class":263},[204,113951,113952],{"class":214},".frame_skip ",[204,113954,260],{"class":210},[204,113956,54513],{"class":263},[19,113958,113959,113960,113963,113964,113966],{},"表示外部调用一次 ",[81,113961,113962],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[81,113965,101300],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,113968,101338],{"id":101337},[196,113970,113972],{"className":30464,"code":113971,"language":30466,"meta":125,"style":125},"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",[81,113973,113974,113986,113992,114002,114013,114017,114021,114029,114034,114038,114042,114046,114050,114054,114058,114062,114067,114071,114075,114079,114084,114088,114092,114096,114100,114104,114108,114112,114116,114120,114124,114128,114132,114136,114154,114169,114173,114186,114196,114211,114228,114232,114253,114272,114297,114311,114315,114325,114337,114347,114351,114393,114431,114435,114445,114461,114476,114495,114502,114506,114519,114534,114549,114562,114581,114597,114601,114642,114657,114672,114676,114715,114726,114739,114743,114753,114762,114766,114776,114791,114809,114813,114824,114841,114854,114858,114868,114872,114883,114894,114898,114912,114926,114942,114946,114959,114976,114991,114998,115002,115006,115018,115028,115046,115058,115070,115074,115082,115098,115107,115116,115124,115166,115179,115184,115188,115206,115210,115214,115226],{"__ignoreMap":125},[204,113975,113976,113978,113981,113983],{"class":206,"line":207},[204,113977,30478],{"class":210},[204,113979,113980],{"class":214}," gymnasium ",[204,113982,31469],{"class":210},[204,113984,113985],{"class":214}," gym\n",[204,113987,113988,113990],{"class":206,"line":126},[204,113989,30478],{"class":210},[204,113991,101386],{"class":214},[204,113993,113994,113996,113998,114000],{"class":206,"line":131},[204,113995,30478],{"class":210},[204,113997,31466],{"class":214},[204,113999,31469],{"class":210},[204,114001,31472],{"class":214},[204,114003,114004,114006,114008,114010],{"class":206,"line":1281},[204,114005,30823],{"class":210},[204,114007,113980],{"class":214},[204,114009,30478],{"class":210},[204,114011,114012],{"class":214}," spaces\n",[204,114014,114015],{"class":206,"line":1287},[204,114016,2486],{"emptyLinePlaceholder":135},[204,114018,114019],{"class":206,"line":1301},[204,114020,2486],{"emptyLinePlaceholder":135},[204,114022,114023,114025,114027],{"class":206,"line":1307},[204,114024,101399],{"class":263},[204,114026,13651],{"class":210},[204,114028,101404],{"class":319},[204,114030,114031],{"class":206,"line":1398},[204,114032,114033],{"class":319},"\u003Cmujoco model=\"gym_reacher\">\n",[204,114035,114036],{"class":206,"line":1404},[204,114037,111823],{"class":319},[204,114039,114040],{"class":206,"line":1416},[204,114041,2486],{"emptyLinePlaceholder":135},[204,114043,114044],{"class":206,"line":1698},[204,114045,101423],{"class":319},[204,114047,114048],{"class":206,"line":1703},[204,114049,111841],{"class":319},[204,114051,114052],{"class":206,"line":1709},[204,114053,2486],{"emptyLinePlaceholder":135},[204,114055,114056],{"class":206,"line":1714},[204,114057,111850],{"class":319},[204,114059,114060],{"class":206,"line":1728},[204,114061,111855],{"class":319},[204,114063,114064],{"class":206,"line":1733},[204,114065,114066],{"class":319},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[204,114068,114069],{"class":206,"line":1739},[204,114070,2486],{"emptyLinePlaceholder":135},[204,114072,114073],{"class":206,"line":1760},[204,114074,111869],{"class":319},[204,114076,114077],{"class":206,"line":1765},[204,114078,111874],{"class":319},[204,114080,114081],{"class":206,"line":1779},[204,114082,114083],{"class":319},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[204,114085,114086],{"class":206,"line":1784},[204,114087,111884],{"class":319},[204,114089,114090],{"class":206,"line":1813},[204,114091,106523],{"class":319},[204,114093,114094],{"class":206,"line":1818},[204,114095,101452],{"class":319},[204,114097,114098],{"class":206,"line":1835},[204,114099,101457],{"class":319},[204,114101,114102],{"class":206,"line":1840},[204,114103,2486],{"emptyLinePlaceholder":135},[204,114105,114106],{"class":206,"line":1845},[204,114107,106540],{"class":319},[204,114109,114110],{"class":206,"line":1850},[204,114111,111909],{"class":319},[204,114113,114114],{"class":206,"line":1864},[204,114115,111914],{"class":319},[204,114117,114118],{"class":206,"line":1869},[204,114119,106550],{"class":319},[204,114121,114122],{"class":206,"line":2663},[204,114123,101462],{"class":319},[204,114125,114126],{"class":206,"line":2677},[204,114127,95784],{"class":319},[204,114129,114130],{"class":206,"line":2685},[204,114131,2486],{"emptyLinePlaceholder":135},[204,114133,114134],{"class":206,"line":2690},[204,114135,2486],{"emptyLinePlaceholder":135},[204,114137,114138,114140,114143,114145,114147,114149,114152],{"class":206,"line":2696},[204,114139,14781],{"class":210},[204,114141,114142],{"class":2049}," ReacherEnv",[204,114144,215],{"class":214},[204,114146,113625],{"class":2049},[204,114148,771],{"class":214},[204,114150,114151],{"class":2049},"Env",[204,114153,30872],{"class":214},[204,114155,114156,114159,114161,114163,114166],{"class":206,"line":2702},[204,114157,114158],{"class":214},"    metadata ",[204,114160,260],{"class":210},[204,114162,4534],{"class":214},[204,114164,114165],{"class":319},"\"render_modes\"",[204,114167,114168],{"class":214},": []}\n",[204,114170,114171],{"class":206,"line":2707},[204,114172,2486],{"emptyLinePlaceholder":135},[204,114174,114175,114177,114179,114182,114184],{"class":206,"line":8035},[204,114176,30887],{"class":210},[204,114178,30890],{"class":263},[204,114180,114181],{"class":214},"(self) -> ",[204,114183,95772],{"class":263},[204,114185,3825],{"class":214},[204,114187,114188,114190,114192,114194],{"class":206,"line":8059},[204,114189,30903],{"class":263},[204,114191,17348],{"class":214},[204,114193,30915],{"class":263},[204,114195,2062],{"class":214},[204,114197,114198,114200,114203,114205,114207,114209],{"class":206,"line":8064},[204,114199,30931],{"class":263},[204,114201,114202],{"class":214},".model ",[204,114204,260],{"class":210},[204,114206,101497],{"class":214},[204,114208,101399],{"class":263},[204,114210,221],{"class":214},[204,114212,114213,114215,114218,114220,114223,114225],{"class":206,"line":8070},[204,114214,30931],{"class":263},[204,114216,114217],{"class":214},".data ",[204,114219,260],{"class":210},[204,114221,114222],{"class":214}," mujoco.MjData(",[204,114224,30909],{"class":263},[204,114226,114227],{"class":214},".model)\n",[204,114229,114230],{"class":206,"line":8097},[204,114231,2486],{"emptyLinePlaceholder":135},[204,114233,114234,114236,114239,114241,114244,114246,114249,114251],{"class":206,"line":8102},[204,114235,30931],{"class":263},[204,114237,114238],{"class":214},".tip_site_id ",[204,114240,260],{"class":210},[204,114242,114243],{"class":214}," mujoco.mj_name2id(",[204,114245,30909],{"class":263},[204,114247,114248],{"class":214},".model, mujoco.mjtObj.mjOBJ_SITE, ",[204,114250,111621],{"class":319},[204,114252,221],{"class":214},[204,114254,114255,114257,114260,114262,114264,114266,114268,114270],{"class":206,"line":8108},[204,114256,30931],{"class":263},[204,114258,114259],{"class":214},".target_site_id ",[204,114261,260],{"class":210},[204,114263,114243],{"class":214},[204,114265,30909],{"class":263},[204,114267,114248],{"class":214},[204,114269,112044],{"class":319},[204,114271,221],{"class":214},[204,114273,114274,114276,114278,114280,114282,114284,114287,114289,114291,114293,114295],{"class":206,"line":8120},[204,114275,2583],{"class":210},[204,114277,38959],{"class":263},[204,114279,114238],{"class":214},[204,114281,1123],{"class":210},[204,114283,4179],{"class":263},[204,114285,114286],{"class":210}," or",[204,114288,38959],{"class":263},[204,114290,114259],{"class":214},[204,114292,1123],{"class":210},[204,114294,4179],{"class":263},[204,114296,3825],{"class":214},[204,114298,114299,114302,114304,114306,114309],{"class":206,"line":8132},[204,114300,114301],{"class":210},"            raise",[204,114303,103520],{"class":263},[204,114305,215],{"class":214},[204,114307,114308],{"class":319},"\"required sites not found\"",[204,114310,221],{"class":214},[204,114312,114313],{"class":206,"line":8144},[204,114314,2486],{"emptyLinePlaceholder":135},[204,114316,114317,114319,114321,114323],{"class":206,"line":9803},[204,114318,30931],{"class":263},[204,114320,113952],{"class":214},[204,114322,260],{"class":210},[204,114324,54513],{"class":263},[204,114326,114327,114329,114332,114334],{"class":206,"line":9828},[204,114328,30931],{"class":263},[204,114330,114331],{"class":214},".max_steps ",[204,114333,260],{"class":210},[204,114335,114336],{"class":263}," 200\n",[204,114338,114339,114341,114343,114345],{"class":206,"line":9851},[204,114340,30931],{"class":263},[204,114342,113791],{"class":214},[204,114344,260],{"class":210},[204,114346,47419],{"class":263},[204,114348,114349],{"class":206,"line":9875},[204,114350,2486],{"emptyLinePlaceholder":135},[204,114352,114353,114355,114357,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391],{"class":206,"line":9880},[204,114354,30931],{"class":263},[204,114356,113839],{"class":214},[204,114358,260],{"class":210},[204,114360,113844],{"class":214},[204,114362,113847],{"class":5303},[204,114364,113850],{"class":210},[204,114366,102488],{"class":263},[204,114368,12522],{"class":214},[204,114370,113857],{"class":5303},[204,114372,260],{"class":210},[204,114374,102488],{"class":263},[204,114376,12522],{"class":214},[204,114378,96049],{"class":5303},[204,114380,260],{"class":210},[204,114382,215],{"class":214},[204,114384,292],{"class":263},[204,114386,113874],{"class":214},[204,114388,93586],{"class":5303},[204,114390,260],{"class":210},[204,114392,113881],{"class":214},[204,114394,114395,114397,114399,114401,114403,114405,114407,114409,114411,114413,114415,114417,114419,114421,114423,114425,114427,114429],{"class":206,"line":9885},[204,114396,30931],{"class":263},[204,114398,113900],{"class":214},[204,114400,260],{"class":210},[204,114402,113844],{"class":214},[204,114404,113847],{"class":5303},[204,114406,113850],{"class":210},[204,114408,113911],{"class":214},[204,114410,113857],{"class":5303},[204,114412,260],{"class":210},[204,114414,113911],{"class":214},[204,114416,96049],{"class":5303},[204,114418,260],{"class":210},[204,114420,215],{"class":214},[204,114422,659],{"class":263},[204,114424,113874],{"class":214},[204,114426,93586],{"class":5303},[204,114428,260],{"class":210},[204,114430,113881],{"class":214},[204,114432,114433],{"class":206,"line":9890},[204,114434,2486],{"emptyLinePlaceholder":135},[204,114436,114437,114439,114442],{"class":206,"line":9899},[204,114438,30887],{"class":210},[204,114440,114441],{"class":2049}," _get_obs",[204,114443,114444],{"class":214},"(self) -> np.ndarray:\n",[204,114446,114447,114449,114451,114453,114456,114458],{"class":206,"line":9904},[204,114448,112222],{"class":214},[204,114450,260],{"class":210},[204,114452,38959],{"class":263},[204,114454,114455],{"class":214},".data.site_xpos[",[204,114457,30909],{"class":263},[204,114459,114460],{"class":214},".tip_site_id].copy()\n",[204,114462,114463,114465,114467,114469,114471,114473],{"class":206,"line":9910},[204,114464,112235],{"class":214},[204,114466,260],{"class":210},[204,114468,38959],{"class":263},[204,114470,114455],{"class":214},[204,114472,30909],{"class":263},[204,114474,114475],{"class":214},".target_site_id].copy()\n",[204,114477,114478,114480,114482,114485,114487,114490,114492],{"class":206,"line":9931},[204,114479,110267],{"class":214},[204,114481,260],{"class":210},[204,114483,114484],{"class":214}," np.concatenate([",[204,114486,30909],{"class":263},[204,114488,114489],{"class":214},".data.qpos.copy(), ",[204,114491,30909],{"class":263},[204,114493,114494],{"class":214},".data.qvel.copy(), tip, target])\n",[204,114496,114497,114499],{"class":206,"line":9937},[204,114498,14839],{"class":210},[204,114500,114501],{"class":214}," obs.astype(np.float32)\n",[204,114503,114504],{"class":206,"line":9951},[204,114505,2486],{"emptyLinePlaceholder":135},[204,114507,114508,114510,114513,114515,114517],{"class":206,"line":9957},[204,114509,30887],{"class":210},[204,114511,114512],{"class":2049}," _get_reward",[204,114514,114181],{"class":214},[204,114516,254],{"class":263},[204,114518,3825],{"class":214},[204,114520,114521,114523,114525,114527,114529,114531],{"class":206,"line":9984},[204,114522,112222],{"class":214},[204,114524,260],{"class":210},[204,114526,38959],{"class":263},[204,114528,114455],{"class":214},[204,114530,30909],{"class":263},[204,114532,114533],{"class":214},".tip_site_id]\n",[204,114535,114536,114538,114540,114542,114544,114546],{"class":206,"line":9993},[204,114537,112235],{"class":214},[204,114539,260],{"class":210},[204,114541,38959],{"class":263},[204,114543,114455],{"class":214},[204,114545,30909],{"class":263},[204,114547,114548],{"class":214},".target_site_id]\n",[204,114550,114551,114554,114556,114558,114560],{"class":206,"line":9999},[204,114552,114553],{"class":214},"        dist ",[204,114555,260],{"class":210},[204,114557,111686],{"class":214},[204,114559,745],{"class":210},[204,114561,111691],{"class":214},[204,114563,114564,114567,114569,114571,114573,114576,114578],{"class":206,"line":10007},[204,114565,114566],{"class":214},"        control_cost ",[204,114568,260],{"class":210},[204,114570,112122],{"class":263},[204,114572,6605],{"class":210},[204,114574,114575],{"class":214}," np.sum(np.square(",[204,114577,30909],{"class":263},[204,114579,114580],{"class":214},".data.ctrl))\n",[204,114582,114583,114585,114587,114589,114591,114593,114595],{"class":206,"line":10012},[204,114584,14839],{"class":210},[204,114586,109882],{"class":263},[204,114588,215],{"class":214},[204,114590,745],{"class":210},[204,114592,111681],{"class":214},[204,114594,745],{"class":210},[204,114596,112144],{"class":214},[204,114598,114599],{"class":206,"line":16691},[204,114600,2486],{"emptyLinePlaceholder":135},[204,114602,114603,114605,114608,114611,114613,114616,114618,114620,114622,114624,114626,114629,114632,114634,114636,114638,114640],{"class":206,"line":16697},[204,114604,30887],{"class":210},[204,114606,114607],{"class":2049}," reset",[204,114609,114610],{"class":214},"(self, ",[204,114612,668],{"class":210},[204,114614,114615],{"class":214},", seed: ",[204,114617,218],{"class":263},[204,114619,25196],{"class":210},[204,114621,39019],{"class":263},[204,114623,13651],{"class":210},[204,114625,39019],{"class":263},[204,114627,114628],{"class":214},", options: ",[204,114630,114631],{"class":263},"dict",[204,114633,25196],{"class":210},[204,114635,39019],{"class":263},[204,114637,13651],{"class":210},[204,114639,39019],{"class":263},[204,114641,30872],{"class":214},[204,114643,114644,114646,114649,114652,114654],{"class":206,"line":16720},[204,114645,30903],{"class":263},[204,114647,114648],{"class":214},"().reset(",[204,114650,114651],{"class":5303},"seed",[204,114653,260],{"class":210},[204,114655,114656],{"class":214},"seed)\n",[204,114658,114659,114662,114664,114667,114669],{"class":206,"line":16726},[204,114660,114661],{"class":214},"        mujoco.mj_resetData(",[204,114663,30909],{"class":263},[204,114665,114666],{"class":214},".model, ",[204,114668,30909],{"class":263},[204,114670,114671],{"class":214},".data)\n",[204,114673,114674],{"class":206,"line":16749},[204,114675,2486],{"emptyLinePlaceholder":135},[204,114677,114678,114680,114683,114685,114687,114690,114692,114694,114696,114698,114700,114702,114704,114706,114708,114710,114712],{"class":206,"line":16763},[204,114679,30931],{"class":263},[204,114681,114682],{"class":214},".data.qpos[:] ",[204,114684,260],{"class":210},[204,114686,38959],{"class":263},[204,114688,114689],{"class":214},".np_random.uniform(",[204,114691,113847],{"class":5303},[204,114693,113850],{"class":210},[204,114695,86296],{"class":263},[204,114697,12522],{"class":214},[204,114699,113857],{"class":5303},[204,114701,260],{"class":210},[204,114703,86296],{"class":263},[204,114705,12522],{"class":214},[204,114707,31582],{"class":5303},[204,114709,260],{"class":210},[204,114711,30909],{"class":263},[204,114713,114714],{"class":214},".model.nq)\n",[204,114716,114717,114719,114722,114724],{"class":206,"line":16783},[204,114718,30931],{"class":263},[204,114720,114721],{"class":214},".data.qvel[:] ",[204,114723,260],{"class":210},[204,114725,104846],{"class":263},[204,114727,114728,114731,114733,114735,114737],{"class":206,"line":16789},[204,114729,114730],{"class":214},"        mujoco.mj_forward(",[204,114732,30909],{"class":263},[204,114734,114666],{"class":214},[204,114736,30909],{"class":263},[204,114738,114671],{"class":214},[204,114740,114741],{"class":206,"line":16800},[204,114742,2486],{"emptyLinePlaceholder":135},[204,114744,114745,114747,114749,114751],{"class":206,"line":16823},[204,114746,30931],{"class":263},[204,114748,113791],{"class":214},[204,114750,260],{"class":210},[204,114752,47419],{"class":263},[204,114754,114755,114757,114759],{"class":206,"line":16845},[204,114756,14839],{"class":210},[204,114758,38959],{"class":263},[204,114760,114761],{"class":214},"._get_obs(), {}\n",[204,114763,114764],{"class":206,"line":16850},[204,114765,2486],{"emptyLinePlaceholder":135},[204,114767,114768,114770,114773],{"class":206,"line":16856},[204,114769,30887],{"class":210},[204,114771,114772],{"class":2049}," step",[204,114774,114775],{"class":214},"(self, action):\n",[204,114777,114778,114780,114782,114785,114787,114789],{"class":206,"line":16870},[204,114779,110307],{"class":214},[204,114781,260],{"class":210},[204,114783,114784],{"class":214}," np.asarray(action, ",[204,114786,93586],{"class":5303},[204,114788,260],{"class":210},[204,114790,113881],{"class":214},[204,114792,114793,114795,114797,114799,114801,114804,114806],{"class":206,"line":16883},[204,114794,110307],{"class":214},[204,114796,260],{"class":210},[204,114798,107532],{"class":214},[204,114800,30909],{"class":263},[204,114802,114803],{"class":214},".action_space.low, ",[204,114805,30909],{"class":263},[204,114807,114808],{"class":214},".action_space.high)\n",[204,114810,114811],{"class":206,"line":16888},[204,114812,2486],{"emptyLinePlaceholder":135},[204,114814,114815,114817,114820,114822],{"class":206,"line":16902},[204,114816,30931],{"class":263},[204,114818,114819],{"class":214},".data.ctrl[:] ",[204,114821,260],{"class":210},[204,114823,107555],{"class":214},[204,114825,114826,114828,114830,114832,114834,114836,114838],{"class":206,"line":16907},[204,114827,3489],{"class":210},[204,114829,101586],{"class":214},[204,114831,26129],{"class":210},[204,114833,32529],{"class":263},[204,114835,215],{"class":214},[204,114837,30909],{"class":263},[204,114839,114840],{"class":214},".frame_skip):\n",[204,114842,114843,114846,114848,114850,114852],{"class":206,"line":16913},[204,114844,114845],{"class":214},"            mujoco.mj_step(",[204,114847,30909],{"class":263},[204,114849,114666],{"class":214},[204,114851,30909],{"class":263},[204,114853,114671],{"class":214},[204,114855,114856],{"class":206,"line":16918},[204,114857,2486],{"emptyLinePlaceholder":135},[204,114859,114860,114862,114864,114866],{"class":206,"line":16932},[204,114861,30931],{"class":263},[204,114863,113791],{"class":214},[204,114865,9564],{"class":210},[204,114867,55785],{"class":263},[204,114869,114870],{"class":206,"line":16937},[204,114871,2486],{"emptyLinePlaceholder":135},[204,114873,114874,114876,114878,114880],{"class":206,"line":16942},[204,114875,110267],{"class":214},[204,114877,260],{"class":210},[204,114879,38959],{"class":263},[204,114881,114882],{"class":214},"._get_obs()\n",[204,114884,114885,114887,114889,114891],{"class":206,"line":16956},[204,114886,110372],{"class":214},[204,114888,260],{"class":210},[204,114890,38959],{"class":263},[204,114892,114893],{"class":214},"._get_reward()\n",[204,114895,114896],{"class":206,"line":16968},[204,114897,2486],{"emptyLinePlaceholder":135},[204,114899,114900,114902,114904,114906,114908,114910],{"class":206,"line":16973},[204,114901,112222],{"class":214},[204,114903,260],{"class":210},[204,114905,38959],{"class":263},[204,114907,114455],{"class":214},[204,114909,30909],{"class":263},[204,114911,114533],{"class":214},[204,114913,114914,114916,114918,114920,114922,114924],{"class":206,"line":16986},[204,114915,112235],{"class":214},[204,114917,260],{"class":210},[204,114919,38959],{"class":263},[204,114921,114455],{"class":214},[204,114923,30909],{"class":263},[204,114925,114548],{"class":214},[204,114927,114928,114930,114932,114934,114937,114939],{"class":206,"line":16991},[204,114929,114553],{"class":214},[204,114931,260],{"class":210},[204,114933,109882],{"class":263},[204,114935,114936],{"class":214},"(np.linalg.norm(tip ",[204,114938,745],{"class":210},[204,114940,114941],{"class":214}," target))\n",[204,114943,114944],{"class":206,"line":16996},[204,114945,2486],{"emptyLinePlaceholder":135},[204,114947,114948,114951,114953,114955,114957],{"class":206,"line":17001},[204,114949,114950],{"class":214},"        terminated ",[204,114952,260],{"class":210},[204,114954,113774],{"class":214},[204,114956,1123],{"class":210},[204,114958,113779],{"class":263},[204,114960,114961,114964,114966,114968,114970,114972,114974],{"class":206,"line":17014},[204,114962,114963],{"class":214},"        truncated ",[204,114965,260],{"class":210},[204,114967,38959],{"class":263},[204,114969,113791],{"class":214},[204,114971,1796],{"class":210},[204,114973,38959],{"class":263},[204,114975,113798],{"class":214},[204,114977,114978,114981,114983,114985,114988],{"class":206,"line":17019},[204,114979,114980],{"class":214},"        info ",[204,114982,260],{"class":210},[204,114984,4534],{"class":214},[204,114986,114987],{"class":319},"\"distance\"",[204,114989,114990],{"class":214},": dist}\n",[204,114992,114993,114995],{"class":206,"line":32719},[204,114994,14839],{"class":210},[204,114996,114997],{"class":214}," obs, reward, terminated, truncated, info\n",[204,114999,115000],{"class":206,"line":32725},[204,115001,2486],{"emptyLinePlaceholder":135},[204,115003,115004],{"class":206,"line":32731},[204,115005,2486],{"emptyLinePlaceholder":135},[204,115007,115008,115010,115012,115014,115016],{"class":206,"line":32737},[204,115009,32033],{"class":210},[204,115011,2059],{"class":2049},[204,115013,101483],{"class":214},[204,115015,95772],{"class":263},[204,115017,3825],{"class":214},[204,115019,115020,115023,115025],{"class":206,"line":32743},[204,115021,115022],{"class":214},"    env ",[204,115024,260],{"class":210},[204,115026,115027],{"class":214}," ReacherEnv()\n",[204,115029,115030,115033,115035,115038,115040,115042,115044],{"class":206,"line":32754},[204,115031,115032],{"class":214},"    obs, info ",[204,115034,260],{"class":210},[204,115036,115037],{"class":214}," env.reset(",[204,115039,114651],{"class":5303},[204,115041,260],{"class":210},[204,115043,405],{"class":263},[204,115045,221],{"class":214},[204,115047,115048,115050,115052,115055],{"class":206,"line":32760},[204,115049,31385],{"class":263},[204,115051,215],{"class":214},[204,115053,115054],{"class":319},"\"initial obs shape:\"",[204,115056,115057],{"class":214},", obs.shape)\n",[204,115059,115060,115062,115064,115067],{"class":206,"line":32780},[204,115061,31385],{"class":263},[204,115063,215],{"class":214},[204,115065,115066],{"class":319},"\"initial info:\"",[204,115068,115069],{"class":214},", info)\n",[204,115071,115072],{"class":206,"line":32786},[204,115073,2486],{"emptyLinePlaceholder":135},[204,115075,115076,115078,115080],{"class":206,"line":32797},[204,115077,110238],{"class":214},[204,115079,260],{"class":210},[204,115081,104846],{"class":263},[204,115083,115084,115086,115088,115090,115092,115094,115096],{"class":206,"line":32803},[204,115085,3287],{"class":210},[204,115087,31702],{"class":214},[204,115089,26129],{"class":210},[204,115091,32529],{"class":263},[204,115093,215],{"class":214},[204,115095,913],{"class":263},[204,115097,30872],{"class":214},[204,115099,115100,115102,115104],{"class":206,"line":32809},[204,115101,110307],{"class":214},[204,115103,260],{"class":210},[204,115105,115106],{"class":214}," env.action_space.sample()\n",[204,115108,115109,115112,115114],{"class":206,"line":32815},[204,115110,115111],{"class":214},"        obs, reward, terminated, truncated, info ",[204,115113,260],{"class":210},[204,115115,113500],{"class":214},[204,115117,115118,115120,115122],{"class":206,"line":32821},[204,115119,110382],{"class":214},[204,115121,9564],{"class":210},[204,115123,110387],{"class":214},[204,115125,115126,115128,115130,115132,115134,115137,115139,115141,115144,115146,115148,115151,115153,115155,115158,115160,115162,115164],{"class":206,"line":32827},[204,115127,32537],{"class":263},[204,115129,215],{"class":214},[204,115131,110416],{"class":319},[204,115133,110419],{"class":214},[204,115135,115136],{"class":319},"\"reward:\"",[204,115138,12522],{"class":214},[204,115140,32104],{"class":263},[204,115142,115143],{"class":214},"(reward, ",[204,115145,286],{"class":263},[204,115147,110430],{"class":214},[204,115149,115150],{"class":319},"\"distance:\"",[204,115152,12522],{"class":214},[204,115154,32104],{"class":263},[204,115156,115157],{"class":214},"(info[",[204,115159,114987],{"class":319},[204,115161,112287],{"class":214},[204,115163,286],{"class":263},[204,115165,30583],{"class":214},[204,115167,115168,115170,115173,115176],{"class":206,"line":32833},[204,115169,2583],{"class":210},[204,115171,115172],{"class":214}," terminated ",[204,115174,115175],{"class":210},"or",[204,115177,115178],{"class":214}," truncated:\n",[204,115180,115181],{"class":206,"line":32839},[204,115182,115183],{"class":210},"            break\n",[204,115185,115186],{"class":206,"line":32859},[204,115187,2486],{"emptyLinePlaceholder":135},[204,115189,115190,115192,115194,115196,115198,115200,115202,115204],{"class":206,"line":32865},[204,115191,31385],{"class":263},[204,115193,215],{"class":214},[204,115195,110461],{"class":319},[204,115197,12522],{"class":214},[204,115199,32104],{"class":263},[204,115201,110468],{"class":214},[204,115203,286],{"class":263},[204,115205,30583],{"class":214},[204,115207,115208],{"class":206,"line":32881},[204,115209,2486],{"emptyLinePlaceholder":135},[204,115211,115212],{"class":206,"line":32887},[204,115213,2486],{"emptyLinePlaceholder":135},[204,115215,115216,115218,115220,115222,115224],{"class":206,"line":32901},[204,115217,1617],{"class":210},[204,115219,31306],{"class":263},[204,115221,101644],{"class":210},[204,115223,101647],{"class":319},[204,115225,3825],{"class":214},[204,115227,115228],{"class":206,"line":32907},[204,115229,101654],{"class":214},[19,115231,103655],{},[196,115233,115235],{"className":23909,"code":115234,"language":23911,"meta":125,"style":125},"touch ch8_gym_env.py\n",[81,115236,115237],{"__ignoreMap":125},[204,115238,115239,115241],{"class":206,"line":207},[204,115240,101368],{"class":2049},[204,115242,115243],{"class":319}," ch8_gym_env.py\n",[19,115245,110529],{},[196,115247,115249],{"className":23909,"code":115248,"language":23911,"meta":125,"style":125},"python ch8_gym_env.py\n",[81,115250,115251],{"__ignoreMap":125},[204,115252,115253,115255],{"class":206,"line":207},[204,115254,30466],{"class":2049},[204,115256,115243],{"class":319},[49,115258,101657],{"id":101657},[19,115260,115261],{},"继承 Gymnasium 环境：",[196,115263,115265],{"className":30464,"code":115264,"language":30466,"meta":125,"style":125},"class ReacherEnv(gym.Env):\n",[81,115266,115267],{"__ignoreMap":125},[204,115268,115269,115271,115273,115275,115277,115279,115281],{"class":206,"line":207},[204,115270,14781],{"class":210},[204,115272,114142],{"class":2049},[204,115274,215],{"class":214},[204,115276,113625],{"class":2049},[204,115278,771],{"class":214},[204,115280,114151],{"class":2049},[204,115282,30872],{"class":214},[19,115284,115285],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115287,115288],{},"初始化模型：",[196,115290,115292],{"className":30464,"code":115291,"language":30466,"meta":125,"style":125},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[81,115293,115294,115308],{"__ignoreMap":125},[204,115295,115296,115298,115300,115302,115304,115306],{"class":206,"line":207},[204,115297,30909],{"class":263},[204,115299,114202],{"class":214},[204,115301,260],{"class":210},[204,115303,101497],{"class":214},[204,115305,101399],{"class":263},[204,115307,221],{"class":214},[204,115309,115310,115312,115314,115316,115318,115320],{"class":206,"line":126},[204,115311,30909],{"class":263},[204,115313,114217],{"class":214},[204,115315,260],{"class":210},[204,115317,114222],{"class":214},[204,115319,30909],{"class":263},[204,115321,114227],{"class":214},[19,115323,115324,115325,115327],{},"这和前面章节一样，只是现在放到了类的 ",[81,115326,30915],{}," 里。",[19,115329,115330],{},"缓存 site ID：",[196,115332,115334],{"className":30464,"code":115333,"language":30466,"meta":125,"style":125},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[81,115335,115336,115350],{"__ignoreMap":125},[204,115337,115338,115340,115342,115344,115346,115348],{"class":206,"line":207},[204,115339,30909],{"class":263},[204,115341,114238],{"class":214},[204,115343,260],{"class":210},[204,115345,114243],{"class":214},[204,115347,89640],{"class":263},[204,115349,221],{"class":214},[204,115351,115352,115354,115356,115358,115360,115362],{"class":206,"line":126},[204,115353,30909],{"class":263},[204,115355,114259],{"class":214},[204,115357,260],{"class":210},[204,115359,114243],{"class":214},[204,115361,89640],{"class":263},[204,115363,221],{"class":214},[19,115365,115366],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115368,115369],{},"reset：",[196,115371,115373],{"className":30464,"code":115372,"language":30466,"meta":125,"style":125},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[81,115374,115375],{"__ignoreMap":125},[204,115376,115377,115379,115381,115383,115385,115387,115389,115391,115393,115395,115397,115399,115401,115403,115405,115407,115409],{"class":206,"line":207},[204,115378,32033],{"class":210},[204,115380,114607],{"class":2049},[204,115382,114610],{"class":214},[204,115384,668],{"class":210},[204,115386,114615],{"class":214},[204,115388,218],{"class":263},[204,115390,25196],{"class":210},[204,115392,39019],{"class":263},[204,115394,13651],{"class":210},[204,115396,39019],{"class":263},[204,115398,114628],{"class":214},[204,115400,114631],{"class":263},[204,115402,25196],{"class":210},[204,115404,39019],{"class":263},[204,115406,13651],{"class":210},[204,115408,39019],{"class":263},[204,115410,30872],{"class":214},[19,115412,115413,115415],{},[81,115414,70142],{}," 做四件事：",[161,115417,115418,115421,115424,115427],{},[71,115419,115420],{},"设置随机种子。",[71,115422,115423],{},"重置 MuJoCo data。",[71,115425,115426],{},"随机初始化关节角。",[71,115428,115429],{},"返回初始观测和 info。",[19,115431,115432],{},"step：",[196,115434,115436],{"className":30464,"code":115435,"language":30466,"meta":125,"style":125},"def step(self, action):\n",[81,115437,115438],{"__ignoreMap":125},[204,115439,115440,115442,115444],{"class":206,"line":207},[204,115441,32033],{"class":210},[204,115443,114772],{"class":2049},[204,115445,114775],{"class":214},[19,115447,115448,115450],{},[81,115449,107219],{}," 做六件事：",[161,115452,115453,115456,115462,115465,115468,115471],{},[71,115454,115455],{},"检查并裁剪 action。",[71,115457,115458,115459,28471],{},"写入 ",[81,115460,115461],{},"self.data.ctrl",[71,115463,115464],{},"连续推进若干个 MuJoCo 物理步。",[71,115466,115467],{},"计算新观测。",[71,115469,115470],{},"计算奖励和结束条件。",[71,115472,115473],{},"返回 Gymnasium 标准五元组。",[49,115475,101793],{"id":101793},[196,115477,115479],{"className":30464,"code":115478,"language":30466,"meta":125,"style":125},"import gymnasium as gym\n",[81,115480,115481],{"__ignoreMap":125},[204,115482,115483,115485,115487,115489],{"class":206,"line":207},[204,115484,30478],{"class":210},[204,115486,113980],{"class":214},[204,115488,31469],{"class":210},[204,115490,113985],{"class":214},[19,115492,115493,115494,115496,115497,115500],{},"导入 Gymnasium，并起别名 ",[81,115495,113625],{},"。后面写 ",[81,115498,115499],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[196,115502,115504],{"className":30464,"code":115503,"language":30466,"meta":125,"style":125},"from gymnasium import spaces\n",[81,115505,115506],{"__ignoreMap":125},[204,115507,115508,115510,115512,115514],{"class":206,"line":207},[204,115509,30823],{"class":210},[204,115511,113980],{"class":214},[204,115513,30478],{"class":210},[204,115515,114012],{"class":214},[19,115517,115518,115519,115522],{},"导入空间定义工具。",[81,115520,115521],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[196,115524,115525],{"className":30464,"code":115264,"language":30466,"meta":125,"style":125},[81,115526,115527],{"__ignoreMap":125},[204,115528,115529,115531,115533,115535,115537,115539,115541],{"class":206,"line":207},[204,115530,14781],{"class":210},[204,115532,114142],{"class":2049},[204,115534,215],{"class":214},[204,115536,113625],{"class":2049},[204,115538,771],{"class":214},[204,115540,114151],{"class":2049},[204,115542,30872],{"class":214},[19,115544,115545,115546,115549,115550,115552,115553,43,115555,115557],{},"定义一个类，名字叫 ",[81,115547,115548],{},"ReacherEnv","。括号里的 ",[81,115551,115499],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[81,115554,70142],{},[81,115556,107219],{}," 这两个核心方法。",[196,115559,115561],{"className":30464,"code":115560,"language":30466,"meta":125,"style":125},"metadata = {\"render_modes\": []}\n",[81,115562,115563],{"__ignoreMap":125},[204,115564,115565,115568,115570,115572,115574],{"class":206,"line":207},[204,115566,115567],{"class":214},"metadata ",[204,115569,260],{"class":210},[204,115571,4534],{"class":214},[204,115573,114165],{"class":319},[204,115575,114168],{"class":214},[19,115577,115578],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[196,115580,115582],{"className":30464,"code":115581,"language":30466,"meta":125,"style":125},"def __init__(self) -> None:\n",[81,115583,115584],{"__ignoreMap":125},[204,115585,115586,115588,115590,115592,115594],{"class":206,"line":207},[204,115587,32033],{"class":210},[204,115589,30890],{"class":263},[204,115591,114181],{"class":214},[204,115593,95772],{"class":263},[204,115595,3825],{"class":214},[19,115597,115598,115600,115601,28471],{},[81,115599,30915],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[81,115602,115603],{},"env = ReacherEnv()",[196,115605,115607],{"className":30464,"code":115606,"language":30466,"meta":125,"style":125},"super().__init__()\n",[81,115608,115609],{"__ignoreMap":125},[204,115610,115611,115614,115616,115618],{"class":206,"line":207},[204,115612,115613],{"class":263},"super",[204,115615,17348],{"class":214},[204,115617,30915],{"class":263},[204,115619,2062],{"class":214},[19,115621,115622,115623,115625],{},"调用父类 ",[81,115624,115499],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[196,115627,115628],{"className":30464,"code":115291,"language":30466,"meta":125,"style":125},[81,115629,115630,115644],{"__ignoreMap":125},[204,115631,115632,115634,115636,115638,115640,115642],{"class":206,"line":207},[204,115633,30909],{"class":263},[204,115635,114202],{"class":214},[204,115637,260],{"class":210},[204,115639,101497],{"class":214},[204,115641,101399],{"class":263},[204,115643,221],{"class":214},[204,115645,115646,115648,115650,115652,115654,115656],{"class":206,"line":126},[204,115647,30909],{"class":263},[204,115649,114217],{"class":214},[204,115651,260],{"class":210},[204,115653,114222],{"class":214},[204,115655,30909],{"class":263},[204,115657,114227],{"class":214},[19,115659,115660,115661,115663,115664,43,115667,115670],{},"把 MuJoCo 模型和状态保存到 ",[81,115662,30909],{}," 上。",[81,115665,115666],{},"self.model",[81,115668,115669],{},"self.data"," 表示这个环境对象自己的模型和状态。",[196,115672,115673],{"className":30464,"code":115333,"language":30466,"meta":125,"style":125},[81,115674,115675,115689],{"__ignoreMap":125},[204,115676,115677,115679,115681,115683,115685,115687],{"class":206,"line":207},[204,115678,30909],{"class":263},[204,115680,114238],{"class":214},[204,115682,260],{"class":210},[204,115684,114243],{"class":214},[204,115686,89640],{"class":263},[204,115688,221],{"class":214},[204,115690,115691,115693,115695,115697,115699,115701],{"class":206,"line":126},[204,115692,30909],{"class":263},[204,115694,114259],{"class":214},[204,115696,260],{"class":210},[204,115698,114243],{"class":214},[204,115700,89640],{"class":263},[204,115702,221],{"class":214},[19,115704,115705,115706,43,115709,115712],{},"提前查好 tip 和 target 的 site ID。这样 ",[81,115707,115708],{},"_get_obs",[81,115710,115711],{},"_get_reward"," 里就不用每次按名字查找。",[196,115714,115716],{"className":30464,"code":115715,"language":30466,"meta":125,"style":125},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[81,115717,115718,115728,115738],{"__ignoreMap":125},[204,115719,115720,115722,115724,115726],{"class":206,"line":207},[204,115721,30909],{"class":263},[204,115723,113952],{"class":214},[204,115725,260],{"class":210},[204,115727,54513],{"class":263},[204,115729,115730,115732,115734,115736],{"class":206,"line":126},[204,115731,30909],{"class":263},[204,115733,114331],{"class":214},[204,115735,260],{"class":210},[204,115737,114336],{"class":263},[204,115739,115740,115742,115744,115746],{"class":206,"line":131},[204,115741,30909],{"class":263},[204,115743,113791],{"class":214},[204,115745,260],{"class":210},[204,115747,47419],{"class":263},[19,115749,115750,115753,115754,115757,115758,115761],{},[81,115751,115752],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[81,115755,115756],{},"max_steps"," 是一个 episode 最多运行多少步。",[81,115759,115760],{},"steps"," 记录当前 episode 已经走了多少步。",[196,115763,115764],{"className":30464,"code":113830,"language":30466,"meta":125,"style":125},[81,115765,115766],{"__ignoreMap":125},[204,115767,115768,115770,115772,115774,115776,115778,115780,115782,115784,115786,115788,115790,115792,115794,115796,115798,115800,115802,115804,115806],{"class":206,"line":207},[204,115769,30909],{"class":263},[204,115771,113839],{"class":214},[204,115773,260],{"class":210},[204,115775,113844],{"class":214},[204,115777,113847],{"class":5303},[204,115779,113850],{"class":210},[204,115781,102488],{"class":263},[204,115783,12522],{"class":214},[204,115785,113857],{"class":5303},[204,115787,260],{"class":210},[204,115789,102488],{"class":263},[204,115791,12522],{"class":214},[204,115793,96049],{"class":5303},[204,115795,260],{"class":210},[204,115797,215],{"class":214},[204,115799,292],{"class":263},[204,115801,113874],{"class":214},[204,115803,93586],{"class":5303},[204,115805,260],{"class":210},[204,115807,113881],{"class":214},[19,115809,115810,115811,115814,115815,43,115818,115821],{},"定义动作空间。",[81,115812,115813],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[81,115816,115817],{},"low=-1.0",[81,115819,115820],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[196,115823,115824],{"className":30464,"code":113891,"language":30466,"meta":125,"style":125},[81,115825,115826],{"__ignoreMap":125},[204,115827,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848,115850,115852,115854,115856,115858,115860,115862],{"class":206,"line":207},[204,115829,30909],{"class":263},[204,115831,113900],{"class":214},[204,115833,260],{"class":210},[204,115835,113844],{"class":214},[204,115837,113847],{"class":5303},[204,115839,113850],{"class":210},[204,115841,113911],{"class":214},[204,115843,113857],{"class":5303},[204,115845,260],{"class":210},[204,115847,113911],{"class":214},[204,115849,96049],{"class":5303},[204,115851,260],{"class":210},[204,115853,215],{"class":214},[204,115855,659],{"class":263},[204,115857,113874],{"class":214},[204,115859,93586],{"class":5303},[204,115861,260],{"class":210},[204,115863,113881],{"class":214},[19,115865,115866,115867,115870,115871,115874],{},"定义观测空间。",[81,115868,115869],{},"shape=(10,)"," 表示观测是 10 个数。",[81,115872,115873],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[196,115876,115878],{"className":30464,"code":115877,"language":30466,"meta":125,"style":125},"def _get_obs(self) -> np.ndarray:\n",[81,115879,115880],{"__ignoreMap":125},[204,115881,115882,115884,115886],{"class":206,"line":207},[204,115883,32033],{"class":210},[204,115885,114441],{"class":2049},[204,115887,114444],{"class":214},[19,115889,115890,115891,115893],{},"定义内部函数，用来生成观测。函数名前面的 ",[81,115892,1205],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[196,115895,115897],{"className":30464,"code":115896,"language":30466,"meta":125,"style":125},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[81,115898,115899,115913],{"__ignoreMap":125},[204,115900,115901,115903,115905,115907,115909,115911],{"class":206,"line":207},[204,115902,111653],{"class":214},[204,115904,260],{"class":210},[204,115906,38959],{"class":263},[204,115908,114455],{"class":214},[204,115910,30909],{"class":263},[204,115912,114460],{"class":214},[204,115914,115915,115917,115919,115921,115923,115925],{"class":206,"line":126},[204,115916,111663],{"class":214},[204,115918,260],{"class":210},[204,115920,38959],{"class":263},[204,115922,114455],{"class":214},[204,115924,30909],{"class":263},[204,115926,114475],{"class":214},[19,115928,115929],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[196,115931,115933],{"className":30464,"code":115932,"language":30466,"meta":125,"style":125},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[81,115934,115935,115951],{"__ignoreMap":125},[204,115936,115937,115939,115941,115943,115945,115947,115949],{"class":206,"line":207},[204,115938,110939],{"class":214},[204,115940,260],{"class":210},[204,115942,114484],{"class":214},[204,115944,30909],{"class":263},[204,115946,114489],{"class":214},[204,115948,30909],{"class":263},[204,115950,114494],{"class":214},[204,115952,115953,115955],{"class":206,"line":126},[204,115954,17133],{"class":210},[204,115956,114501],{"class":214},[19,115958,115959,115960,115963,115964,115966],{},"拼接观测，并转换成 ",[81,115961,115962],{},"float32","。很多强化学习库默认使用 ",[81,115965,115962],{},"，所以这里主动转换。",[196,115968,115969],{"className":30464,"code":115372,"language":30466,"meta":125,"style":125},[81,115970,115971],{"__ignoreMap":125},[204,115972,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003,116005],{"class":206,"line":207},[204,115974,32033],{"class":210},[204,115976,114607],{"class":2049},[204,115978,114610],{"class":214},[204,115980,668],{"class":210},[204,115982,114615],{"class":214},[204,115984,218],{"class":263},[204,115986,25196],{"class":210},[204,115988,39019],{"class":263},[204,115990,13651],{"class":210},[204,115992,39019],{"class":263},[204,115994,114628],{"class":214},[204,115996,114631],{"class":263},[204,115998,25196],{"class":210},[204,116000,39019],{"class":263},[204,116002,13651],{"class":210},[204,116004,39019],{"class":263},[204,116006,30872],{"class":214},[19,116008,116009,116010,116012,116013,116016],{},"定义 reset。",[81,116011,114651],{}," 用来控制随机数，保证实验可以复现。",[81,116014,116015],{},"options"," 用来接收额外配置，本章暂时不用。",[196,116018,116020],{"className":30464,"code":116019,"language":30466,"meta":125,"style":125},"super().reset(seed=seed)\n",[81,116021,116022],{"__ignoreMap":125},[204,116023,116024,116026,116028,116030,116032],{"class":206,"line":207},[204,116025,115613],{"class":263},[204,116027,114648],{"class":214},[204,116029,114651],{"class":5303},[204,116031,260],{"class":210},[204,116033,114656],{"class":214},[19,116035,116036,116037,116040],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[81,116038,116039],{},"self.np_random"," 生成可复现的随机数。",[196,116042,116044],{"className":30464,"code":116043,"language":30466,"meta":125,"style":125},"mujoco.mj_resetData(self.model, self.data)\n",[81,116045,116046],{"__ignoreMap":125},[204,116047,116048,116051,116053,116055,116057],{"class":206,"line":207},[204,116049,116050],{"class":214},"mujoco.mj_resetData(",[204,116052,30909],{"class":263},[204,116054,114666],{"class":214},[204,116056,30909],{"class":263},[204,116058,114671],{"class":214},[19,116060,116061],{},"把 MuJoCo 状态重置到默认状态。",[196,116063,116065],{"className":30464,"code":116064,"language":30466,"meta":125,"style":125},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[81,116066,116067],{"__ignoreMap":125},[204,116068,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101],{"class":206,"line":207},[204,116070,30909],{"class":263},[204,116072,114682],{"class":214},[204,116074,260],{"class":210},[204,116076,38959],{"class":263},[204,116078,114689],{"class":214},[204,116080,113847],{"class":5303},[204,116082,113850],{"class":210},[204,116084,86296],{"class":263},[204,116086,12522],{"class":214},[204,116088,113857],{"class":5303},[204,116090,260],{"class":210},[204,116092,86296],{"class":263},[204,116094,12522],{"class":214},[204,116096,31582],{"class":5303},[204,116098,260],{"class":210},[204,116100,30909],{"class":263},[204,116102,114714],{"class":214},[19,116104,115426,116105,116108,116109,116112,116113,116115],{},[81,116106,116107],{},"[:]"," 表示修改整个数组。",[81,116110,116111],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[81,116114,102235],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[196,116117,116119],{"className":30464,"code":116118,"language":30466,"meta":125,"style":125},"self.data.qvel[:] = 0.0\n",[81,116120,116121],{"__ignoreMap":125},[204,116122,116123,116125,116127,116129],{"class":206,"line":207},[204,116124,30909],{"class":263},[204,116126,114721],{"class":214},[204,116128,260],{"class":210},[204,116130,104846],{"class":263},[19,116132,116133],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[196,116135,116137],{"className":30464,"code":116136,"language":30466,"meta":125,"style":125},"self.steps = 0\nreturn self._get_obs(), {}\n",[81,116138,116139,116149],{"__ignoreMap":125},[204,116140,116141,116143,116145,116147],{"class":206,"line":207},[204,116142,30909],{"class":263},[204,116144,113791],{"class":214},[204,116146,260],{"class":210},[204,116148,47419],{"class":263},[204,116150,116151,116153,116155],{"class":206,"line":126},[204,116152,17133],{"class":210},[204,116154,38959],{"class":263},[204,116156,114761],{"class":214},[19,116158,116159],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[196,116161,116162],{"className":30464,"code":115435,"language":30466,"meta":125,"style":125},[81,116163,116164],{"__ignoreMap":125},[204,116165,116166,116168,116170],{"class":206,"line":207},[204,116167,32033],{"class":210},[204,116169,114772],{"class":2049},[204,116171,114775],{"class":214},[19,116173,116174],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[196,116176,116178],{"className":30464,"code":116177,"language":30466,"meta":125,"style":125},"action = np.asarray(action, dtype=np.float32)\n",[81,116179,116180],{"__ignoreMap":125},[204,116181,116182,116184,116186,116188,116190,116192],{"class":206,"line":207},[204,116183,107527],{"class":214},[204,116185,260],{"class":210},[204,116187,114784],{"class":214},[204,116189,93586],{"class":5303},[204,116191,260],{"class":210},[204,116193,113881],{"class":214},[19,116195,116196,116197,28471],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[81,116198,115962],{},[196,116200,116202],{"className":30464,"code":116201,"language":30466,"meta":125,"style":125},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[81,116203,116204],{"__ignoreMap":125},[204,116205,116206,116208,116210,116212,116214,116216,116218],{"class":206,"line":207},[204,116207,107527],{"class":214},[204,116209,260],{"class":210},[204,116211,107532],{"class":214},[204,116213,30909],{"class":263},[204,116215,114803],{"class":214},[204,116217,30909],{"class":263},[204,116219,114808],{"class":214},[19,116221,116222],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[196,116224,116226],{"className":30464,"code":116225,"language":30466,"meta":125,"style":125},"self.data.ctrl[:] = action\n",[81,116227,116228],{"__ignoreMap":125},[204,116229,116230,116232,116234,116236],{"class":206,"line":207},[204,116231,30909],{"class":263},[204,116233,114819],{"class":214},[204,116235,260],{"class":210},[204,116237,107555],{"class":214},[19,116239,116240],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[196,116242,116244],{"className":30464,"code":116243,"language":30466,"meta":125,"style":125},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[81,116245,116246,116262],{"__ignoreMap":125},[204,116247,116248,116250,116252,116254,116256,116258,116260],{"class":206,"line":207},[204,116249,3111],{"class":210},[204,116251,101586],{"class":214},[204,116253,26129],{"class":210},[204,116255,32529],{"class":263},[204,116257,215],{"class":214},[204,116259,30909],{"class":263},[204,116261,114840],{"class":214},[204,116263,116264,116267,116269,116271,116273],{"class":206,"line":126},[204,116265,116266],{"class":214},"    mujoco.mj_step(",[204,116268,30909],{"class":263},[204,116270,114666],{"class":214},[204,116272,30909],{"class":263},[204,116274,114671],{"class":214},[19,116276,116277,116278,116281,116282,116284,116285,28471],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[81,116279,116280],{},"frame_skip=5","，所以外部调用一次 ",[81,116283,113962],{},"，内部实际执行 5 次 ",[81,116286,101300],{},[196,116288,116290],{"className":30464,"code":116289,"language":30466,"meta":125,"style":125},"self.steps += 1\n",[81,116291,116292],{"__ignoreMap":125},[204,116293,116294,116296,116298,116300],{"class":206,"line":207},[204,116295,30909],{"class":263},[204,116297,113791],{"class":214},[204,116299,9564],{"class":210},[204,116301,55785],{"class":263},[19,116303,116304],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[196,116306,116308],{"className":30464,"code":116307,"language":30466,"meta":125,"style":125},"obs = self._get_obs()\nreward = self._get_reward()\n",[81,116309,116310,116320],{"__ignoreMap":125},[204,116311,116312,116314,116316,116318],{"class":206,"line":207},[204,116313,110939],{"class":214},[204,116315,260],{"class":210},[204,116317,38959],{"class":263},[204,116319,114882],{"class":214},[204,116321,116322,116324,116326,116328],{"class":206,"line":126},[204,116323,111090],{"class":214},[204,116325,260],{"class":210},[204,116327,38959],{"class":263},[204,116329,114893],{"class":214},[19,116331,116332],{},"计算新的观测和奖励。",[196,116334,116336],{"className":30464,"code":116335,"language":30466,"meta":125,"style":125},"dist = float(np.linalg.norm(tip - target))\n",[81,116337,116338],{"__ignoreMap":125},[204,116339,116340,116342,116344,116346,116348,116350],{"class":206,"line":207},[204,116341,111681],{"class":214},[204,116343,260],{"class":210},[204,116345,109882],{"class":263},[204,116347,114936],{"class":214},[204,116349,745],{"class":210},[204,116351,114941],{"class":214},[19,116353,116354],{},"计算末端到目标的距离，并转换成 Python float。",[196,116356,116357],{"className":30464,"code":113762,"language":30466,"meta":125,"style":125},[81,116358,116359,116371],{"__ignoreMap":125},[204,116360,116361,116363,116365,116367,116369],{"class":206,"line":207},[204,116362,113769],{"class":214},[204,116364,260],{"class":210},[204,116366,113774],{"class":214},[204,116368,1123],{"class":210},[204,116370,113779],{"class":263},[204,116372,116373,116375,116377,116379,116381,116383,116385],{"class":206,"line":126},[204,116374,113784],{"class":214},[204,116376,260],{"class":210},[204,116378,38959],{"class":263},[204,116380,113791],{"class":214},[204,116382,1796],{"class":210},[204,116384,38959],{"class":263},[204,116386,113798],{"class":214},[19,116388,116389],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[196,116391,116393],{"className":30464,"code":116392,"language":30466,"meta":125,"style":125},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[81,116394,116395,116408],{"__ignoreMap":125},[204,116396,116397,116400,116402,116404,116406],{"class":206,"line":207},[204,116398,116399],{"class":214},"info ",[204,116401,260],{"class":210},[204,116403,4534],{"class":214},[204,116405,114987],{"class":319},[204,116407,114990],{"class":214},[204,116409,116410,116412],{"class":206,"line":126},[204,116411,17133],{"class":210},[204,116413,114997],{"class":214},[19,116415,116416,116419],{},[81,116417,116418],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[196,116421,116423],{"className":30464,"code":116422,"language":30466,"meta":125,"style":125},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[81,116424,116425,116434],{"__ignoreMap":125},[204,116426,116427,116430,116432],{"class":206,"line":207},[204,116428,116429],{"class":214},"env ",[204,116431,260],{"class":210},[204,116433,115027],{"class":214},[204,116435,116436,116438,116440,116442,116444,116446,116448],{"class":206,"line":126},[204,116437,113485],{"class":214},[204,116439,260],{"class":210},[204,116441,115037],{"class":214},[204,116443,114651],{"class":5303},[204,116445,260],{"class":210},[204,116447,405],{"class":263},[204,116449,221],{"class":214},[19,116451,116452,116453,116456],{},"创建环境并重置。",[81,116454,116455],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[196,116458,116460],{"className":30464,"code":116459,"language":30466,"meta":125,"style":125},"action = env.action_space.sample()\n",[81,116461,116462],{"__ignoreMap":125},[204,116463,116464,116466,116468],{"class":206,"line":207},[204,116465,107527],{"class":214},[204,116467,260],{"class":210},[204,116469,115106],{"class":214},[19,116471,116472],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116474,102401],{"id":102400},[19,116476,105569],{},[196,116478,116481],{"className":116479,"code":116480,"language":5274,"meta":125},[5272],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[81,116482,116480],{"__ignoreMap":125},[19,116484,116485],{},"这个环境已经具备强化学习环境的基本结构。",[19,116487,116488],{},"主函数里使用随机动作：",[196,116490,116491],{"className":30464,"code":116459,"language":30466,"meta":125,"style":125},[81,116492,116493],{"__ignoreMap":125},[204,116494,116495,116497,116499],{"class":206,"line":207},[204,116496,107527],{"class":214},[204,116498,260],{"class":210},[204,116500,115106],{"class":214},[19,116502,116503],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116505,102433],{"id":102432},[161,116507,116508,116511,116517,116526,116535,116544,116550],{},[71,116509,116510],{},"运行程序。",[71,116512,116513,116514,28471],{},"确认 ",[81,116515,116516],{},"obs.shape == (10,)",[71,116518,111266,116519,116522,116523,28471],{},[81,116520,116521],{},"env.action_space","，应类似 ",[81,116524,116525],{},"Box(-1.0, 1.0, (2,), float32)",[71,116527,105670,116528,116531,116532,28471],{},[81,116529,116530],{},"self.max_steps = 10","，确认环境会更快 ",[81,116533,116534],{},"truncated=True",[71,116536,102496,116537,102499,116540,116543],{},[81,116538,116539],{},"terminated = dist \u003C 0.05",[81,116541,116542],{},"dist \u003C 0.2","，观察是否更容易结束。",[71,116545,102496,116546,116549],{},[81,116547,116548],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[71,116551,116552,116553,116555,116556,116559],{},"在 ",[81,116554,116418],{}," 里加入 ",[81,116557,116558],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116561,102538],{"id":102537},[49,116563,116565],{"id":116564},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116567,116568,116569,116571],{},"Gymnasium 的 ",[81,116570,107219],{}," 返回 5 个值:",[196,116573,116575],{"className":30464,"code":116574,"language":30466,"meta":125,"style":125},"obs, reward, terminated, truncated, info\n",[81,116576,116577],{"__ignoreMap":125},[204,116578,116579],{"class":206,"line":207},[204,116580,116574],{"class":214},[19,116582,116583],{},"不是旧 Gym 的 4 个值。",[49,116585,116587,116590],{"id":116586},"datactrl-action-维度错误",[81,116588,116589],{},"data.ctrl[:] = action"," 维度错误",[19,116592,102608],{},[196,116594,116596],{"className":30464,"code":116595,"language":30466,"meta":125,"style":125},"print(self.model.nu)\nprint(action.shape)\n",[81,116597,116598,116609],{"__ignoreMap":125},[204,116599,116600,116602,116604,116606],{"class":206,"line":207},[204,116601,30501],{"class":263},[204,116603,215],{"class":214},[204,116605,30909],{"class":263},[204,116607,116608],{"class":214},".model.nu)\n",[204,116610,116611,116613],{"class":206,"line":126},[204,116612,30501],{"class":263},[204,116614,116615],{"class":214},"(action.shape)\n",[19,116617,116618],{},"两者必须匹配。",[49,116620,116622],{"id":116621},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116624,102547],{},[196,116626,116628],{"className":30464,"code":116627,"language":30466,"meta":125,"style":125},"mujoco.mj_forward(self.model, self.data)\n",[81,116629,116630],{"__ignoreMap":125},[204,116631,116632,116635,116637,116639,116641],{"class":206,"line":207},[204,116633,116634],{"class":214},"mujoco.mj_forward(",[204,116636,30909],{"class":263},[204,116638,114666],{"class":214},[204,116640,30909],{"class":263},[204,116642,114671],{"class":214},[49,116644,116646,116648],{"id":116645},"observation_space-维度和-obs-不一致",[81,116647,113685],{}," 维度和 obs 不一致",[19,116650,102660],{},[196,116652,116654],{"className":30464,"code":116653,"language":30466,"meta":125,"style":125},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[81,116655,116656,116666,116673],{"__ignoreMap":125},[204,116657,116658,116660,116662,116664],{"class":206,"line":207},[204,116659,110939],{"class":214},[204,116661,260],{"class":210},[204,116663,38959],{"class":263},[204,116665,114882],{"class":214},[204,116667,116668,116670],{"class":206,"line":126},[204,116669,30501],{"class":263},[204,116671,116672],{"class":214},"(obs.shape)\n",[204,116674,116675,116677,116679,116681],{"class":206,"line":131},[204,116676,30501],{"class":263},[204,116678,215],{"class":214},[204,116680,30909],{"class":263},[204,116682,116683],{"class":214},".observation_space.shape)\n",[19,116685,116686],{},"两者必须一致。本章观测是：",[196,116688,116691],{"className":116689,"code":116690,"language":5274,"meta":125},[5272],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[81,116692,116690],{"__ignoreMap":125},[49,116694,116696],{"id":116695},"action-超过范围","action 超过范围",[19,116698,116699],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[196,116701,116702],{"className":30464,"code":116201,"language":30466,"meta":125,"style":125},[81,116703,116704],{"__ignoreMap":125},[204,116705,116706,116708,116710,116712,116714,116716,116718],{"class":206,"line":207},[204,116707,107527],{"class":214},[204,116709,260],{"class":210},[204,116711,107532],{"class":214},[204,116713,30909],{"class":263},[204,116715,114803],{"class":214},[204,116717,30909],{"class":263},[204,116719,114808],{"class":214},[19,116721,116722,116723,28471],{},"这能避免无效动作直接写入 ",[81,116724,101161],{},[49,116726,116728],{"id":116727},"忘记返回-info","忘记返回 info",[19,116730,116568,116731,43,116733,116735],{},[81,116732,70142],{},[81,116734,107219],{}," 都会返回 info：",[196,116737,116738],{"className":30464,"code":113478,"language":30466,"meta":125,"style":125},[81,116739,116740,116748],{"__ignoreMap":125},[204,116741,116742,116744,116746],{"class":206,"line":207},[204,116743,113485],{"class":214},[204,116745,260],{"class":210},[204,116747,113490],{"class":214},[204,116749,116750,116752,116754],{"class":206,"line":126},[204,116751,113495],{"class":214},[204,116753,260],{"class":210},[204,116755,113500],{"class":214},[19,116757,116758,116759,28471],{},"即使暂时没有额外信息，也返回 ",[81,116760,32545],{},[14,116762,116764],{"id":116763},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116766,116767],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[161,116769,116770,116773,116776,116779,116782,116785],{},[71,116771,116772],{},"更稳定的 reward。",[71,116774,116775],{},"合理的 episode 长度。",[71,116777,116778],{},"可重复的随机目标采样。",[71,116780,116781],{},"render 接口。",[71,116783,116784],{},"环境注册代码。",[71,116786,116787],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116789,116790],{},"如果只是自己写训练循环，最小形式是：",[196,116792,116794],{"className":30464,"code":116793,"language":30466,"meta":125,"style":125},"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",[81,116795,116796,116804,116820,116824,116840,116849,116858,116868],{"__ignoreMap":125},[204,116797,116798,116800,116802],{"class":206,"line":207},[204,116799,116429],{"class":214},[204,116801,260],{"class":210},[204,116803,115027],{"class":214},[204,116805,116806,116808,116810,116812,116814,116816,116818],{"class":206,"line":126},[204,116807,113485],{"class":214},[204,116809,260],{"class":210},[204,116811,115037],{"class":214},[204,116813,114651],{"class":5303},[204,116815,260],{"class":210},[204,116817,405],{"class":263},[204,116819,221],{"class":214},[204,116821,116822],{"class":206,"line":131},[204,116823,2486],{"emptyLinePlaceholder":135},[204,116825,116826,116828,116830,116832,116834,116836,116838],{"class":206,"line":1281},[204,116827,3111],{"class":210},[204,116829,101586],{"class":214},[204,116831,26129],{"class":210},[204,116833,32529],{"class":263},[204,116835,215],{"class":214},[204,116837,6497],{"class":263},[204,116839,30872],{"class":214},[204,116841,116842,116845,116847],{"class":206,"line":1287},[204,116843,116844],{"class":214},"    action ",[204,116846,260],{"class":210},[204,116848,115106],{"class":214},[204,116850,116851,116854,116856],{"class":206,"line":1301},[204,116852,116853],{"class":214},"    obs, reward, terminated, truncated, info ",[204,116855,260],{"class":210},[204,116857,113500],{"class":214},[204,116859,116860,116862,116864,116866],{"class":206,"line":1307},[204,116861,3187],{"class":210},[204,116863,115172],{"class":214},[204,116865,115175],{"class":210},[204,116867,115178],{"class":214},[204,116869,116870,116873,116875],{"class":206,"line":1398},[204,116871,116872],{"class":214},"        obs, info ",[204,116874,260],{"class":210},[204,116876,113490],{"class":214},[14,116878,116880],{"id":116879},"_9本章小结","9.本章小结",[19,116882,116883],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[196,116885,116888],{"className":116886,"code":116887,"language":5274,"meta":125},[5272],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[81,116889,116887],{"__ignoreMap":125},[19,116891,116892],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5213,116894,116895],{},"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":125,"searchDepth":126,"depth":126,"links":116897},[116898,116899,116900,116907,116911,116912,116913,116923,116924],{"id":100732,"depth":126,"text":100733},{"id":100855,"depth":126,"text":100856},{"id":101129,"depth":126,"text":101130,"children":116901},[116902,116904,116906],{"id":113709,"depth":131,"text":116903},"terminated 和 truncated 的区别",{"id":113812,"depth":131,"text":116905},"observation_space 和 action_space",{"id":113939,"depth":131,"text":113940},{"id":101337,"depth":126,"text":101338,"children":116908},[116909,116910],{"id":101657,"depth":131,"text":101657},{"id":101793,"depth":131,"text":101793},{"id":102400,"depth":126,"text":102401},{"id":102432,"depth":126,"text":102433},{"id":102537,"depth":126,"text":102538,"children":116914},[116915,116916,116918,116919,116921,116922],{"id":116564,"depth":131,"text":116565},{"id":116586,"depth":131,"text":116917},"data.ctrl[:] = action 维度错误",{"id":116621,"depth":131,"text":116622},{"id":116645,"depth":131,"text":116920},"observation_space 维度和 obs 不一致",{"id":116695,"depth":131,"text":116696},{"id":116727,"depth":131,"text":116728},{"id":116763,"depth":126,"text":116764},{"id":116879,"depth":126,"text":116880},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113462,"description":125},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116931,"title":116932,"body":116933,"description":117356,"extension":133,"meta":117357,"navigation":135,"path":117358,"seo":117359,"stem":117360,"__hash__":117361},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116934,"toc":117346},[116935,116939,116942,116945,116965,116971,116977,116987,116990,116993,117013,117016,117020,117023,117029,117032,117046,117049,117052,117126,117129,117135,117138,117161,117164,117214,117217,117223,117226,117229,117232,117251,117254,117260,117263,117266,117269,117289,117292,117295,117298,117343],[10,116936,116938],{"id":116937},"mujoco-学习","MuJoCo 学习",[19,116940,116941],{},"初版",[19,116943,116944],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[161,116946,116947,116950,116953,116962],{},[71,116948,116949],{},"MuJoCo 模型文件在描述什么。",[71,116951,116952],{},"Python 代码怎样读取和推进仿真。",[71,116954,116955,426,116957,426,116959,116961],{},[81,116956,104115],{},[81,116958,104445],{},[81,116960,104448],{}," 这些数组为什么重要。",[71,116963,116964],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,116966,116967,116968,116970],{},"默认环境为 Fedora 44、Python >= 3.10、",[81,116969,101112],{}," 官方 Python bindings。",[19,116972,116973,116974,116976],{},"注意：本文禁止使用 ",[81,116975,101098],{},"。所有示例均使用：",[196,116978,116979],{"className":30464,"code":101663,"language":30466,"meta":125,"style":125},[81,116980,116981],{"__ignoreMap":125},[204,116982,116983,116985],{"class":206,"line":207},[204,116984,30478],{"class":210},[204,116986,101386],{"class":214},[14,116988,116989],{"id":116989},"适合谁阅读",[19,116991,116992],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[161,116994,116995,116998,117001,117004],{},[71,116996,116997],{},"没学过 MuJoCo，只会一点 Python。",[71,116999,117000],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[71,117002,117003],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[71,117005,117006,117007,117009,117010,117012],{},"以前接触过 ",[81,117008,101098],{},"，现在想迁移到官方 ",[81,117011,101106],{}," Python bindings。",[19,117014,117015],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117017,117019],{"id":117018},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117021,117022],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[196,117024,117027],{"className":117025,"code":117026,"language":5274,"meta":125},[5272],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[81,117028,117026],{"__ignoreMap":125},[19,117030,117031],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[161,117033,117034,117037,117040,117043],{},[71,117035,117036],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[71,117038,117039],{},"快速测试控制算法，不必一开始就上真实机器人。",[71,117041,117042],{},"生成强化学习环境。",[71,117044,117045],{},"采集状态、动作、图像、奖励等训练数据。",[14,117047,117048],{"id":117048},"学习前的心智模型",[19,117050,117051],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[352,117053,117054,117066],{},[355,117055,117056],{},[358,117057,117058,117061,117064],{},[361,117059,117060],{"align":23823},"部分",[361,117062,117063],{"align":23823},"负责什么",[361,117065,21274],{"align":23823},[398,117067,117068,117079,117091,117103,117115],{},[358,117069,117070,117073,117076],{},[403,117071,117072],{"align":23823},"MJCF XML",[403,117074,117075],{"align":23823},"定义世界和机器人结构",[403,117077,117078],{"align":23823},"地面、盒子、关节、电机、摄像头",[358,117080,117081,117085,117088],{},[403,117082,117083],{"align":23823},[81,117084,100795],{},[403,117086,117087],{"align":23823},"编译后的静态模型",[403,117089,117090],{"align":23823},"有几个关节、有几个电机、时间步长是多少",[358,117092,117093,117097,117100],{},[403,117094,117095],{"align":23823},[81,117096,100805],{},[403,117098,117099],{"align":23823},"运行中的动态状态",[403,117101,117102],{"align":23823},"当前时间、位置、速度、电机输入",[358,117104,117105,117109,117112],{},[403,117106,117107],{"align":23823},[81,117108,101300],{},[403,117110,117111],{"align":23823},"推进一步物理仿真",[403,117113,117114],{"align":23823},"根据重力、力、碰撞更新状态",[358,117116,117117,117120,117123],{},[403,117118,117119],{"align":23823},"Viewer \u002F Renderer",[403,117121,117122],{"align":23823},"把仿真显示出来",[403,117124,117125],{"align":23823},"打开窗口或保存图片",[19,117127,117128],{},"一句话总结：",[196,117130,117133],{"className":117131,"code":117132,"language":5274,"meta":125},[5272],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[81,117134,117132],{"__ignoreMap":125},[19,117136,117137],{},"参考来源：",[68,117139,117140,117147,117154],{},[71,117141,117142,117143],{},"MuJoCo Python 官方文档：",[62,117144,117145],{"href":117145,"rel":117146},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[66],[71,117148,117149,117150],{},"MuJoCo XML Reference：",[62,117151,117152],{"href":117152,"rel":117153},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[66],[71,117155,117156,117157],{},"MuJoCo Overview：",[62,117158,117159],{"href":117159,"rel":117160},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[66],[14,117162,117163],{"id":117163},"章节目录",[161,117165,117166,117172,117178,117184,117190,117196,117202,117208],{},[71,117167,117168],{},[62,117169,117171],{"href":117170},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[71,117173,117174],{},[62,117175,117177],{"href":117176},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[71,117179,117180],{},[62,117181,117183],{"href":117182},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[71,117185,117186],{},[62,117187,117189],{"href":117188},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[71,117191,117192],{},[62,117193,117195],{"href":117194},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[71,117197,117198],{},[62,117199,117201],{"href":117200},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[71,117203,117204],{},[62,117205,117207],{"href":117206},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[71,117209,117210],{},[62,117211,117213],{"href":117212},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117215,117216],{"id":117216},"推荐学习路线",[196,117218,117221],{"className":117219,"code":117220,"language":5274,"meta":125},[5272],"环境安装\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",[81,117222,117220],{"__ignoreMap":125},[19,117224,117225],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117227,117228],{"id":117228},"建议的目录结构",[19,117230,117231],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[196,117233,117235],{"className":23909,"code":117234,"language":23911,"meta":125,"style":125},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[81,117236,117237,117245],{"__ignoreMap":125},[204,117238,117239,117241,117243],{"class":206,"line":207},[204,117240,101351],{"class":2049},[204,117242,29302],{"class":263},[204,117244,101356],{"class":319},[204,117246,117247,117249],{"class":206,"line":126},[204,117248,101361],{"class":263},[204,117250,101356],{"class":319},[19,117252,117253],{},"每一章的代码都单独保存：",[196,117255,117258],{"className":117256,"code":117257,"language":5274,"meta":125},[5272],"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",[81,117259,117257],{"__ignoreMap":125},[19,117261,117262],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117264,117265],{"id":117265},"学习方法",[19,117267,117268],{},"每章建议按这个顺序操作：",[161,117270,117271,117274,117277,117280,117283,117286],{},[71,117272,117273],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[71,117275,117276],{},"复制最小可运行代码，保存成指定文件。",[71,117278,117279],{},"运行代码，确认没有报错。",[71,117281,117282],{},"对照“运行结果说明”理解输出。",[71,117284,117285],{},"做“验证步骤”，主动改一两个参数。",[71,117287,117288],{},"遇到报错先看“常见错误与解决方案”。",[19,117290,117291],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117293,117294],{"id":117294},"全局排错顺序",[19,117296,117297],{},"遇到问题时，按下面顺序查：",[161,117299,117300,117306,117312,117317,117320,117323,117330,117340],{},[71,117301,117302,117303],{},"Python 环境是否激活：",[81,117304,117305],{},"which python",[71,117307,117308,117309],{},"MuJoCo 是否能导入：",[81,117310,117311],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[71,117313,117314,117315],{},"是否误装了 ",[81,117316,101098],{},[71,117318,117319],{},"XML 标签是否闭合、属性是否拼写正确",[71,117321,117322],{},"actuator 引用的 joint 名字是否存在",[71,117324,117325,117327,117328],{},[81,117326,101161],{}," 的长度是否等于 ",[81,117329,102243],{},[71,117331,105670,117332,82625,117334,117336,117337],{},[81,117333,104115],{},[81,117335,104445],{}," 后是否调用了 ",[81,117338,117339],{},"mujoco.mj_forward",[71,117341,117342],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5213,117344,117345],{},"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":125,"searchDepth":126,"depth":126,"links":117347},[117348,117349,117350,117351,117352,117353,117354,117355],{"id":116989,"depth":126,"text":116989},{"id":117018,"depth":126,"text":117019},{"id":117048,"depth":126,"text":117048},{"id":117163,"depth":126,"text":117163},{"id":117216,"depth":126,"text":117216},{"id":117228,"depth":126,"text":117228},{"id":117265,"depth":126,"text":117265},{"id":117294,"depth":126,"text":117294},"仿真搭建。",{"category":23465},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116932,"description":117356},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117363,"title":117364,"body":117365,"description":132,"extension":133,"meta":117820,"navigation":135,"path":117821,"seo":117822,"stem":117823,"__hash__":117824},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117366,"toc":117818},[117367,117370,117373,117379,117815],[10,117368,117364],{"id":117369},"_1-最常用的基本操作更新",[19,117371,117372],{},"装linux系统教程：",[19,117374,117375],{},[62,117376,117377],{"href":117377,"rel":117378},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[66],[196,117380,117384],{"className":117381,"code":117382,"language":117383,"meta":125,"style":125},"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",[81,117385,117386,117391,117396,117405,117410,117419,117424,117444,117449,117460,117465,117474,117479,117507,117512,117531,117536,117555,117559,117564,117580,117584,117589,117619,117623,117628,117644,117648,117653,117668,117672,117677,117693,117697,117702,117714,117726,117730,117735,117752,117756,117761,117779,117783,117788,117797,117801,117806],{"__ignoreMap":125},[204,117387,117388],{"class":206,"line":207},[204,117389,117390],{"class":273},"#更新相关的知识\n",[204,117392,117393],{"class":206,"line":126},[204,117394,117395],{"class":273},"# 更新软件包列表（从服务器获取最新软件信息）\n",[204,117397,117398,117400,117403],{"class":206,"line":131},[204,117399,24663],{"class":2049},[204,117401,117402],{"class":319}," apt",[204,117404,26328],{"class":319},[204,117406,117407],{"class":206,"line":1281},[204,117408,117409],{"class":273},"# 升级所有可更新的软件包（不删除旧包）\n",[204,117411,117412,117414,117416],{"class":206,"line":1287},[204,117413,24663],{"class":2049},[204,117415,117402],{"class":319},[204,117417,117418],{"class":319}," upgrade\n",[204,117420,117421],{"class":206,"line":1301},[204,117422,117423],{"class":273},"#更新和升级软件包\n",[204,117425,117426,117428,117430,117433,117435,117437,117439,117442],{"class":206,"line":1307},[204,117427,24663],{"class":2049},[204,117429,117402],{"class":319},[204,117431,117432],{"class":319}," update",[204,117434,26276],{"class":214},[204,117436,24663],{"class":2049},[204,117438,117402],{"class":319},[204,117440,117441],{"class":319}," upgrade",[204,117443,101067],{"class":263},[204,117445,117446],{"class":206,"line":1398},[204,117447,117448],{"class":273},"#列出可更新的软件包及版本信息\n",[204,117450,117451,117454,117457],{"class":206,"line":1404},[204,117452,117453],{"class":2049},"apt",[204,117455,117456],{"class":319}," list",[204,117458,117459],{"class":263}," --upgradable\n",[204,117461,117462],{"class":206,"line":1416},[204,117463,117464],{"class":273},"#彻底升级（处理依赖关系，可能删除旧包）\n",[204,117466,117467,117469,117471],{"class":206,"line":1698},[204,117468,24663],{"class":2049},[204,117470,117402],{"class":319},[204,117472,117473],{"class":319}," full-upgrade\n",[204,117475,117476],{"class":206,"line":1703},[204,117477,117478],{"class":273},"#设置指定版本\n",[204,117480,117481,117483,117485,117487,117489,117492,117494,117496,117498,117500,117503,117505],{"class":206,"line":1709},[204,117482,24663],{"class":2049},[204,117484,117402],{"class":319},[204,117486,23921],{"class":319},[204,117488,28988],{"class":210},[204,117490,117491],{"class":319},"package_nam",[204,117493,289],{"class":214},[204,117495,1173],{"class":210},[204,117497,260],{"class":319},[204,117499,1123],{"class":210},[204,117501,117502],{"class":319},"version_numbe",[204,117504,883],{"class":214},[204,117506,51393],{"class":210},[204,117508,117509],{"class":206,"line":1714},[204,117510,117511],{"class":273},"#只安装软件包不升级\n",[204,117513,117514,117516,117518,117520,117522,117524,117526,117528],{"class":206,"line":1728},[204,117515,24663],{"class":2049},[204,117517,117402],{"class":319},[204,117519,23921],{"class":319},[204,117521,28988],{"class":210},[204,117523,117491],{"class":319},[204,117525,289],{"class":214},[204,117527,1173],{"class":210},[204,117529,117530],{"class":263}," --no-upgrade\n",[204,117532,117533],{"class":206,"line":1733},[204,117534,117535],{"class":273},"#只升级，不存在就不安装\n",[204,117537,117538,117540,117542,117544,117546,117548,117550,117552],{"class":206,"line":1739},[204,117539,24663],{"class":2049},[204,117541,117402],{"class":319},[204,117543,23921],{"class":319},[204,117545,28988],{"class":210},[204,117547,117491],{"class":319},[204,117549,289],{"class":214},[204,117551,1173],{"class":210},[204,117553,117554],{"class":263}," --only-upgrade\n",[204,117556,117557],{"class":206,"line":1760},[204,117558,2486],{"emptyLinePlaceholder":135},[204,117560,117561],{"class":206,"line":1765},[204,117562,117563],{"class":273},"#安装指定的软件命令\n",[204,117565,117566,117568,117570,117572,117574,117576,117578],{"class":206,"line":1779},[204,117567,24663],{"class":2049},[204,117569,117402],{"class":319},[204,117571,23921],{"class":319},[204,117573,28988],{"class":210},[204,117575,117491],{"class":319},[204,117577,289],{"class":214},[204,117579,51393],{"class":210},[204,117581,117582],{"class":206,"line":1784},[204,117583,2486],{"emptyLinePlaceholder":135},[204,117585,117586],{"class":206,"line":1813},[204,117587,117588],{"class":273},"#安装多个软件包\n",[204,117590,117591,117593,117595,117597,117599,117602,117605,117607,117609,117612,117614,117616],{"class":206,"line":1818},[204,117592,24663],{"class":2049},[204,117594,117402],{"class":319},[204,117596,23921],{"class":319},[204,117598,28988],{"class":210},[204,117600,117601],{"class":319},"package_",[204,117603,117604],{"class":210},"1>",[204,117606,28988],{"class":210},[204,117608,117601],{"class":319},[204,117610,117611],{"class":210},"2>",[204,117613,28988],{"class":210},[204,117615,117601],{"class":319},[204,117617,117618],{"class":210},"3>\n",[204,117620,117621],{"class":206,"line":1835},[204,117622,2486],{"emptyLinePlaceholder":135},[204,117624,117625],{"class":206,"line":1840},[204,117626,117627],{"class":273},"#更新指定的软件命令\n",[204,117629,117630,117632,117634,117636,117638,117640,117642],{"class":206,"line":1845},[204,117631,24663],{"class":2049},[204,117633,117402],{"class":319},[204,117635,117432],{"class":319},[204,117637,28988],{"class":210},[204,117639,117491],{"class":319},[204,117641,289],{"class":214},[204,117643,51393],{"class":210},[204,117645,117646],{"class":206,"line":1850},[204,117647,2486],{"emptyLinePlaceholder":135},[204,117649,117650],{"class":206,"line":1864},[204,117651,117652],{"class":273},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[204,117654,117655,117657,117660,117662,117664,117666],{"class":206,"line":1869},[204,117656,117453],{"class":2049},[204,117658,117659],{"class":319}," show",[204,117661,28988],{"class":210},[204,117663,117491],{"class":319},[204,117665,289],{"class":214},[204,117667,51393],{"class":210},[204,117669,117670],{"class":206,"line":2663},[204,117671,2486],{"emptyLinePlaceholder":135},[204,117673,117674],{"class":206,"line":2677},[204,117675,117676],{"class":273},"#删除软件包命令\n",[204,117678,117679,117681,117683,117685,117687,117689,117691],{"class":206,"line":2685},[204,117680,24663],{"class":2049},[204,117682,117402],{"class":319},[204,117684,26165],{"class":319},[204,117686,28988],{"class":210},[204,117688,117491],{"class":319},[204,117690,289],{"class":214},[204,117692,51393],{"class":210},[204,117694,117695],{"class":206,"line":2690},[204,117696,2486],{"emptyLinePlaceholder":135},[204,117698,117699],{"class":206,"line":2696},[204,117700,117701],{"class":273},"# 清理旧版本和缓存（释放磁盘空间）\n",[204,117703,117704,117706,117708,117711],{"class":206,"line":2702},[204,117705,24663],{"class":2049},[204,117707,117402],{"class":319},[204,117709,117710],{"class":319}," autoremove",[204,117712,117713],{"class":273},"  # 删除不再需要的依赖和库文件\n",[204,117715,117716,117718,117720,117723],{"class":206,"line":2707},[204,117717,24663],{"class":2049},[204,117719,117402],{"class":319},[204,117721,117722],{"class":319}," clean",[204,117724,117725],{"class":273},"       # 清理下载的缓存包\n",[204,117727,117728],{"class":206,"line":8035},[204,117729,2486],{"emptyLinePlaceholder":135},[204,117731,117732],{"class":206,"line":8059},[204,117733,117734],{"class":273},"#移除软件包及配置文件\n",[204,117736,117737,117739,117741,117744,117746,117748,117750],{"class":206,"line":8064},[204,117738,24663],{"class":2049},[204,117740,117402],{"class":319},[204,117742,117743],{"class":319}," purge",[204,117745,28988],{"class":210},[204,117747,117491],{"class":319},[204,117749,289],{"class":214},[204,117751,51393],{"class":210},[204,117753,117754],{"class":206,"line":8070},[204,117755,2486],{"emptyLinePlaceholder":135},[204,117757,117758],{"class":206,"line":8097},[204,117759,117760],{"class":273},"#查找软件包命令\n",[204,117762,117763,117765,117767,117770,117772,117775,117777],{"class":206,"line":8102},[204,117764,24663],{"class":2049},[204,117766,117402],{"class":319},[204,117768,117769],{"class":319}," search",[204,117771,28988],{"class":210},[204,117773,117774],{"class":319},"keywor",[204,117776,527],{"class":214},[204,117778,51393],{"class":210},[204,117780,117781],{"class":206,"line":8108},[204,117782,2486],{"emptyLinePlaceholder":135},[204,117784,117785],{"class":206,"line":8120},[204,117786,117787],{"class":273},"#列出所有已安装的包\n",[204,117789,117790,117792,117794],{"class":206,"line":8132},[204,117791,117453],{"class":2049},[204,117793,117456],{"class":319},[204,117795,117796],{"class":263}," --installed\n",[204,117798,117799],{"class":206,"line":8144},[204,117800,2486],{"emptyLinePlaceholder":135},[204,117802,117803],{"class":206,"line":9803},[204,117804,117805],{"class":273},"#列出所有已安装的包的版本信息\n",[204,117807,117808,117810,117812],{"class":206,"line":9828},[204,117809,117453],{"class":2049},[204,117811,117456],{"class":319},[204,117813,117814],{"class":263}," --all-versions\n",[5213,117816,117817],{},"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":125,"searchDepth":126,"depth":126,"links":117819},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117364,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117826,"title":117827,"body":117828,"description":132,"extension":133,"meta":118569,"navigation":135,"path":118570,"seo":118571,"stem":118572,"__hash__":118573},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117829,"toc":118556},[117830,117833,117837,117840,117846,117850,117854,117860,117865,117870,117875,117880,117885,117888,117891,117894,117897,117901,117904,117909,117912,117917,117920,117925,117932,117935,117938,117941,117944,117947,117958,117962,117966,117971,117976,117980,117985,117989,117994,117998,118002,118007,118010,118055,118060,118064,118068,118073,118079,118084,118094,118099,118109,118114,118119,118146,118150,118153,118158,118161,118186,118190,118195,118198,118203,118208,118228,118233,118236,118251,118255,118308,118311,118316,118320,118323,118338,118341,118344,118349,118353,118357,118360,118364,118368,118371,118376,118381,118385,118392,118400,118403,118410,118415,118420,118423,118428,118435,118440,118447,118451,118453,118458,118462,118465,118468,118473,118476,118481,118484,118489,118494,118499,118503,118508,118512,118553],[10,117831,117827],{"id":117832},"_2-linux装机教程",[14,117834,117836],{"id":117835},"_21-实体机","2.1 实体机",[19,117838,117839],{},"使用清华源：（Ubuntu24.04）",[19,117841,117842],{},[62,117843,117844],{"href":117844,"rel":117845},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[66],[14,117847,117849],{"id":117848},"_22-普通虚拟机","2.2 普通虚拟机",[49,117851,117853],{"id":117852},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117855,117856],{},[62,117857,117858],{"href":117858,"rel":117859},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[66],[19,117861,117862],{},[23,117863],{"alt":125,"src":117864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117866,117867],{},[23,117868],{"alt":125,"src":117869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117871,117872],{},[23,117873],{"alt":125,"src":117874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117876,117877],{},[23,117878],{"alt":125,"src":117879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117881,117882],{},[23,117883],{"alt":125,"src":117884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117886,117887],{},"内存4G（4096MB）；",[19,117889,117890],{},"CPU给4个核；",[19,117892,117893],{},"硬盘动态分配60G；",[19,117895,117896],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[49,117898,117900],{"id":117899},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117902,117903],{},"按照1.1的步骤下载Ubuntu",[19,117905,117906],{},[23,117907],{"alt":125,"src":117908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117910,117911],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117913,117914],{},[23,117915],{"alt":125,"src":117916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117918,117919],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117921,117922],{},[23,117923],{"alt":125,"src":117924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117926,117927,117928,117931],{},"选择“正常安装”(找不到都用Alt+F7)， ",[30,117929,117930],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117933,117934],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117936,117937],{},"将改动写入磁盘吗 继续",[19,117939,117940],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,117942,117943],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,117945,117946],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,117948,117949,117950,117953,117954,117957],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[30,117951,117952],{},"除了"," 选不发送系统信息与不升级之外， ",[30,117955,117956],{},"其它"," 都跳过或前进）",[49,117959,117961],{"id":117960},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22085,117963,117965],{"id":117964},"_2231-全屏","2.2.3.1 全屏",[19,117967,117968],{},[23,117969],{"alt":125,"src":117970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,117972,117973],{},[23,117974],{"alt":125,"src":117975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22085,117977,117979],{"id":117978},"_2232-文件交换","2.2.3.2 文件交换",[19,117981,117982],{},[23,117983],{"alt":125,"src":117984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22085,117986,117988],{"id":117987},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,117990,117991],{},[23,117992],{"alt":125,"src":117993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,117995,117997],{"id":117996},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[49,117999,118001],{"id":118000},"_231-简介与优缺点","2.3.1 简介与优缺点",[161,118003,118004],{},[71,118005,118006],{},"什么情况下推荐？",[19,118008,118009],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[161,118011,118012],{"start":126},[71,118013,118014,118015],{},"优缺点：",[161,118016,118017,118047],{},[71,118018,118019,118020],{},"优点：",[161,118021,118022,118025,118032,118035,118038,118041,118044],{},[71,118023,118024],{},"WSL2是最好的Linux发行版;(bushi)",[71,118026,118027,118028,118031],{},"性能损耗极低。且比在Windows上跑深度性能 ",[30,118029,118030],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[71,118033,118034],{},"非常方便调用USB设备，可以USB直通;",[71,118036,118037],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[71,118039,118040],{},"非常方便Win与WSL2互相传文件等协同操作;",[71,118042,118043],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[71,118045,118046],{},"非常方便使用Windows的VScode远程开发;",[71,118048,118049,118050],{},"缺点：",[161,118051,118052],{},[71,118053,118054],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118056,118057],{},[23,118058],{"alt":125,"src":118059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[49,118061,118063],{"id":118062},"_232-安装教程","2.3.2 安装教程",[22085,118065,118067],{"id":118066},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[161,118069,118070],{},[71,118071,118072],{},"方法一(图形界面)",[19,118074,118075,118076,24705],{},"用Win+R输入",[81,118077,118078],{},"appwiz.cpl",[19,118080,118081],{},[23,118082],{"alt":125,"src":118083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118085,118086,118087,118090,118091,26559],{},"点击OK进入 ",[30,118088,118089],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[30,118092,118093],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118095,118096],{},[23,118097],{"alt":125,"src":118098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118100,118101,118102,43,118105,118108],{},"选择 ",[30,118103,118104],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[30,118106,118107],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118110,118111],{},[23,118112],{"alt":125,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[161,118115,118116],{"start":126},[71,118117,118118],{},"方法二(命令行)",[196,118120,118124],{"className":118121,"code":118122,"language":118123,"meta":125,"style":125},"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",[81,118125,118126,118131,118136,118141],{"__ignoreMap":125},[204,118127,118128],{"class":206,"line":207},[204,118129,118130],{},"# 开启 Linux 子系统\n",[204,118132,118133],{"class":206,"line":126},[204,118134,118135],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[204,118137,118138],{"class":206,"line":131},[204,118139,118140],{},"# 开启虚拟机平台\n",[204,118142,118143],{"class":206,"line":1281},[204,118144,118145],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22085,118147,118149],{"id":118148},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118151,118152],{},"用管理员权限打开powershell",[19,118154,118155],{},[23,118156],{"alt":125,"src":118157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118159,118160],{},"升级WSL并设置默认版本为WSL2",[196,118162,118164],{"className":118121,"code":118163,"language":118123,"meta":125,"style":125},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[81,118165,118166,118171,118176,118181],{"__ignoreMap":125},[204,118167,118168],{"class":206,"line":207},[204,118169,118170],{},"# 更新 wsl\n",[204,118172,118173],{"class":206,"line":126},[204,118174,118175],{},"wsl --update\n",[204,118177,118178],{"class":206,"line":131},[204,118179,118180],{},"# 将 wsl 版本设置为 wsl2\n",[204,118182,118183],{"class":206,"line":1281},[204,118184,118185],{},"wsl --set-default-version 2\n",[22085,118187,118189],{"id":118188},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[161,118191,118192],{},[71,118193,118194],{},"方式一(商店下载)",[19,118196,118197],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118199,118200],{},[23,118201],{"alt":125,"src":118202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[161,118204,118205],{"start":126},[71,118206,118207],{},"方式二(命令行安装)",[196,118209,118211],{"className":118121,"code":118210,"language":118123,"meta":125,"style":125},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[81,118212,118213,118218,118223],{"__ignoreMap":125},[204,118214,118215],{"class":206,"line":207},[204,118216,118217],{},"# 列出可安装的 Linux 版本\n",[204,118219,118220],{"class":206,"line":126},[204,118221,118222],{},"#（需要科学手段）\n",[204,118224,118225],{"class":206,"line":131},[204,118226,118227],{},"wsl --list --online\n",[19,118229,118230],{},[23,118231],{"alt":125,"src":118232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118234,118235],{},"选择对应发行版并安装",[196,118237,118239],{"className":118121,"code":118238,"language":118123,"meta":125,"style":125},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[81,118240,118241,118246],{"__ignoreMap":125},[204,118242,118243],{"class":206,"line":207},[204,118244,118245],{},"# Ubuntu安装完毕后需要重启系统\n",[204,118247,118248],{"class":206,"line":126},[204,118249,118250],{},"wsl --install -d Ubuntu-24.04\n",[22085,118252,118254],{"id":118253},"_2324-查看系统状态","2.3.2.4 查看系统状态",[196,118256,118258],{"className":118121,"code":118257,"language":118123,"meta":125,"style":125},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[81,118259,118260,118265,118270,118275,118280,118284,118288,118293,118298,118303],{"__ignoreMap":125},[204,118261,118262],{"class":206,"line":207},[204,118263,118264],{},"# 查看 wsl\n",[204,118266,118267],{"class":206,"line":126},[204,118268,118269],{},"wsl -l\n",[204,118271,118272],{"class":206,"line":131},[204,118273,118274],{},"# 查看 wsl 运行版本或模式\n",[204,118276,118277],{"class":206,"line":1281},[204,118278,118279],{},"wsl -l -v\n",[204,118281,118282],{"class":206,"line":1287},[204,118283,2486],{"emptyLinePlaceholder":135},[204,118285,118286],{"class":206,"line":1301},[204,118287,2486],{"emptyLinePlaceholder":135},[204,118289,118290],{"class":206,"line":1307},[204,118291,118292],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[204,118294,118295],{"class":206,"line":1398},[204,118296,118297],{},"wsl --set-version \u003Cdistro> 2\n",[204,118299,118300],{"class":206,"line":1404},[204,118301,118302],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[204,118304,118305],{"class":206,"line":1416},[204,118306,118307],{},"wsl --unregister \u003Cdistro>\n",[19,118309,118310],{},"输出Version为2即正常",[19,118312,118313],{},[23,118314],{"alt":125,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22085,118317,118319],{"id":118318},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118321,118322],{},"直接在Powershell里输入wsl命令进入子系统",[196,118324,118326],{"className":118121,"code":118325,"language":118123,"meta":125,"style":125},"# 进入子系统\nwsl\n",[81,118327,118328,118333],{"__ignoreMap":125},[204,118329,118330],{"class":206,"line":207},[204,118331,118332],{},"# 进入子系统\n",[204,118334,118335],{"class":206,"line":126},[204,118336,118337],{},"wsl\n",[19,118339,118340],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118342,118343],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118345,118346],{},[23,118347],{"alt":125,"src":118348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[49,118350,118352],{"id":118351},"_233-配置各种环境","2.3.3 配置各种环境",[22085,118354,118356],{"id":118355},"_2331-换源","2.3.3.1 换源",[19,118358,118359],{},"(同实体机LINUX，往下找教程)",[22085,118361,118363],{"id":118362},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22997,118365,118367],{"id":118366},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118369,118370],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118372,118373],{},[23,118374],{"alt":125,"src":118375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118377,118378],{},[23,118379],{"alt":125,"src":118380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22997,118382,118384],{"id":118383},"_23322-cuda","2.3.3.2.2 CUDA",[19,118386,118387,118388],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[62,118389,118390],{"href":118390,"rel":118391},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[66],[19,118393,118394,118397],{},[23,118395],{"alt":125,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[23,118398],{"alt":125,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118401,118402],{},"在下方的网站，选择合适的版本。",[19,118404,118405,118406],{},"WSL2 专属 CUDA 指南：",[62,118407,118408],{"href":118408,"rel":118409},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[66],[19,118411,118412],{},[30,118413,118414],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118416,118417],{},[23,118418],{"alt":125,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118421,118422],{},"挨行敲一遍",[19,118424,118425],{},[23,118426],{"alt":125,"src":118427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118429,118430,118431,118434],{},"敲完后，输入",[81,118432,118433],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118436,118437],{},[23,118438],{"alt":125,"src":118439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118441,118442,118443,118446],{},"（请详看下方教程的",[30,118444,118445],{},"安装CUDA的配置环境来看","如何配置环境）",[22997,118448,118450],{"id":118449},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118452,118359],{},[19,118454,118455],{},[23,118456],{"alt":125,"src":118457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22085,118459,118461],{"id":118460},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118463,118464],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118466,118467],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118469,118470],{},[23,118471],{"alt":125,"src":118472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118474,118475],{},"连接WSL2",[19,118477,118478],{},[23,118479],{"alt":125,"src":118480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118482,118483],{},"远程开发成功。",[19,118485,118486],{},[23,118487],{"alt":125,"src":118488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118490,118491],{},[23,118492],{"alt":125,"src":118493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118495,118496],{},[23,118497],{"alt":125,"src":118498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22085,118500,118502],{"id":118501},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118504,118505],{},[23,118506],{"alt":125,"src":118507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22085,118509,118511],{"id":118510},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[196,118513,118515],{"className":117381,"code":118514,"language":117383,"meta":125,"style":125},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[81,118516,118517,118525,118533,118544,118548],{"__ignoreMap":125},[204,118518,118519,118521,118523],{"class":206,"line":207},[204,118520,24663],{"class":2049},[204,118522,117402],{"class":319},[204,118524,26328],{"class":319},[204,118526,118527,118529,118531],{"class":206,"line":126},[204,118528,24663],{"class":2049},[204,118530,117402],{"class":319},[204,118532,117418],{"class":319},[204,118534,118535,118537,118539,118541],{"class":206,"line":131},[204,118536,24663],{"class":2049},[204,118538,117402],{"class":319},[204,118540,23921],{"class":319},[204,118542,118543],{"class":319}," mesa-utils\n",[204,118545,118546],{"class":206,"line":1281},[204,118547,2486],{"emptyLinePlaceholder":135},[204,118549,118550],{"class":206,"line":1287},[204,118551,118552],{"class":273},"#然后重启wsl2即可\n",[5213,118554,118555],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":125,"searchDepth":126,"depth":126,"links":118557},[118558,118559,118564],{"id":117835,"depth":126,"text":117836},{"id":117848,"depth":126,"text":117849,"children":118560},[118561,118562,118563],{"id":117852,"depth":131,"text":117853},{"id":117899,"depth":131,"text":117900},{"id":117960,"depth":131,"text":117961},{"id":117996,"depth":126,"text":117997,"children":118565},[118566,118567,118568],{"id":118000,"depth":131,"text":118001},{"id":118062,"depth":131,"text":118063},{"id":118351,"depth":131,"text":118352},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117827,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118575,"title":118576,"body":118577,"description":132,"extension":133,"meta":121513,"navigation":135,"path":121514,"seo":121515,"stem":121516,"__hash__":121517},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118578,"toc":121485},[118579,118582,118586,118592,118596,118602,118606,118794,118797,118802,118806,118810,118813,118816,118822,118827,118830,118833,118838,118871,118876,118880,118957,118960,118965,118969,118972,119011,119014,119023,119041,119046,119053,119170,119175,119178,119205,119210,119214,119223,119273,119280,119284,119287,119301,119308,119342,119347,119351,119374,119377,119382,119386,119389,119392,119395,119437,119441,119444,119447,119488,119492,119496,119499,119504,119509,119512,119535,119538,119546,119551,119554,119559,119564,119567,119572,119576,119581,119604,119609,119671,119679,119684,119689,119692,119697,119700,119705,119710,119728,119733,119739,119744,119758,119762,119765,119768,119771,119814,119817,119822,119923,119926,119931,119935,119939,119976,119980,119984,119988,120034,120038,120083,120087,120094,120102,120157,120160,120237,120240,120263,120267,120270,120275,120280,120288,120291,120296,120301,120306,120309,120314,120323,120326,120331,120334,120405,120410,120413,120418,120421,120426,120429,120434,120437,120442,120447,120450,120525,120528,120541,120546,120549,120563,120566,120595,120600,120629,120632,120637,120641,120646,120655,120658,120663,120666,120671,120674,120677,120682,120685,120690,120695,120698,120703,120706,120831,120836,120866,120869,120874,120879,120896,120899,120942,120945,120972,120977,120990,121133,121137,121142,121156,121159,121210,121213,121243,121246,121262,121267,121281,121284,121351,121356,121365,121370,121373,121385,121390,121397,121421,121424,121429,121432,121451,121456,121463,121475,121482],[10,118580,118576],{"id":118581},"_3-安装必备配置",[14,118583,118585],{"id":118584},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[196,118587,118590],{"className":118588,"code":118589,"language":5274},[5272],"  打开下方网站（注意，该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",[81,118591,118589],{"__ignoreMap":125},[49,118593,118595],{"id":118594},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[196,118597,118600],{"className":118598,"code":118599,"language":5274},[5272],"  输入以下命令\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",[81,118601,118599],{"__ignoreMap":125},[49,118603,118605],{"id":118604},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[196,118607,118611],{"className":118608,"code":118609,"language":118610,"meta":125,"style":125},"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",[81,118612,118613,118621,118632,118644,118658,118662,118672,118677,118681,118685,118690,118694,118706,118710,118715,118719,118730,118734,118750,118754,118765,118769,118774,118778,118786],{"__ignoreMap":125},[204,118614,118615,118617,118619],{"class":206,"line":207},[204,118616,24663],{"class":2049},[204,118618,117402],{"class":319},[204,118620,26328],{"class":319},[204,118622,118623,118625,118627,118629],{"class":206,"line":126},[204,118624,24663],{"class":2049},[204,118626,117402],{"class":319},[204,118628,23921],{"class":319},[204,118630,118631],{"class":319}," vim\n",[204,118633,118634,118636,118639,118641],{"class":206,"line":131},[204,118635,24663],{"class":2049},[204,118637,118638],{"class":319}," rm",[204,118640,25412],{"class":263},[204,118642,118643],{"class":319}," \u002Fetc\u002Fapt\u002Fsources.list\n",[204,118645,118646,118648,118650,118652,118655],{"class":206,"line":1281},[204,118647,24663],{"class":2049},[204,118649,118638],{"class":319},[204,118651,25412],{"class":263},[204,118653,118654],{"class":319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[204,118656,118657],{"class":263},"**\n",[204,118659,118660],{"class":206,"line":1287},[204,118661,2486],{"emptyLinePlaceholder":135},[204,118663,118664,118666,118669],{"class":206,"line":1301},[204,118665,24663],{"class":2049},[204,118667,118668],{"class":319}," vim",[204,118670,118671],{"class":319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[204,118673,118674],{"class":206,"line":1307},[204,118675,118676],{"class":319},"```\n",[204,118678,118679],{"class":206,"line":1398},[204,118680,2486],{"emptyLinePlaceholder":135},[204,118682,118683],{"class":206,"line":1404},[204,118684,2486],{"emptyLinePlaceholder":135},[204,118686,118687],{"class":206,"line":1416},[204,118688,118689],{"class":2049},"选择好Ubuntu版本后，复制下方的内容。\n",[204,118691,118692],{"class":206,"line":1698},[204,118693,2486],{"emptyLinePlaceholder":135},[204,118695,118696,118698,118701,118704],{"class":206,"line":1703},[204,118697,440],{"class":210},[204,118699,118700],{"class":319},"[](",[204,118702,118703],{"class":2049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[204,118705,221],{"class":319},[204,118707,118708],{"class":206,"line":1709},[204,118709,2486],{"emptyLinePlaceholder":135},[204,118711,118712],{"class":206,"line":1714},[204,118713,118714],{"class":2049},"粘贴进去\n",[204,118716,118717],{"class":206,"line":1728},[204,118718,2486],{"emptyLinePlaceholder":135},[204,118720,118721,118723,118725,118728],{"class":206,"line":1733},[204,118722,440],{"class":210},[204,118724,118700],{"class":319},[204,118726,118727],{"class":2049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[204,118729,221],{"class":319},[204,118731,118732],{"class":206,"line":1739},[204,118733,2486],{"emptyLinePlaceholder":135},[204,118735,118736,118739,118742,118745,118747],{"class":206,"line":1760},[204,118737,118738],{"class":2049},"按一下ESC，然后英文冒号，输入",[204,118740,118741],{"class":319}," `",[204,118743,118744],{"class":2049},":wq!",[204,118746,1185],{"class":319},[204,118748,118749],{"class":2049},"然后回车\n",[204,118751,118752],{"class":206,"line":1765},[204,118753,2486],{"emptyLinePlaceholder":135},[204,118755,118756,118758,118760,118763],{"class":206,"line":1779},[204,118757,440],{"class":210},[204,118759,118700],{"class":319},[204,118761,118762],{"class":2049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[204,118764,221],{"class":319},[204,118766,118767],{"class":206,"line":1784},[204,118768,2486],{"emptyLinePlaceholder":135},[204,118770,118771],{"class":206,"line":1813},[204,118772,118773],{"class":2049},"输入以下命令\n",[204,118775,118776],{"class":206,"line":1818},[204,118777,2486],{"emptyLinePlaceholder":135},[204,118779,118780,118783],{"class":206,"line":1835},[204,118781,118782],{"class":319},"```",[204,118784,118785],{"class":2049},"Bash\n",[204,118787,118788,118790,118792],{"class":206,"line":1840},[204,118789,24663],{"class":2049},[204,118791,117402],{"class":319},[204,118793,26328],{"class":319},[19,118795,118796],{},"这里被替换成对应学校则成功",[19,118798,118799],{},[23,118800],{"alt":125,"src":118801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118803,118805],{"id":118804},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[49,118807,118809],{"id":118808},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118811,118812],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118814,118815],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118817,118818],{},[62,118819,118820],{"href":118820,"rel":118821},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[66],[19,118823,118824],{},[23,118825],{"alt":125,"src":118826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118828,118829],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118831,118832],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118834,118835],{},[23,118836],{"alt":125,"src":118837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[196,118839,118841],{"className":117381,"code":118840,"language":117383,"meta":125,"style":125},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[81,118842,118843,118848,118855,118860],{"__ignoreMap":125},[204,118844,118845],{"class":206,"line":207},[204,118846,118847],{"class":273},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[204,118849,118850,118852],{"class":206,"line":126},[204,118851,101361],{"class":263},[204,118853,118854],{"class":319}," ~\u002FDownloads\n",[204,118856,118857],{"class":206,"line":131},[204,118858,118859],{"class":273},"#下方chrome安装包名不一定是这个，根据名字来看\n",[204,118861,118862,118864,118866,118868],{"class":206,"line":1281},[204,118863,24663],{"class":2049},[204,118865,117402],{"class":319},[204,118867,23921],{"class":319},[204,118869,118870],{"class":319}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118872,118873],{},[23,118874],{"alt":125,"src":118875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[49,118877,118879],{"id":118878},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[196,118881,118883],{"className":117381,"code":118882,"language":117383,"meta":125,"style":125},"# 老版\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",[81,118884,118885,118890,118898,118909,118914,118918,118923,118933,118941,118952],{"__ignoreMap":125},[204,118886,118887],{"class":206,"line":207},[204,118888,118889],{"class":273},"# 老版\n",[204,118891,118892,118894,118896],{"class":206,"line":126},[204,118893,24663],{"class":2049},[204,118895,117402],{"class":319},[204,118897,26328],{"class":319},[204,118899,118900,118902,118904,118906],{"class":206,"line":131},[204,118901,24663],{"class":2049},[204,118903,117402],{"class":319},[204,118905,23921],{"class":319},[204,118907,118908],{"class":319}," neofetch\n",[204,118910,118911],{"class":206,"line":1281},[204,118912,118913],{"class":2049},"neofetch\n",[204,118915,118916],{"class":206,"line":1287},[204,118917,2486],{"emptyLinePlaceholder":135},[204,118919,118920],{"class":206,"line":1301},[204,118921,118922],{"class":273},"# 新版\n",[204,118924,118925,118927,118930],{"class":206,"line":1307},[204,118926,24663],{"class":2049},[204,118928,118929],{"class":319}," add-apt-repository",[204,118931,118932],{"class":319}," ppa:zhangsongcui3371\u002Ffastfetch\n",[204,118934,118935,118937,118939],{"class":206,"line":1398},[204,118936,24663],{"class":2049},[204,118938,117402],{"class":319},[204,118940,26328],{"class":319},[204,118942,118943,118945,118947,118949],{"class":206,"line":1404},[204,118944,24663],{"class":2049},[204,118946,117402],{"class":319},[204,118948,23921],{"class":319},[204,118950,118951],{"class":319}," fastfetch\n",[204,118953,118954],{"class":206,"line":1416},[204,118955,118956],{"class":2049},"fastfetch\n",[19,118958,118959],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,118961,118962],{},[23,118963],{"alt":125,"src":118964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[49,118966,118968],{"id":118967},"_323-移除snap应用","3.2.3 移除snap应用",[19,118970,118971],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[196,118973,118975],{"className":117381,"code":118974,"language":117383,"meta":125,"style":125},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[81,118976,118977,118989,119000],{"__ignoreMap":125},[204,118978,118979,118981,118983,118986],{"class":206,"line":207},[204,118980,24663],{"class":2049},[204,118982,26599],{"class":319},[204,118984,118985],{"class":319}," disable",[204,118987,118988],{"class":319}," snapd.service\n",[204,118990,118991,118993,118995,118997],{"class":206,"line":126},[204,118992,24663],{"class":2049},[204,118994,26599],{"class":319},[204,118996,118985],{"class":319},[204,118998,118999],{"class":319}," snapd.socket\n",[204,119001,119002,119004,119006,119008],{"class":206,"line":131},[204,119003,24663],{"class":2049},[204,119005,26599],{"class":319},[204,119007,118985],{"class":319},[204,119009,119010],{"class":319}," snapd.seeded.service\n",[19,119012,119013],{},"然后查看snap应用列表",[19,119015,119016,119017,119022],{},"根据你安装的选择不同（最小安装或普通安装），有",[62,119018,119021],{"href":119019,"rel":119020},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[66],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[196,119024,119026],{"className":117381,"code":119025,"language":117383,"meta":125,"style":125},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[81,119027,119028,119033],{"__ignoreMap":125},[204,119029,119030],{"class":206,"line":207},[204,119031,119032],{"class":273},"# 查询当前系统上snap安装了哪些app\n",[204,119034,119035,119038],{"class":206,"line":126},[204,119036,119037],{"class":2049},"snap",[204,119039,119040],{"class":319}," list\n",[19,119042,119043],{},[23,119044],{"alt":125,"src":119045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119047,119048,119049,119052],{},"卸载掉图中所有应用，按照 ",[30,119050,119051],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[196,119054,119056],{"className":117381,"code":119055,"language":117383,"meta":125,"style":125},"#移除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",[81,119057,119058,119063,119075,119080,119091,119096,119107,119112,119123,119128,119132,119137,119148,119159],{"__ignoreMap":125},[204,119059,119060],{"class":206,"line":207},[204,119061,119062],{"class":273},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[204,119064,119065,119067,119070,119072],{"class":206,"line":126},[204,119066,24663],{"class":2049},[204,119068,119069],{"class":319}," snap",[204,119071,26165],{"class":319},[204,119073,119074],{"class":319}," snap-store\n",[204,119076,119077],{"class":206,"line":131},[204,119078,119079],{"class":273},"#移除firefox浏览器\n",[204,119081,119082,119084,119086,119088],{"class":206,"line":1281},[204,119083,24663],{"class":2049},[204,119085,119069],{"class":319},[204,119087,26165],{"class":319},[204,119089,119090],{"class":319}," firefox\n",[204,119092,119093],{"class":206,"line":1287},[204,119094,119095],{"class":273},"#移除gnome-42-2204\n",[204,119097,119098,119100,119102,119104],{"class":206,"line":1301},[204,119099,24663],{"class":2049},[204,119101,119069],{"class":319},[204,119103,26165],{"class":319},[204,119105,119106],{"class":319}," gnome-42-2204\n",[204,119108,119109],{"class":206,"line":1307},[204,119110,119111],{"class":273},"#移除gtk-common-themes\n",[204,119113,119114,119116,119118,119120],{"class":206,"line":1398},[204,119115,24663],{"class":2049},[204,119117,119069],{"class":319},[204,119119,26165],{"class":319},[204,119121,119122],{"class":319}," gtk-common-themes\n",[204,119124,119125],{"class":206,"line":1404},[204,119126,119127],{"class":273},"#移除其它...\n",[204,119129,119130],{"class":206,"line":1416},[204,119131,2760],{"class":214},[204,119133,119134],{"class":206,"line":1698},[204,119135,119136],{"class":273},"#移除core22,bare以及snapd\n",[204,119138,119139,119141,119143,119145],{"class":206,"line":1703},[204,119140,24663],{"class":2049},[204,119142,119069],{"class":319},[204,119144,26165],{"class":319},[204,119146,119147],{"class":319}," core22\n",[204,119149,119150,119152,119154,119156],{"class":206,"line":1709},[204,119151,24663],{"class":2049},[204,119153,119069],{"class":319},[204,119155,26165],{"class":319},[204,119157,119158],{"class":319}," bare\n",[204,119160,119161,119163,119165,119167],{"class":206,"line":1714},[204,119162,24663],{"class":2049},[204,119164,119069],{"class":319},[204,119166,26165],{"class":319},[204,119168,119169],{"class":319}," snapd\n",[19,119171,119172],{},[23,119173],{"alt":125,"src":119174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119176,119177],{},"输入以下命令查看是否还有snap包",[196,119179,119181],{"className":117381,"code":119180,"language":117383,"meta":125,"style":125},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[81,119182,119183,119189,119193,119197,119201],{"__ignoreMap":125},[204,119184,119185,119187],{"class":206,"line":207},[204,119186,119037],{"class":2049},[204,119188,119040],{"class":319},[204,119190,119191],{"class":206,"line":126},[204,119192,118889],{"class":273},[204,119194,119195],{"class":206,"line":131},[204,119196,118913],{"class":2049},[204,119198,119199],{"class":206,"line":1281},[204,119200,118922],{"class":273},[204,119202,119203],{"class":206,"line":1287},[204,119204,118956],{"class":2049},[19,119206,119207],{},[23,119208],{"alt":125,"src":119209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[49,119211,119213],{"id":119212},"_324-移除snap","3.2.4 移除snap",[19,119215,119216,119217,119222],{},"在删除掉",[62,119218,119221],{"href":119219,"rel":119220},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[66],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[196,119224,119226],{"className":117381,"code":119225,"language":117383,"meta":125,"style":125}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[81,119227,119228,119233,119246,119251,119262],{"__ignoreMap":125},[204,119229,119230],{"class":206,"line":207},[204,119231,119232],{"class":273}," #使用apt移除掉snap\n",[204,119234,119235,119237,119239,119241,119244],{"class":206,"line":126},[204,119236,24663],{"class":2049},[204,119238,117402],{"class":319},[204,119240,117710],{"class":319},[204,119242,119243],{"class":263}," --purge",[204,119245,119169],{"class":319},[204,119247,119248],{"class":206,"line":131},[204,119249,119250],{"class":273},"#移除snapd的一些目录\n",[204,119252,119253,119255,119257,119259],{"class":206,"line":1281},[204,119254,24663],{"class":2049},[204,119256,118638],{"class":319},[204,119258,25412],{"class":263},[204,119260,119261],{"class":319}," \u002Fvar\u002Fcache\u002Fsnapd\n",[204,119263,119264,119266,119268,119270],{"class":206,"line":1287},[204,119265,24663],{"class":2049},[204,119267,118638],{"class":319},[204,119269,25412],{"class":263},[204,119271,119272],{"class":319}," ~\u002Fsnap\n",[19,119274,119275,119276,119279],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[81,119277,119278],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[49,119281,119283],{"id":119282},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119285,119286],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[196,119288,119290],{"className":117381,"code":119289,"language":117383,"meta":125,"style":125},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[81,119291,119292],{"__ignoreMap":125},[204,119293,119294,119296,119298],{"class":206,"line":207},[204,119295,24663],{"class":2049},[204,119297,118668],{"class":319},[204,119299,119300],{"class":319}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119302,119303,119304,119307],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[81,119305,119306],{},":wq"," 回车",[196,119309,119311],{"className":117381,"code":119310,"language":117383,"meta":125,"style":125},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[81,119312,119313,119320,119334],{"__ignoreMap":125},[204,119314,119315,119318],{"class":206,"line":207},[204,119316,119317],{"class":2049},"Package:",[204,119319,119169],{"class":319},[204,119321,119322,119325,119328,119331],{"class":206,"line":126},[204,119323,119324],{"class":2049},"Pin:",[204,119326,119327],{"class":319}," release",[204,119329,119330],{"class":319}," a=",[204,119332,119333],{"class":263},"*\n",[204,119335,119336,119339],{"class":206,"line":131},[204,119337,119338],{"class":2049},"Pin-Priority:",[204,119340,119341],{"class":263}," -10\n",[19,119343,119344],{},[23,119345],{"alt":125,"src":119346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[49,119348,119350],{"id":119349},"_326-测试是否成功","3.2.6 测试是否成功",[196,119352,119354],{"className":117381,"code":119353,"language":117383,"meta":125,"style":125},"sudo apt update\nsudo apt install firefox\n",[81,119355,119356,119364],{"__ignoreMap":125},[204,119357,119358,119360,119362],{"class":206,"line":207},[204,119359,24663],{"class":2049},[204,119361,117402],{"class":319},[204,119363,26328],{"class":319},[204,119365,119366,119368,119370,119372],{"class":206,"line":126},[204,119367,24663],{"class":2049},[204,119369,117402],{"class":319},[204,119371,23921],{"class":319},[204,119373,119090],{"class":319},[19,119375,119376],{},"这里提示snapd无法被安装，就证明成功了",[19,119378,119379],{},[23,119380],{"alt":125,"src":119381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[49,119383,119385],{"id":119384},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119387,119388],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119390,119391],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119393,119394],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[196,119396,119398],{"className":117381,"code":119397,"language":117383,"meta":125,"style":125},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[81,119399,119400,119405,119414,119419,119427],{"__ignoreMap":125},[204,119401,119402],{"class":206,"line":207},[204,119403,119404],{"class":273},"# 添加Mozilla提供的源\n",[204,119406,119407,119409,119411],{"class":206,"line":126},[204,119408,24663],{"class":2049},[204,119410,118929],{"class":319},[204,119412,119413],{"class":319}," ppa:mozillateam\u002Fppa\n",[204,119415,119416],{"class":206,"line":131},[204,119417,119418],{"class":273},"# 安装Firefox\n",[204,119420,119421,119423,119425],{"class":206,"line":1281},[204,119422,24663],{"class":2049},[204,119424,117402],{"class":319},[204,119426,26328],{"class":319},[204,119428,119429,119431,119433,119435],{"class":206,"line":1287},[204,119430,24663],{"class":2049},[204,119432,117402],{"class":319},[204,119434,23921],{"class":319},[204,119436,119090],{"class":319},[49,119438,119440],{"id":119439},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119442,119443],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119445,119446],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[196,119448,119450],{"className":117381,"code":119449,"language":117383,"meta":125,"style":125},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[81,119451,119452,119457,119467,119475,119479],{"__ignoreMap":125},[204,119453,119454],{"class":206,"line":207},[204,119455,119456],{"class":273},"#删掉禁止安装snap的配置文件\n",[204,119458,119459,119461,119463,119465],{"class":206,"line":126},[204,119460,24663],{"class":2049},[204,119462,118638],{"class":319},[204,119464,25412],{"class":263},[204,119466,119300],{"class":319},[204,119468,119469,119471,119473],{"class":206,"line":131},[204,119470,24663],{"class":2049},[204,119472,117402],{"class":319},[204,119474,26328],{"class":319},[204,119476,119477],{"class":206,"line":1281},[204,119478,2486],{"emptyLinePlaceholder":135},[204,119480,119481,119483,119485],{"class":206,"line":1287},[204,119482,24663],{"class":2049},[204,119484,117402],{"class":319},[204,119486,119487],{"class":319}," dist-update\n",[14,119489,119491],{"id":119490},"_33-中文输入法","3.3 中文输入法",[49,119493,119495],{"id":119494},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119497,119498],{},"官网下载搜狗输入法",[19,119500,119501],{},[23,119502],{"alt":125,"src":119503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119505,119506],{},[23,119507],{"alt":125,"src":119508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119510,119511],{},"打开终端输入如下",[196,119513,119515],{"className":117381,"code":119514,"language":117383,"meta":125,"style":125},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[81,119516,119517,119524],{"__ignoreMap":125},[204,119518,119519,119521],{"class":206,"line":207},[204,119520,101361],{"class":263},[204,119522,119523],{"class":319}," ~\u002FDownloads\u002F\n",[204,119525,119526,119528,119530,119532],{"class":206,"line":126},[204,119527,24663],{"class":2049},[204,119529,117402],{"class":319},[204,119531,23921],{"class":319},[204,119533,119534],{"class":319}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119536,119537],{},"打开Fcitx",[19,119539,119540,119543],{},[23,119541],{"alt":125,"src":119542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[23,119544],{"alt":125,"src":119545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119547,119548],{},[23,119549],{"alt":125,"src":119550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119552,119553],{},"添加搜狗输入法",[19,119555,119556],{},[23,119557],{"alt":125,"src":119558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119560,119561],{},[23,119562],{"alt":125,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119565,119566],{},"将搜狗输入法设置为唯一输入法",[19,119568,119569],{},[23,119570],{"alt":125,"src":119571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[49,119573,119575],{"id":119574},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[161,119577,119578],{},[71,119579,119580],{},"卸载旧输入法",[196,119582,119584],{"className":118608,"code":119583,"language":118610,"meta":125,"style":125},"sudo apt purge fcitx* ibus*\n",[81,119585,119586],{"__ignoreMap":125},[204,119587,119588,119590,119592,119594,119597,119599,119602],{"class":206,"line":207},[204,119589,24663],{"class":2049},[204,119591,117402],{"class":319},[204,119593,117743],{"class":319},[204,119595,119596],{"class":319}," fcitx",[204,119598,668],{"class":263},[204,119600,119601],{"class":319}," ibus",[204,119603,119333],{"class":263},[161,119605,119606],{"start":126},[71,119607,119608],{},"安装Fcitx5",[196,119610,119612],{"className":117381,"code":119611,"language":117383,"meta":125,"style":125},"# 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",[81,119613,119614,119619,119633,119637,119642,119651,119659],{"__ignoreMap":125},[204,119615,119616],{"class":206,"line":207},[204,119617,119618],{"class":273},"# Ubuntu22.04及以上、Debian12及以上\n",[204,119620,119621,119623,119625,119627,119630],{"class":206,"line":126},[204,119622,24663],{"class":2049},[204,119624,117402],{"class":319},[204,119626,23921],{"class":319},[204,119628,119629],{"class":319}," fcitx5",[204,119631,119632],{"class":319}," fcitx5-chinese-addons\n",[204,119634,119635],{"class":206,"line":131},[204,119636,2486],{"emptyLinePlaceholder":135},[204,119638,119639],{"class":206,"line":1281},[204,119640,119641],{"class":273},"# Ubuntu20.04\n",[204,119643,119644,119646,119648],{"class":206,"line":1287},[204,119645,24663],{"class":2049},[204,119647,118929],{"class":319},[204,119649,119650],{"class":319}," ppa:zhsj\u002Ffcitx5\n",[204,119652,119653,119655,119657],{"class":206,"line":1301},[204,119654,24663],{"class":2049},[204,119656,117402],{"class":319},[204,119658,26328],{"class":319},[204,119660,119661,119663,119665,119667,119669],{"class":206,"line":1307},[204,119662,24663],{"class":2049},[204,119664,117402],{"class":319},[204,119666,23921],{"class":319},[204,119668,119629],{"class":319},[204,119670,119632],{"class":319},[161,119672,119673,119676],{"start":131},[71,119674,119675],{},"Reboot System",[71,119677,119678],{},"启动Fcitx5",[19,119680,119681],{},[23,119682],{"alt":125,"src":119683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[161,119685,119686],{"start":1287},[71,119687,119688],{},"修改一些设置",[19,119690,119691],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119693,119694],{},[23,119695],{"alt":125,"src":119696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119698,119699],{},"添加快捷键以便于更好切换中英文",[19,119701,119702],{},[23,119703],{"alt":125,"src":119704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[161,119706,119707],{"start":1301},[71,119708,119709],{},"重启",[196,119711,119713],{"className":118608,"code":119712,"language":118610,"meta":125,"style":125},"sudo shutdown -r now\n",[81,119714,119715],{"__ignoreMap":125},[204,119716,119717,119719,119722,119725],{"class":206,"line":207},[204,119718,24663],{"class":2049},[204,119720,119721],{"class":319}," shutdown",[204,119723,119724],{"class":263}," -r",[204,119726,119727],{"class":319}," now\n",[161,119729,119730],{"start":1307},[71,119731,119732],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119734,119735],{},[62,119736,119737],{"href":119737,"rel":119738},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[66],[161,119740,119741],{"start":1398},[71,119742,119743],{},"再重启",[196,119745,119746],{"className":118608,"code":119712,"language":118610,"meta":125,"style":125},[81,119747,119748],{"__ignoreMap":125},[204,119749,119750,119752,119754,119756],{"class":206,"line":207},[204,119751,24663],{"class":2049},[204,119753,119721],{"class":319},[204,119755,119724],{"class":263},[204,119757,119727],{"class":319},[14,119759,119761],{"id":119760},"_34-pip3源替换","3.4 pip3源替换",[19,119763,119764],{},"非Debian系发行版需要做。",[19,119766,119767],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119769,119770],{},"使用dnf的系统也可能不用做。",[196,119772,119774],{"className":117381,"code":119773,"language":117383,"meta":125,"style":125},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[81,119775,119776,119781,119788,119793,119798],{"__ignoreMap":125},[204,119777,119778],{"class":206,"line":207},[204,119779,119780],{"class":273},"# 检查是否已安装 pip\n",[204,119782,119783,119786],{"class":206,"line":126},[204,119784,119785],{"class":2049},"pip3",[204,119787,26379],{"class":263},[204,119789,119790],{"class":206,"line":131},[204,119791,119792],{"class":273},"# 如果未安装，先安装 pip3（见下方）\n",[204,119794,119795],{"class":206,"line":1281},[204,119796,119797],{"class":273},"# 配置 pip 使用清华源\n",[204,119799,119800,119802,119805,119808,119811],{"class":206,"line":1287},[204,119801,119785],{"class":2049},[204,119803,119804],{"class":319}," config",[204,119806,119807],{"class":319}," set",[204,119809,119810],{"class":319}," global.index-url",[204,119812,119813],{"class":319}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119815,119816],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119818,119819],{},[23,119820],{"alt":125,"src":119821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[196,119823,119825],{"className":117381,"code":119824,"language":117383,"meta":125,"style":125},"#安装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",[81,119826,119827,119832,119840,119851,119855,119860,119879,119883,119888,119900,119904,119909],{"__ignoreMap":125},[204,119828,119829],{"class":206,"line":207},[204,119830,119831],{"class":273},"#安装pip3\n",[204,119833,119834,119836,119838],{"class":206,"line":126},[204,119835,24663],{"class":2049},[204,119837,117402],{"class":319},[204,119839,26328],{"class":319},[204,119841,119842,119844,119846,119848],{"class":206,"line":131},[204,119843,24663],{"class":2049},[204,119845,26162],{"class":319},[204,119847,23921],{"class":319},[204,119849,119850],{"class":319}," python3-pip\n",[204,119852,119853],{"class":206,"line":1281},[204,119854,2486],{"emptyLinePlaceholder":135},[204,119856,119857],{"class":206,"line":1287},[204,119858,119859],{"class":273},"#更新pip3\n",[204,119861,119862,119864,119866,119868,119870,119872,119875,119877],{"class":206,"line":1301},[204,119863,100965],{"class":2049},[204,119865,100968],{"class":263},[204,119867,100991],{"class":319},[204,119869,23921],{"class":319},[204,119871,26516],{"class":263},[204,119873,119874],{"class":319}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[204,119876,100996],{"class":263},[204,119878,100999],{"class":319},[204,119880,119881],{"class":206,"line":1307},[204,119882,2486],{"emptyLinePlaceholder":135},[204,119884,119885],{"class":206,"line":1398},[204,119886,119887],{"class":273},"#设置pip源为清华源\n",[204,119889,119890,119892,119894,119896,119898],{"class":206,"line":1404},[204,119891,119785],{"class":2049},[204,119893,119804],{"class":319},[204,119895,119807],{"class":319},[204,119897,119810],{"class":319},[204,119899,119813],{"class":319},[204,119901,119902],{"class":206,"line":1416},[204,119903,2486],{"emptyLinePlaceholder":135},[204,119905,119906],{"class":206,"line":1698},[204,119907,119908],{"class":273},"#测试\n",[204,119910,119911,119913,119915,119917,119919,119921],{"class":206,"line":1703},[204,119912,100965],{"class":2049},[204,119914,100968],{"class":263},[204,119916,100991],{"class":319},[204,119918,23921],{"class":319},[204,119920,100996],{"class":263},[204,119922,100999],{"class":319},[19,119924,119925],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119927,119928],{},[23,119929],{"alt":125,"src":119930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119932,119934],{"id":119933},"_35-显卡驱动安装","3.5 显卡驱动安装",[49,119936,119938],{"id":119937},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[196,119940,119942],{"className":118608,"code":119941,"language":118610,"meta":125,"style":125},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[81,119943,119944,119949,119964,119969],{"__ignoreMap":125},[204,119945,119946],{"class":206,"line":207},[204,119947,119948],{"class":273},"# 如果是使用apt安装的驱动\n",[204,119950,119951,119953,119955,119957,119959,119962],{"class":206,"line":126},[204,119952,24663],{"class":2049},[204,119954,26162],{"class":319},[204,119956,26165],{"class":319},[204,119958,119243],{"class":263},[204,119960,119961],{"class":319}," nvidia",[204,119963,119333],{"class":263},[204,119965,119966],{"class":206,"line":131},[204,119967,119968],{"class":273},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[204,119970,119971,119973],{"class":206,"line":1281},[204,119972,24663],{"class":2049},[204,119974,119975],{"class":319}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[49,119977,119979],{"id":119978},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22085,119981,119983],{"id":119982},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22997,119985,119987],{"id":119986},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[196,119989,119991],{"className":118608,"code":119990,"language":118610,"meta":125,"style":125},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,119992,119993,119998,120009,120014,120024,120029],{"__ignoreMap":125},[204,119994,119995],{"class":206,"line":207},[204,119996,119997],{"class":273},"# 安装英伟达驱动\n",[204,119999,120000,120002,120004,120006],{"class":206,"line":126},[204,120001,24663],{"class":2049},[204,120003,117402],{"class":319},[204,120005,23921],{"class":319},[204,120007,120008],{"class":319}," nvidia-driver-版本号\n",[204,120010,120011],{"class":206,"line":131},[204,120012,120013],{"class":273},"# 重启 \n",[204,120015,120016,120018,120020,120022],{"class":206,"line":1281},[204,120017,24663],{"class":2049},[204,120019,119721],{"class":319},[204,120021,119724],{"class":263},[204,120023,119727],{"class":319},[204,120025,120026],{"class":206,"line":1287},[204,120027,120028],{"class":273},"# 检查驱动是否安装成功\n",[204,120030,120031],{"class":206,"line":1301},[204,120032,120033],{"class":2049},"nvidia-smi\n",[22997,120035,120037],{"id":120036},"_35212-debian","3.5.2.1.2 Debian",[196,120039,120041],{"className":118608,"code":120040,"language":118610,"meta":125,"style":125},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,120042,120043,120047,120061,120065,120075,120079],{"__ignoreMap":125},[204,120044,120045],{"class":206,"line":207},[204,120046,119997],{"class":273},[204,120048,120049,120051,120053,120055,120058],{"class":206,"line":126},[204,120050,24663],{"class":2049},[204,120052,117402],{"class":319},[204,120054,23921],{"class":319},[204,120056,120057],{"class":319}," nvidia-driver",[204,120059,120060],{"class":319}," nvidia-settings\n",[204,120062,120063],{"class":206,"line":131},[204,120064,120013],{"class":273},[204,120066,120067,120069,120071,120073],{"class":206,"line":1281},[204,120068,24663],{"class":2049},[204,120070,119721],{"class":319},[204,120072,119724],{"class":263},[204,120074,119727],{"class":319},[204,120076,120077],{"class":206,"line":1287},[204,120078,120028],{"class":273},[204,120080,120081],{"class":206,"line":1301},[204,120082,120033],{"class":2049},[22085,120084,120086],{"id":120085},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120088,120089,120090,120093],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[30,120091,120092],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120095,120096,120097],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23640,120098,120099],{},[30,120100,120101],{},"（也可以不禁用桌面环境，直接进行下一步。）",[196,120103,120105],{"className":118608,"code":120104,"language":118610,"meta":125,"style":125},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[81,120106,120107,120112,120122,120127,120140,120145],{"__ignoreMap":125},[204,120108,120109],{"class":206,"line":207},[204,120110,120111],{"class":273},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[204,120113,120114,120116,120119],{"class":206,"line":126},[204,120115,24663],{"class":2049},[204,120117,120118],{"class":319}," telinit",[204,120120,120121],{"class":263}," 3\n",[204,120123,120124],{"class":206,"line":131},[204,120125,120126],{"class":273},"# ubuntu 使用下方命令\n",[204,120128,120129,120131,120134,120137],{"class":206,"line":1281},[204,120130,24663],{"class":2049},[204,120132,120133],{"class":319}," service",[204,120135,120136],{"class":319}," lightdm",[204,120138,120139],{"class":319}," stop\n",[204,120141,120142],{"class":206,"line":1287},[204,120143,120144],{"class":273},"# Fedora 使用下方命令\n",[204,120146,120147,120149,120151,120154],{"class":206,"line":1301},[204,120148,24663],{"class":2049},[204,120150,26599],{"class":319},[204,120152,120153],{"class":319}," isolate",[204,120155,120156],{"class":319}," multi-user.target\n",[19,120158,120159],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[196,120161,120163],{"className":118608,"code":120162,"language":118610,"meta":125,"style":125},"# 编译环境+准备工作\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",[81,120164,120165,120170,120181,120186,120193,120198,120210,120215,120222,120227],{"__ignoreMap":125},[204,120166,120167],{"class":206,"line":207},[204,120168,120169],{"class":273},"# 编译环境+准备工作\n",[204,120171,120172,120174,120176,120178],{"class":206,"line":126},[204,120173,24663],{"class":2049},[204,120175,117402],{"class":319},[204,120177,23921],{"class":319},[204,120179,120180],{"class":319}," build-essential\n",[204,120182,120183],{"class":206,"line":131},[204,120184,120185],{"class":273},"# 进入到.run目录中\n",[204,120187,120188,120190],{"class":206,"line":1281},[204,120189,101361],{"class":263},[204,120191,120192],{"class":319}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[204,120194,120195],{"class":206,"line":1287},[204,120196,120197],{"class":273},"# 给驱动文件增加可执行权限：\n",[204,120199,120200,120202,120204,120207],{"class":206,"line":1301},[204,120201,24663],{"class":2049},[204,120203,24666],{"class":319},[204,120205,120206],{"class":319}," a+x",[204,120208,120209],{"class":319}," NVIDIA-Linux-x86_64-550.107.02.run\n",[204,120211,120212],{"class":206,"line":1307},[204,120213,120214],{"class":273},"# 然后执行安装：\n",[204,120216,120217,120219],{"class":206,"line":1398},[204,120218,24663],{"class":2049},[204,120220,120221],{"class":319}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[204,120223,120224],{"class":206,"line":1404},[204,120225,120226],{"class":273},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[204,120228,120229,120231,120234],{"class":206,"line":1416},[204,120230,24663],{"class":2049},[204,120232,120233],{"class":319}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[204,120235,120236],{"class":263},"  --no-opengl-files\n",[19,120238,120239],{},"安装完毕重启即可",[196,120241,120243],{"className":118608,"code":120242,"language":118610,"meta":125,"style":125},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[81,120244,120245,120249,120255,120259],{"__ignoreMap":125},[204,120246,120247],{"class":206,"line":207},[204,120248,120013],{"class":273},[204,120250,120251,120253],{"class":206,"line":126},[204,120252,24663],{"class":2049},[204,120254,26733],{"class":319},[204,120256,120257],{"class":206,"line":131},[204,120258,120028],{"class":273},[204,120260,120261],{"class":206,"line":1281},[204,120262,120033],{"class":2049},[49,120264,120266],{"id":120265},"_353-安装cuda","3.5.3 安装CUDA",[19,120268,120269],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120271,120272],{},[23,120273],{"alt":125,"src":120274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[161,120276,120277],{},[71,120278,120279],{},"先查看显卡驱动所支持的最高CUDA版本",[196,120281,120282],{"className":118608,"code":120033,"language":118610,"meta":125,"style":125},[81,120283,120284],{"__ignoreMap":125},[204,120285,120286],{"class":206,"line":207},[204,120287,120033],{"class":2049},[19,120289,120290],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120292,120293],{},[23,120294],{"alt":125,"src":120295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[161,120297,120298],{"start":126},[71,120299,120300],{},"下载CUDA并安装CUDA",[19,120302,118387,120303],{},[62,120304,118390],{"href":118390,"rel":120305},[66],[19,120307,120308],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120310,120311],{},[23,120312],{"alt":125,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120315,120316,120317,120322],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[62,120318,120321],{"href":120319,"rel":120320},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[66],"Vinci机器人队单片机教程","）",[19,120324,120325],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120327,120328],{},[23,120329],{"alt":125,"src":120330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120332,120333],{},"将最下方框框里的命令敲入终端",[196,120335,120337],{"className":118608,"code":120336,"language":118610,"meta":125,"style":125},"# 在当前文件夹下创建一个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",[81,120338,120339,120344,120353,120358,120365,120370,120378,120383,120394,120399],{"__ignoreMap":125},[204,120340,120341],{"class":206,"line":207},[204,120342,120343],{"class":273},"# 在当前文件夹下创建一个ttt的子文件夹\n",[204,120345,120346,120348,120350],{"class":206,"line":126},[204,120347,101351],{"class":2049},[204,120349,29302],{"class":263},[204,120351,120352],{"class":319}," .\u002Fttt\n",[204,120354,120355],{"class":206,"line":131},[204,120356,120357],{"class":273},"# 进入ttt文件夹\n",[204,120359,120360,120362],{"class":206,"line":1281},[204,120361,101361],{"class":263},[204,120363,120364],{"class":319}," ttt\n",[204,120366,120367],{"class":206,"line":1287},[204,120368,120369],{"class":273},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[204,120371,120372,120375],{"class":206,"line":1301},[204,120373,120374],{"class":2049},"wget",[204,120376,120377],{"class":319}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[204,120379,120380],{"class":206,"line":1307},[204,120381,120382],{"class":273},"# 给予权限\n",[204,120384,120385,120387,120389,120391],{"class":206,"line":1398},[204,120386,24663],{"class":2049},[204,120388,24666],{"class":319},[204,120390,120206],{"class":319},[204,120392,120393],{"class":319}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[204,120395,120396],{"class":206,"line":1404},[204,120397,120398],{"class":273},"# 运行脚本\n",[204,120400,120401,120403],{"class":206,"line":1416},[204,120402,24663],{"class":2049},[204,120404,120393],{"class":319},[19,120406,120407],{},[23,120408],{"alt":125,"src":120409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120411,120412],{},"正在安装中：",[19,120414,120415],{},[23,120416],{"alt":125,"src":120417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120419,120420],{},"输入accept接受即可",[19,120422,120423],{},[23,120424],{"alt":125,"src":120425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120427,120428],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120430,120431],{},[23,120432],{"alt":125,"src":120433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120435,120436],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120438,120439],{},[23,120440],{"alt":125,"src":120441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[161,120443,120444],{"start":131},[71,120445,120446],{},"配置环境",[19,120448,120449],{},"根据上方确认一下路径，比如我上面红色框起来的为",[196,120451,120453],{"className":118608,"code":120452,"language":118610,"meta":125,"style":125},"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",[81,120454,120455,120471,120486],{"__ignoreMap":125},[204,120456,120457,120460,120463,120466,120469],{"class":206,"line":207},[204,120458,120459],{"class":2049},"Please",[204,120461,120462],{"class":319}," make",[204,120464,120465],{"class":319}," sure",[204,120467,120468],{"class":319}," that",[204,120470,2760],{"class":214},[204,120472,120473,120475,120478,120481,120484],{"class":206,"line":126},[204,120474,52357],{"class":2049},[204,120476,120477],{"class":319},"   PATH",[204,120479,120480],{"class":319}," includes",[204,120482,120483],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[204,120485,2760],{"class":214},[204,120487,120488,120490,120493,120495,120498,120501,120503,120506,120509,120512,120515,120517,120520,120522],{"class":206,"line":131},[204,120489,52357],{"class":2049},[204,120491,120492],{"class":319},"   LD_LIBRARY_PATH",[204,120494,120480],{"class":319},[204,120496,120497],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[204,120499,120500],{"class":319}," or,",[204,120502,5296],{"class":319},[204,120504,120505],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[204,120507,120508],{"class":319}," to",[204,120510,120511],{"class":319}," \u002Fetc\u002Fld.so.conf",[204,120513,120514],{"class":319}," and",[204,120516,27316],{"class":319},[204,120518,120519],{"class":319}," ldconfig",[204,120521,64690],{"class":319},[204,120523,120524],{"class":319}," root\n",[19,120526,120527],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[196,120529,120531],{"className":118608,"code":120530,"language":118610,"meta":125,"style":125},"which nvcc\n",[81,120532,120533],{"__ignoreMap":125},[204,120534,120535,120538],{"class":206,"line":207},[204,120536,120537],{"class":263},"which",[204,120539,120540],{"class":319}," nvcc\n",[19,120542,120543],{},[23,120544],{"alt":125,"src":120545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120547,120548],{},"所以我进行以下操作：",[196,120550,120552],{"className":118608,"code":120551,"language":118610,"meta":125,"style":125},"sudo vim ~\u002F.bashrc\n",[81,120553,120554],{"__ignoreMap":125},[204,120555,120556,120558,120560],{"class":206,"line":207},[204,120557,24663],{"class":2049},[204,120559,118668],{"class":319},[204,120561,120562],{"class":319}," ~\u002F.bashrc\n",[19,120564,120565],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[196,120567,120569],{"className":118608,"code":120568,"language":118610,"meta":125,"style":125},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[81,120570,120571,120583],{"__ignoreMap":125},[204,120572,120573,120575,120578,120580],{"class":206,"line":207},[204,120574,25129],{"class":210},[204,120576,120577],{"class":214}," PATH",[204,120579,260],{"class":210},[204,120581,120582],{"class":214},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[204,120584,120585,120587,120590,120592],{"class":206,"line":126},[204,120586,25129],{"class":210},[204,120588,120589],{"class":214}," LD_LIBRARY_PATH",[204,120591,260],{"class":210},[204,120593,120594],{"class":214},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120596,120597],{},[23,120598],{"alt":125,"src":120599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[196,120601,120603],{"className":118608,"code":120602,"language":118610,"meta":125,"style":125},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[81,120604,120605,120610,120616,120621],{"__ignoreMap":125},[204,120606,120607],{"class":206,"line":207},[204,120608,120609],{"class":273},"# 刷新当前终端的环境变量\n",[204,120611,120612,120614],{"class":206,"line":126},[204,120613,100979],{"class":263},[204,120615,120562],{"class":319},[204,120617,120618],{"class":206,"line":131},[204,120619,120620],{"class":273},"# 验证CUDA是否安装成功\n",[204,120622,120623,120626],{"class":206,"line":1281},[204,120624,120625],{"class":2049},"nvcc",[204,120627,120628],{"class":263}," -V\n",[19,120630,120631],{},"出现下图这种则安装成功。",[19,120633,120634],{},[23,120635],{"alt":125,"src":120636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[49,120638,120640],{"id":120639},"_354-安装cudnn","3.5.4 安装cuDNN",[161,120642,120643],{},[71,120644,120645],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120647,120648,120649,120654],{},"前往 NVIDIA cuDNN 下载页面：",[62,120650,120653],{"href":120651,"rel":120652},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[66],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120656,120657],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120659,120660],{},[23,120661],{"alt":125,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120664,120665],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120667,120668],{},[23,120669],{"alt":125,"src":120670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120672,120673],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120675,120676],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120678,120679],{},[30,120680,120681],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120683,120684],{},"下载好的：",[19,120686,120687],{},[23,120688],{"alt":125,"src":120689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[161,120691,120692],{"start":126},[71,120693,120694],{},"安装cuDNN",[19,120696,120697],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120699,120700],{},[23,120701],{"alt":125,"src":120702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120704,120705],{},"解压文件，并复制到对应位置完成安装",[196,120707,120709],{"className":118608,"code":120708,"language":118610,"meta":125,"style":125},"# 解压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",[81,120710,120711,120716,120727,120732,120739,120744,120760,120774,120779,120790,120799,120803,120819],{"__ignoreMap":125},[204,120712,120713],{"class":206,"line":207},[204,120714,120715],{"class":273},"# 解压cuDNN文件\n",[204,120717,120718,120721,120724],{"class":206,"line":126},[204,120719,120720],{"class":2049},"tar",[204,120722,120723],{"class":263}," -xvf",[204,120725,120726],{"class":319}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[204,120728,120729],{"class":206,"line":131},[204,120730,120731],{"class":273},"# cd进文件夹\n",[204,120733,120734,120736],{"class":206,"line":1281},[204,120735,101361],{"class":263},[204,120737,120738],{"class":319}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[204,120740,120741],{"class":206,"line":1287},[204,120742,120743],{"class":273},"# 复制cuDNN文件到CUDA目录\n",[204,120745,120746,120748,120750,120753,120755,120758],{"class":206,"line":1301},[204,120747,24663],{"class":2049},[204,120749,27947],{"class":319},[204,120751,120752],{"class":319}," include\u002Fcudnn",[204,120754,668],{"class":263},[204,120756,120757],{"class":319},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[204,120759,2760],{"class":214},[204,120761,120762,120764,120766,120769,120771],{"class":206,"line":1307},[204,120763,24663],{"class":2049},[204,120765,27947],{"class":319},[204,120767,120768],{"class":319}," lib\u002Flibcudnn",[204,120770,668],{"class":263},[204,120772,120773],{"class":319},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[204,120775,120776],{"class":206,"line":1398},[204,120777,120778],{"class":273},"# 对比一下有没有缺文件\n",[204,120780,120781,120783,120786,120788],{"class":206,"line":1404},[204,120782,26847],{"class":2049},[204,120784,120785],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[204,120787,668],{"class":263},[204,120789,2760],{"class":214},[204,120791,120792,120794,120797],{"class":206,"line":1416},[204,120793,26847],{"class":2049},[204,120795,120796],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[204,120798,119333],{"class":263},[204,120800,120801],{"class":206,"line":1698},[204,120802,120382],{"class":273},[204,120804,120805,120807,120809,120812,120814,120816],{"class":206,"line":1703},[204,120806,24663],{"class":2049},[204,120808,24666],{"class":319},[204,120810,120811],{"class":319}," a+r",[204,120813,120785],{"class":319},[204,120815,668],{"class":263},[204,120817,120818],{"class":214},"   \n",[204,120820,120821,120823,120825,120827,120829],{"class":206,"line":1709},[204,120822,24663],{"class":2049},[204,120824,24666],{"class":319},[204,120826,120811],{"class":319},[204,120828,120796],{"class":319},[204,120830,119333],{"class":263},[161,120832,120833],{"start":131},[71,120834,120835],{},"检查是否安装成功",[196,120837,120839],{"className":118608,"code":120838,"language":118610,"meta":125,"style":125},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[81,120840,120841,120846],{"__ignoreMap":125},[204,120842,120843],{"class":206,"line":207},[204,120844,120845],{"class":273},"# 检查cuDNN版本命令\n",[204,120847,120848,120851,120854,120856,120858,120861,120864],{"class":206,"line":126},[204,120849,120850],{"class":2049},"cat",[204,120852,120853],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[204,120855,25196],{"class":210},[204,120857,30322],{"class":2049},[204,120859,120860],{"class":319}," CUDNN_MAJOR",[204,120862,120863],{"class":263}," -A",[204,120865,47809],{"class":263},[19,120867,120868],{},"出现下图这样的就是安装成功了",[19,120870,120871],{},[23,120872],{"alt":125,"src":120873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[161,120875,120876],{"start":1281},[71,120877,120878],{},"软链接(一般不需要)",[196,120880,120882],{"className":118608,"code":120881,"language":118610,"meta":125,"style":125},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[81,120883,120884,120889],{"__ignoreMap":125},[204,120885,120886],{"class":206,"line":207},[204,120887,120888],{"class":273},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[204,120890,120891,120893],{"class":206,"line":126},[204,120892,24663],{"class":2049},[204,120894,120895],{"class":319}," ldconfig\n",[19,120897,120898],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[196,120900,120905],{"className":120901,"code":120902,"language":120903,"meta":120904,"style":125},"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",[81,120906,120907,120912,120917,120922,120927,120932,120937],{"__ignoreMap":125},[204,120908,120909],{"class":206,"line":207},[204,120910,120911],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[204,120913,120914],{"class":206,"line":126},[204,120915,120916],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[204,120918,120919],{"class":206,"line":131},[204,120920,120921],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[204,120923,120924],{"class":206,"line":1281},[204,120925,120926],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[204,120928,120929],{"class":206,"line":1287},[204,120930,120931],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[204,120933,120934],{"class":206,"line":1301},[204,120935,120936],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[204,120938,120939],{"class":206,"line":1307},[204,120940,120941],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,120943,120944],{},"运行下方的命令",[196,120946,120948],{"className":118608,"code":120947,"language":118610,"meta":125,"style":125},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[81,120949,120950,120955,120962,120967],{"__ignoreMap":125},[204,120951,120952],{"class":206,"line":207},[204,120953,120954],{"class":273},"# cd进入CUDA路径\n",[204,120956,120957,120959],{"class":206,"line":126},[204,120958,101361],{"class":263},[204,120960,120961],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[204,120963,120964],{"class":206,"line":131},[204,120965,120966],{"class":273}," # 查看本路径下的需要软链接的文件名\n",[204,120968,120969],{"class":206,"line":1281},[204,120970,120971],{"class":2049}," ls\n",[19,120973,120974],{},[23,120975],{"alt":125,"src":120976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,120978,120979,120980,18497,120983,18497,120986,120989],{},"如上图，我需要将",[81,120981,120982],{},"libcudnn_xxx_xxxxx.so.8.9.7",[81,120984,120985],{},"libcudnn_xxx_xxxxx.so.8",[81,120987,120988],{},"libcudnn_xxx_xxxxx.so","软链接",[196,120991,120993],{"className":118608,"code":120992,"language":118610,"meta":125,"style":125},"# 创建符号链接。对于每个 .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",[81,120994,120995,121000,121016,121030,121044,121058,121072,121086,121100,121105,121111,121116],{"__ignoreMap":125},[204,120996,120997],{"class":206,"line":207},[204,120998,120999],{"class":273},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[204,121001,121002,121004,121007,121010,121013],{"class":206,"line":126},[204,121003,24663],{"class":2049},[204,121005,121006],{"class":319}," ln",[204,121008,121009],{"class":263}," -sf",[204,121011,121012],{"class":319}," libcudnn_cnn_train.so.8.9.7",[204,121014,121015],{"class":319}," libcudnn_cnn_train.so.8\n",[204,121017,121018,121020,121022,121024,121027],{"class":206,"line":131},[204,121019,24663],{"class":2049},[204,121021,121006],{"class":319},[204,121023,121009],{"class":263},[204,121025,121026],{"class":319}," libcudnn_adv_infer.so.8.9.7",[204,121028,121029],{"class":319}," libcudnn_adv_infer.so.8\n",[204,121031,121032,121034,121036,121038,121041],{"class":206,"line":1281},[204,121033,24663],{"class":2049},[204,121035,121006],{"class":319},[204,121037,121009],{"class":263},[204,121039,121040],{"class":319}," libcudnn_adv_train.so.8.9.7",[204,121042,121043],{"class":319}," libcudnn_adv_train.so.8\n",[204,121045,121046,121048,121050,121052,121055],{"class":206,"line":1287},[204,121047,24663],{"class":2049},[204,121049,121006],{"class":319},[204,121051,121009],{"class":263},[204,121053,121054],{"class":319}," libcudnn_cnn_infer.so.8.9.7",[204,121056,121057],{"class":319}," libcudnn_cnn_infer.so.8\n",[204,121059,121060,121062,121064,121066,121069],{"class":206,"line":1301},[204,121061,24663],{"class":2049},[204,121063,121006],{"class":319},[204,121065,121009],{"class":263},[204,121067,121068],{"class":319}," libcudnn.so.8.9.7",[204,121070,121071],{"class":319}," libcudnn.so.8\n",[204,121073,121074,121076,121078,121080,121083],{"class":206,"line":1307},[204,121075,24663],{"class":2049},[204,121077,121006],{"class":319},[204,121079,121009],{"class":263},[204,121081,121082],{"class":319}," libcudnn_ops_infer.so.8.9.7",[204,121084,121085],{"class":319}," libcudnn_ops_infer.so.8\n",[204,121087,121088,121090,121092,121094,121097],{"class":206,"line":1398},[204,121089,24663],{"class":2049},[204,121091,121006],{"class":319},[204,121093,121009],{"class":263},[204,121095,121096],{"class":319}," libcudnn_ops_train.so.8.9.7",[204,121098,121099],{"class":319}," libcudnn_ops_train.so.8\n",[204,121101,121102],{"class":206,"line":1404},[204,121103,121104],{"class":273},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[204,121106,121107,121109],{"class":206,"line":1416},[204,121108,24663],{"class":2049},[204,121110,120895],{"class":319},[204,121112,121113],{"class":206,"line":1698},[204,121114,121115],{"class":273},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[204,121117,121118,121120,121123,121126,121128,121131],{"class":206,"line":1703},[204,121119,26847],{"class":2049},[204,121121,121122],{"class":263}," -l",[204,121124,121125],{"class":319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[204,121127,668],{"class":263},[204,121129,121130],{"class":319},".so",[204,121132,119333],{"class":263},[49,121134,121136],{"id":121135},"_355-常见问题","3.5.5 常见问题",[161,121138,121139],{},[71,121140,121141],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[196,121143,121145],{"className":118608,"code":121144,"language":118610,"meta":125,"style":125},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[81,121146,121147],{"__ignoreMap":125},[204,121148,121149,121151,121153],{"class":206,"line":207},[204,121150,24663],{"class":2049},[204,121152,118668],{"class":319},[204,121154,121155],{"class":319}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121157,121158],{},"blacklist-nouveau.conf文件内容如下：",[196,121160,121162],{"className":118608,"code":121161,"language":118610,"meta":125,"style":125},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[81,121163,121164,121172,121179,121191,121201],{"__ignoreMap":125},[204,121165,121166,121169],{"class":206,"line":207},[204,121167,121168],{"class":2049},"blacklist",[204,121170,121171],{"class":319}," nouveau\n",[204,121173,121174,121176],{"class":206,"line":126},[204,121175,121168],{"class":2049},[204,121177,121178],{"class":319}," lbm-nouveau\n",[204,121180,121181,121183,121186,121189],{"class":206,"line":131},[204,121182,116015],{"class":2049},[204,121184,121185],{"class":319}," nouveau",[204,121187,121188],{"class":319}," modeset=",[204,121190,3171],{"class":263},[204,121192,121193,121196,121198],{"class":206,"line":1281},[204,121194,121195],{"class":263},"alias",[204,121197,121185],{"class":319},[204,121199,121200],{"class":319}," off\n",[204,121202,121203,121205,121208],{"class":206,"line":1287},[204,121204,121195],{"class":263},[204,121206,121207],{"class":319}," lbm-nouveau",[204,121209,121200],{"class":319},[19,121211,121212],{},"接着运行下方命令",[196,121214,121216],{"className":118608,"code":121215,"language":118610,"meta":125,"style":125},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[81,121217,121218,121228,121233],{"__ignoreMap":125},[204,121219,121220,121222,121225],{"class":206,"line":207},[204,121221,24663],{"class":2049},[204,121223,121224],{"class":319}," update-initramfs",[204,121226,121227],{"class":263}," -u\n",[204,121229,121230],{"class":206,"line":126},[204,121231,121232],{"class":2049},"或者\n",[204,121234,121235,121237,121240],{"class":206,"line":131},[204,121236,24663],{"class":2049},[204,121238,121239],{"class":319}," dracut",[204,121241,121242],{"class":263}," --force\n",[19,121244,121245],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[196,121247,121249],{"className":118608,"code":121248,"language":118610,"meta":125,"style":125},"lsmod | grep nouveau\n",[81,121250,121251],{"__ignoreMap":125},[204,121252,121253,121256,121258,121260],{"class":206,"line":207},[204,121254,121255],{"class":2049},"lsmod",[204,121257,25196],{"class":210},[204,121259,30322],{"class":2049},[204,121261,121171],{"class":319},[161,121263,121264],{"start":126},[71,121265,121266],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[196,121268,121270],{"className":118608,"code":121269,"language":118610,"meta":125,"style":125},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[81,121271,121272],{"__ignoreMap":125},[204,121273,121274,121276,121278],{"class":206,"line":207},[204,121275,24663],{"class":2049},[204,121277,118668],{"class":319},[204,121279,121280],{"class":319}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121282,121283],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[196,121285,121287],{"className":118608,"code":121286,"language":118610,"meta":125,"style":125},"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",[81,121288,121289,121297,121305,121313,121320,121328,121338,121346],{"__ignoreMap":125},[204,121290,121291,121294],{"class":206,"line":207},[204,121292,121293],{"class":2049},"Section",[204,121295,121296],{"class":319}," \"OutputClass\"\n",[204,121298,121299,121302],{"class":206,"line":126},[204,121300,121301],{"class":2049},"   Identifier",[204,121303,121304],{"class":319}," \"nvidia\"\n",[204,121306,121307,121310],{"class":206,"line":131},[204,121308,121309],{"class":2049},"   MatchDriver",[204,121311,121312],{"class":319}," \"nvidia-drm\"\n",[204,121314,121315,121318],{"class":206,"line":1281},[204,121316,121317],{"class":2049},"   Driver",[204,121319,121304],{"class":319},[204,121321,121322,121325],{"class":206,"line":1287},[204,121323,121324],{"class":2049},"   Option",[204,121326,121327],{"class":319}," \"AllowEmptyInitialConfiguration\"\n",[204,121329,121330,121332,121335],{"class":206,"line":1301},[204,121331,121324],{"class":2049},[204,121333,121334],{"class":319}," \"PrimaryGPU\"",[204,121336,121337],{"class":319}," \"yes\"\n",[204,121339,121340,121343],{"class":206,"line":1307},[204,121341,121342],{"class":2049},"   ModulePath",[204,121344,121345],{"class":319}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[204,121347,121348],{"class":206,"line":1398},[204,121349,121350],{"class":2049},"EndSection\n",[161,121352,121353],{"start":131},[71,121354,121355],{},"安装N卡驱动提示错误",[196,121357,121359],{"className":120901,"code":121358,"language":120903,"meta":120904,"style":125},"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",[81,121360,121361],{"__ignoreMap":125},[204,121362,121363],{"class":206,"line":207},[204,121364,121358],{},[161,121366,121367],{},[71,121368,121369],{},"检查当前运行的内核版本：",[19,121371,121372],{},"运行以下命令以查看你当前正在使用的内核版本：",[196,121374,121376],{"className":117381,"code":121375,"language":117383,"meta":125,"style":125},"uname -r\n",[81,121377,121378],{"__ignoreMap":125},[204,121379,121380,121382],{"class":206,"line":207},[204,121381,70290],{"class":2049},[204,121383,121384],{"class":263}," -r\n",[161,121386,121387],{"start":126},[71,121388,121389],{},"安装内核开发文件：",[19,121391,121392,121393,121396],{},"确保你已经安装了与当前内核版本相匹配的 ",[81,121394,121395],{},"kernel-devel"," 包。运行以下命令来安装：",[196,121398,121400],{"className":117381,"code":121399,"language":117383,"meta":125,"style":125},"sudo dnf install kernel-devel-$(uname -r)\n",[81,121401,121402],{"__ignoreMap":125},[204,121403,121404,121406,121408,121410,121413,121415,121417,121419],{"class":206,"line":207},[204,121405,24663],{"class":2049},[204,121407,26401],{"class":319},[204,121409,23921],{"class":319},[204,121411,121412],{"class":319}," kernel-devel-",[204,121414,25186],{"class":214},[204,121416,70290],{"class":2049},[204,121418,119724],{"class":263},[204,121420,221],{"class":214},[19,121422,121423],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[161,121425,121426],{"start":131},[71,121427,121428],{},"安装内核源代码（如果需要）：",[19,121430,121431],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[196,121433,121435],{"className":117381,"code":121434,"language":117383,"meta":125,"style":125},"sudo dnf install kernel-headers kernel-source\n",[81,121436,121437],{"__ignoreMap":125},[204,121438,121439,121441,121443,121445,121448],{"class":206,"line":207},[204,121440,24663],{"class":2049},[204,121442,26401],{"class":319},[204,121444,23921],{"class":319},[204,121446,121447],{"class":319}," kernel-headers",[204,121449,121450],{"class":319}," kernel-source\n",[161,121452,121453],{"start":1281},[71,121454,121455],{},"检查安装：",[19,121457,121458,121459,121462],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[81,121460,121461],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[196,121464,121466],{"className":117381,"code":121465,"language":117383,"meta":125,"style":125},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[81,121467,121468],{"__ignoreMap":125},[204,121469,121470,121472],{"class":206,"line":207},[204,121471,26847],{"class":2049},[204,121473,121474],{"class":319}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121476,121477,121478,121481],{},"如果仍然遇到问题，可以通过 ",[81,121479,121480],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5213,121483,121484],{},"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":125,"searchDepth":126,"depth":126,"links":121486},[121487,121491,121501,121505,121506],{"id":118584,"depth":126,"text":118585,"children":121488},[121489,121490],{"id":118594,"depth":131,"text":118595},{"id":118604,"depth":131,"text":118605},{"id":118804,"depth":126,"text":118805,"children":121492},[121493,121494,121495,121496,121497,121498,121499,121500],{"id":118808,"depth":131,"text":118809},{"id":118878,"depth":131,"text":118879},{"id":118967,"depth":131,"text":118968},{"id":119212,"depth":131,"text":119213},{"id":119282,"depth":131,"text":119283},{"id":119349,"depth":131,"text":119350},{"id":119384,"depth":131,"text":119385},{"id":119439,"depth":131,"text":119440},{"id":119490,"depth":126,"text":119491,"children":121502},[121503,121504],{"id":119494,"depth":131,"text":119495},{"id":119574,"depth":131,"text":119575},{"id":119760,"depth":126,"text":119761},{"id":119933,"depth":126,"text":119934,"children":121507},[121508,121509,121510,121511,121512],{"id":119937,"depth":131,"text":119938},{"id":119978,"depth":131,"text":119979},{"id":120265,"depth":131,"text":120266},{"id":120639,"depth":131,"text":120640},{"id":121135,"depth":131,"text":121136},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118576,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121519,"title":121520,"body":121521,"description":132,"extension":133,"meta":121861,"navigation":135,"path":121862,"seo":121863,"stem":121864,"__hash__":121865},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121522,"toc":121859},[121523,121526,121531,121534,121780,121785,121788,121824,121827,121856],[10,121524,121520],{"id":121525},"_4-命令教程长期积累",[161,121527,121528],{},[71,121529,121530],{},"大多数命令",[19,121532,121533],{},"常用 Linux 命令速查：",[196,121535,121537],{"className":117381,"code":121536,"language":117383,"meta":125,"style":125},"# 文件与目录\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",[81,121538,121539,121544,121551,121558,121566,121573,121580,121588,121596,121603,121610,121618,121622,121627,121634,121642,121649,121653,121658,121665,121673,121681,121689,121697,121701,121706,121714,121721,121728,121736,121744,121748,121753,121762,121771],{"__ignoreMap":125},[204,121540,121541],{"class":206,"line":207},[204,121542,121543],{"class":273},"# 文件与目录\n",[204,121545,121546,121548],{"class":206,"line":126},[204,121547,26847],{"class":2049},[204,121549,121550],{"class":273},"        # 列出目录内容\n",[204,121552,121553,121555],{"class":206,"line":131},[204,121554,101361],{"class":263},[204,121556,121557],{"class":273},"        # 切换目录\n",[204,121559,121560,121563],{"class":206,"line":1281},[204,121561,121562],{"class":263},"pwd",[204,121564,121565],{"class":273},"       # 显示当前路径\n",[204,121567,121568,121570],{"class":206,"line":1287},[204,121569,101351],{"class":2049},[204,121571,121572],{"class":273},"     # 创建目录\n",[204,121574,121575,121577],{"class":206,"line":1301},[204,121576,25409],{"class":2049},[204,121578,121579],{"class":273},"        # 删除文件或目录\n",[204,121581,121582,121585],{"class":206,"line":1307},[204,121583,121584],{"class":2049},"cp",[204,121586,121587],{"class":273},"        # 复制文件或目录\n",[204,121589,121590,121593],{"class":206,"line":1398},[204,121591,121592],{"class":2049},"mv",[204,121594,121595],{"class":273},"        # 移动\u002F重命名文件或目录\n",[204,121597,121598,121600],{"class":206,"line":1404},[204,121599,101368],{"class":2049},[204,121601,121602],{"class":273},"     # 创建空文件\n",[204,121604,121605,121607],{"class":206,"line":1416},[204,121606,120850],{"class":2049},[204,121608,121609],{"class":273},"       # 查看文件内容\n",[204,121611,121612,121615],{"class":206,"line":1698},[204,121613,121614],{"class":2049},"head\u002Ftail",[204,121616,121617],{"class":273}," # 查看文件头部\u002F尾部\n",[204,121619,121620],{"class":206,"line":1703},[204,121621,2486],{"emptyLinePlaceholder":135},[204,121623,121624],{"class":206,"line":1709},[204,121625,121626],{"class":273},"# 权限管理\n",[204,121628,121629,121631],{"class":206,"line":1714},[204,121630,24698],{"class":2049},[204,121632,121633],{"class":273},"     # 修改文件权限\n",[204,121635,121636,121639],{"class":206,"line":1728},[204,121637,121638],{"class":2049},"chown",[204,121640,121641],{"class":273},"     # 修改文件所有者\n",[204,121643,121644,121646],{"class":206,"line":1733},[204,121645,24663],{"class":2049},[204,121647,121648],{"class":273},"      # 以管理员身份执行\n",[204,121650,121651],{"class":206,"line":1739},[204,121652,2486],{"emptyLinePlaceholder":135},[204,121654,121655],{"class":206,"line":1760},[204,121656,121657],{"class":273},"# 系统信息\n",[204,121659,121660,121662],{"class":206,"line":1765},[204,121661,70290],{"class":2049},[204,121663,121664],{"class":273},"     # 系统信息\n",[204,121666,121667,121670],{"class":206,"line":1779},[204,121668,121669],{"class":2049},"df",[204,121671,121672],{"class":273},"        # 磁盘使用情况\n",[204,121674,121675,121678],{"class":206,"line":1784},[204,121676,121677],{"class":2049},"free",[204,121679,121680],{"class":273},"      # 内存使用情况\n",[204,121682,121683,121686],{"class":206,"line":1813},[204,121684,121685],{"class":2049},"top\u002Fhtop",[204,121687,121688],{"class":273},"  # 进程监控\n",[204,121690,121691,121694],{"class":206,"line":1818},[204,121692,121693],{"class":2049},"ps",[204,121695,121696],{"class":273},"        # 查看进程\n",[204,121698,121699],{"class":206,"line":1835},[204,121700,2486],{"emptyLinePlaceholder":135},[204,121702,121703],{"class":206,"line":1840},[204,121704,121705],{"class":273},"# 网络\n",[204,121707,121708,121711],{"class":206,"line":1845},[204,121709,121710],{"class":2049},"ping",[204,121712,121713],{"class":273},"      # 测试网络连通性\n",[204,121715,121716,121718],{"class":206,"line":1850},[204,121717,26935],{"class":2049},[204,121719,121720],{"class":273},"      # 发送 HTTP 请求\n",[204,121722,121723,121725],{"class":206,"line":1864},[204,121724,120374],{"class":2049},[204,121726,121727],{"class":273},"      # 下载文件\n",[204,121729,121730,121733],{"class":206,"line":1869},[204,121731,121732],{"class":2049},"ssh",[204,121734,121735],{"class":273},"       # 远程登录\n",[204,121737,121738,121741],{"class":206,"line":2663},[204,121739,121740],{"class":2049},"scp",[204,121742,121743],{"class":273},"       # 远程文件传输\n",[204,121745,121746],{"class":206,"line":2677},[204,121747,2486],{"emptyLinePlaceholder":135},[204,121749,121750],{"class":206,"line":2685},[204,121751,121752],{"class":273},"# 包管理（Debian\u002FUbuntu）\n",[204,121754,121755,121757,121759],{"class":206,"line":2690},[204,121756,117453],{"class":2049},[204,121758,117432],{"class":319},[204,121760,121761],{"class":273},"   # 更新软件源\n",[204,121763,121764,121766,121768],{"class":206,"line":2696},[204,121765,117453],{"class":2049},[204,121767,23921],{"class":319},[204,121769,121770],{"class":273},"  # 安装软件包\n",[204,121772,121773,121775,121777],{"class":206,"line":2702},[204,121774,117453],{"class":2049},[204,121776,26165],{"class":319},[204,121778,121779],{"class":273},"   # 卸载软件包\n",[161,121781,121782],{"start":126},[71,121783,121784],{},"KDE Dolphin 以root打开",[19,121786,121787],{},"kde5",[196,121789,121791],{"className":117381,"code":121790,"language":117383,"meta":125,"style":125},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[81,121792,121793],{"__ignoreMap":125},[204,121794,121795,121798,121801,121804,121806,121808,121811,121814,121816,121819,121821],{"class":206,"line":207},[204,121796,121797],{"class":2049},"pkexec",[204,121799,121800],{"class":319}," env",[204,121802,121803],{"class":319}," DISPLAY=",[204,121805,28229],{"class":214},[204,121807,28287],{"class":319},[204,121809,121810],{"class":214},"$XAUTHORITY ",[204,121812,121813],{"class":319},"KDE_SESSION_VERSION=",[204,121815,532],{"class":263},[204,121817,121818],{"class":319}," KDE_FULL_SESSION=",[204,121820,1449],{"class":263},[204,121822,121823],{"class":319}," dolphin\n",[19,121825,121826],{},"kde6",[196,121828,121830],{"className":117381,"code":121829,"language":117383,"meta":125,"style":125},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[81,121831,121832],{"__ignoreMap":125},[204,121833,121834,121836,121838,121840,121842,121844,121846,121848,121850,121852,121854],{"class":206,"line":207},[204,121835,121797],{"class":2049},[204,121837,121800],{"class":319},[204,121839,121803],{"class":319},[204,121841,28229],{"class":214},[204,121843,28287],{"class":319},[204,121845,121810],{"class":214},[204,121847,121813],{"class":319},[204,121849,557],{"class":263},[204,121851,121818],{"class":319},[204,121853,1449],{"class":263},[204,121855,121823],{"class":319},[5213,121857,121858],{},"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":125,"searchDepth":126,"depth":126,"links":121860},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121520,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121867,"title":121868,"body":121869,"description":132,"extension":133,"meta":121883,"navigation":135,"path":121884,"seo":121885,"stem":121886,"__hash__":121887},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121870,"toc":121881},[121871,121874],[10,121872,121868],{"id":121873},"_5-各种环境配置",[19,121875,121876],{},[62,121877,121880],{"href":121878,"rel":121879},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[66],"电控组环境搭建大全",{"title":125,"searchDepth":126,"depth":126,"links":121882},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121868,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121889,"title":121890,"body":121891,"description":132,"extension":133,"meta":122239,"navigation":135,"path":122240,"seo":122241,"stem":122242,"__hash__":122243},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121892,"toc":122231},[121893,121896,121900,121904,121908,121913,121920,121924,122217,122221,122228],[10,121894,121890],{"id":121895},"_6-拓展功能",[14,121897,121899],{"id":121898},"_61-wine","6.1 Wine",[14,121901,121903],{"id":121902},"_62-android","6.2 Android",[49,121905,121907],{"id":121906},"_621-i卡a卡","6.2.1 I卡、A卡",[161,121909,121910],{},[71,121911,121912],{},"Wayland-Waydroid(体验超级好)",[19,121914,121915,121916],{},"Waydroid 官网与安装指南：",[62,121917,121918],{"href":121918,"rel":121919},"https:\u002F\u002Fwaydro.id\u002F",[66],[49,121921,121923],{"id":121922},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[161,121925,121926],{},[71,121927,121928,121929,121931,121932,121936,121938,121941,121946,122143],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53802,121930],{},"BlissOS 官网下载：",[62,121933,121934],{"href":121934,"rel":121935},"https:\u002F\u002Fblissos.org\u002F",[66],[53802,121937],{},[23,121939],{"alt":125,"src":121940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[161,121942,121943],{"start":131},[71,121944,121945],{},"比较推荐的配置",[196,121947,121949],{"className":117381,"code":121948,"language":117383,"meta":125,"style":125},"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",[81,121950,121951,121958,121968,121978,121988,122000,122010,122017,122027,122036,122045,122055,122065,122074,122084,122094,122106,122116,122125,122135],{"__ignoreMap":125},[204,121952,121953,121956],{"class":206,"line":207},[204,121954,121955],{"class":2049},"qemu-system-x86_64",[204,121957,24765],{"class":263},[204,121959,121960,121963,121966],{"class":206,"line":126},[204,121961,121962],{"class":263},"        -M",[204,121964,121965],{"class":319}," q35,vmport=off",[204,121967,24765],{"class":263},[204,121969,121970,121973,121976],{"class":206,"line":131},[204,121971,121972],{"class":263},"        -accel",[204,121974,121975],{"class":319}," kvm",[204,121977,24765],{"class":263},[204,121979,121980,121983,121986],{"class":206,"line":1281},[204,121981,121982],{"class":263},"        -cpu",[204,121984,121985],{"class":319}," qemu64,+sse3,+sse4.2",[204,121987,24765],{"class":263},[204,121989,121990,121993,121996,121998],{"class":206,"line":1287},[204,121991,121992],{"class":263},"        -smp",[204,121994,121995],{"class":319}," 8,cores=",[204,121997,506],{"class":263},[204,121999,24765],{"class":263},[204,122001,122002,122005,122008],{"class":206,"line":1301},[204,122003,122004],{"class":263},"        -m",[204,122006,122007],{"class":319}," 6G",[204,122009,24765],{"class":263},[204,122011,122012,122015],{"class":206,"line":1307},[204,122013,122014],{"class":263},"        -usb",[204,122016,24765],{"class":263},[204,122018,122019,122022,122025],{"class":206,"line":1398},[204,122020,122021],{"class":263},"        -device",[204,122023,122024],{"class":319}," virtio-tablet",[204,122026,24765],{"class":263},[204,122028,122029,122031,122034],{"class":206,"line":1404},[204,122030,122021],{"class":263},[204,122032,122033],{"class":319}," virtio-keyboard",[204,122035,24765],{"class":263},[204,122037,122038,122040,122043],{"class":206,"line":1416},[204,122039,122021],{"class":263},[204,122041,122042],{"class":319}," usb-tablet",[204,122044,24765],{"class":263},[204,122046,122047,122050,122053],{"class":206,"line":1698},[204,122048,122049],{"class":263},"        -bios",[204,122051,122052],{"class":319}," OVMF-pure-efi64.fd",[204,122054,24765],{"class":263},[204,122056,122057,122060,122063],{"class":206,"line":1703},[204,122058,122059],{"class":263},"        -net",[204,122061,122062],{"class":319}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[204,122064,24765],{"class":263},[204,122066,122067,122069,122072],{"class":206,"line":1709},[204,122068,122059],{"class":263},[204,122070,122071],{"class":319}," nic,model=virtio",[204,122073,24765],{"class":263},[204,122075,122076,122079,122082],{"class":206,"line":1714},[204,122077,122078],{"class":263},"        -audio",[204,122080,122081],{"class":319}," sdl,model=hda",[204,122083,24765],{"class":263},[204,122085,122086,122089,122092],{"class":206,"line":1728},[204,122087,122088],{"class":263},"        -display",[204,122090,122091],{"class":319}," sdl,gl=on,show-cursor=on",[204,122093,24765],{"class":263},[204,122095,122096,122098,122101,122104],{"class":206,"line":1733},[204,122097,122021],{"class":263},[204,122099,122100],{"class":319}," virtio-vga-gl,xres=1920,yres=",[204,122102,122103],{"class":263},"1080",[204,122105,24765],{"class":263},[204,122107,122108,122111,122114],{"class":206,"line":1739},[204,122109,122110],{"class":263},"        -drive",[204,122112,122113],{"class":319}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[204,122115,24765],{"class":263},[204,122117,122118,122120,122123],{"class":206,"line":1760},[204,122119,122110],{"class":263},[204,122121,122122],{"class":319}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[204,122124,24765],{"class":263},[204,122126,122127,122130,122133],{"class":206,"line":1765},[204,122128,122129],{"class":263},"        -monitor",[204,122131,122132],{"class":319}," stdio",[204,122134,24765],{"class":263},[204,122136,122137,122140],{"class":206,"line":1779},[204,122138,122139],{"class":263},"        -serial",[204,122141,122142],{"class":319}," none\n",[161,122144,122145],{"start":1287},[71,122146,122147,122148],{},"常用操作：",[161,122149,122150,122153,122209],{},[71,122151,122152],{},"全屏：Ctrl+Alt+F",[71,122154,122155,122156,122161],{},"adb调试",[161,122157,122158],{},[71,122159,122160],{},"使Linux与Android用ADB连接。",[196,122162,122164],{"className":117381,"code":122163,"language":117383,"meta":125,"style":125},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[81,122165,122166,122171,122182,122187,122199,122204],{"__ignoreMap":125},[204,122167,122168],{"class":206,"line":207},[204,122169,122170],{"class":273},"# 连接安卓\n",[204,122172,122173,122176,122179],{"class":206,"line":126},[204,122174,122175],{"class":2049},"adb",[204,122177,122178],{"class":319}," connect",[204,122180,122181],{"class":263}," 127.0.0.1\n",[204,122183,122184],{"class":206,"line":131},[204,122185,122186],{"class":273},"# 打开shell\n",[204,122188,122189,122191,122193,122196],{"class":206,"line":1281},[204,122190,122175],{"class":2049},[204,122192,26969],{"class":263},[204,122194,122195],{"class":319}," 127.0.0.1:5555",[204,122197,122198],{"class":319}," shell\n",[204,122200,122201],{"class":206,"line":1287},[204,122202,122203],{"class":273},"# 使用root权限\n",[204,122205,122206],{"class":206,"line":1301},[204,122207,122208],{"class":2049},"su\n",[71,122210,122211,122212],{},"中文输入法",[161,122213,122214],{},[71,122215,122216],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122218,122220],{"id":122219},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122222,122223,122224],{},"rEFInd 官网与文档：",[62,122225,122226],{"href":122226,"rel":122227},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[66],[5213,122229,122230],{},"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":125,"searchDepth":126,"depth":126,"links":122232},[122233,122234,122238],{"id":121898,"depth":126,"text":121899},{"id":121902,"depth":126,"text":121903,"children":122235},[122236,122237],{"id":121906,"depth":131,"text":121907},{"id":121922,"depth":131,"text":121923},{"id":122219,"depth":126,"text":122220},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121890,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122245,"title":122246,"body":122247,"description":132,"extension":133,"meta":125546,"navigation":135,"path":125547,"seo":125548,"stem":125549,"__hash__":125550},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122248,"toc":125520},[122249,122252,122256,122259,122266,122516,122519,122591,122594,122598,122602,122607,122610,122613,122616,122621,122624,122627,122630,122635,122638,122643,122646,122649,122654,122657,122662,122665,122669,122673,122676,122681,122684,122698,122701,122704,122713,122716,122725,122728,122731,122740,122743,122752,122755,122758,122767,122770,122773,122788,122791,122794,122803,122808,122811,122814,122823,122826,122835,122838,122847,122850,122859,122864,122867,122875,122880,122883,122892,122895,122903,122908,122911,122920,122923,122926,122930,122933,122938,122941,122946,122960,122965,122970,122981,122986,122992,122997,123012,123017,123020,123025,123030,123035,123043,123048,123055,123060,123071,123076,123079,123083,123086,123089,123094,123097,123116,123121,123124,123133,123138,123141,123163,123166,123196,123199,123204,123207,123221,123226,123245,123248,123251,123256,123268,123273,123278,123281,123286,123289,123304,123307,123312,123317,123321,123326,123366,123369,123373,123379,123385,123390,123393,123400,123405,123412,123415,123418,123425,123439,123442,123502,123505,123519,123531,123534,123537,123540,123604,123607,123610,123613,123633,123636,123641,123648,123652,123655,123659,123664,123669,123673,123676,123679,123721,123726,123729,123751,123766,123768,123773,123785,123845,123847,123849,123903,123905,123907,123913,123918,123921,123926,123930,123933,123995,124000,124003,124005,124009,124021,124103,124105,124107,124161,124167,124169,124173,124178,124180,124185,124189,124209,124244,124248,124251,124254,124257,124264,124267,124279,124282,124297,124300,124319,124367,124370,124387,124390,124404,124409,124412,124421,124436,124448,124486,124491,124500,124505,124510,124536,124545,124549,124553,124558,124561,124565,124569,124574,124577,124582,124585,124590,124593,124598,124601,124605,124610,124613,124618,124621,124625,124630,124633,124638,124641,124646,124649,124653,124658,124661,124666,124669,124674,124677,124681,124686,124689,124694,124697,124702,124705,124710,124713,124718,124721,124726,124729,124733,124738,124741,124746,124753,124757,124762,124765,124770,124773,124777,124782,124785,124788,124791,124794,124797,124801,124804,124814,124819,124824,124846,124851,124856,124863,124867,124872,124875,124878,124883,124886,124889,124892,124895,124898,124901,124904,124907,124910,124913,124916,124919,124924,124929,124934,124939,124944,124949,124954,124957,124961,124964,124968,124973,124978,124983,124988,124992,124998,125006,125011,125014,125019,125034,125037,125042,125076,125091,125094,125149,125175,125187,125190,125199,125202,125217,125222,125225,125231,125236,125239,125244,125247,125252,125257,125264,125267,125282,125285,125320,125325,125333,125371,125374,125377,125382,125385,125390,125401,125435,125440,125443,125452,125457,125463,125466,125471,125480,125485,125488,125491,125496,125504,125507,125512,125517],[10,122250,122246],{"id":122251},"_7-其他操作",[14,122253,122255],{"id":122254},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122257,122258],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122260,122261,122262,122265],{},"进入工控机的硬盘目录，进入",[81,122263,122264],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[196,122267,122271],{"className":122268,"code":122269,"language":122270,"meta":125,"style":125},"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",[81,122272,122273,122281,122292,122299,122306,122318,122325,122337,122348,122359,122366,122373,122380,122392,122404,122411,122423,122435,122442,122454,122466,122478,122489,122496,122507],{"__ignoreMap":125},[204,122274,122275,122278],{"class":206,"line":207},[204,122276,122277],{"class":51386},"network",[204,122279,122280],{"class":214},": \n",[204,122282,122283,122286,122288,122290],{"class":206,"line":126},[204,122284,122285],{"class":51386},"  version",[204,122287,51523],{"class":214},[204,122289,292],{"class":263},[204,122291,2760],{"class":214},[204,122293,122294,122297],{"class":206,"line":131},[204,122295,122296],{"class":51386},"  wifis",[204,122298,122280],{"class":214},[204,122300,122301,122304],{"class":206,"line":1281},[204,122302,122303],{"class":51386},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[204,122305,122280],{"class":214},[204,122307,122308,122311,122313,122316],{"class":206,"line":1287},[204,122309,122310],{"class":51386},"      renderer",[204,122312,51523],{"class":214},[204,122314,122315],{"class":319},"NetworkManager",[204,122317,2760],{"class":214},[204,122319,122320,122323],{"class":206,"line":1301},[204,122321,122322],{"class":51386},"      match",[204,122324,122280],{"class":214},[204,122326,122327,122330,122332,122335],{"class":206,"line":1307},[204,122328,122329],{"class":51386},"        name",[204,122331,51523],{"class":214},[204,122333,122334],{"class":319},"\"wlan0\"",[204,122336,2760],{"class":214},[204,122338,122339,122342,122344,122346],{"class":206,"line":1398},[204,122340,122341],{"class":51386},"      dhcp4",[204,122343,51523],{"class":214},[204,122345,1449],{"class":263},[204,122347,2760],{"class":214},[204,122349,122350,122353,122355,122357],{"class":206,"line":1404},[204,122351,122352],{"class":51386},"      dhcp6",[204,122354,51523],{"class":214},[204,122356,1449],{"class":263},[204,122358,2760],{"class":214},[204,122360,122361,122364],{"class":206,"line":1416},[204,122362,122363],{"class":51386},"      access-points",[204,122365,122280],{"class":214},[204,122367,122368,122371],{"class":206,"line":1698},[204,122369,122370],{"class":319},"        \"EMIS_Vinci_Robocon_5G\"",[204,122372,122280],{"class":214},[204,122374,122375,122378],{"class":206,"line":1703},[204,122376,122377],{"class":51386},"          auth",[204,122379,122280],{"class":214},[204,122381,122382,122385,122387,122390],{"class":206,"line":1709},[204,122383,122384],{"class":51386},"            key-management",[204,122386,51523],{"class":214},[204,122388,122389],{"class":319},"\"psk\"",[204,122391,2760],{"class":214},[204,122393,122394,122397,122399,122402],{"class":206,"line":1714},[204,122395,122396],{"class":51386},"            password",[204,122398,51523],{"class":214},[204,122400,122401],{"class":319},"\"vinci666\"",[204,122403,2760],{"class":214},[204,122405,122406,122409],{"class":206,"line":1728},[204,122407,122408],{"class":51386},"          networkmanager",[204,122410,122280],{"class":214},[204,122412,122413,122416,122418,122421],{"class":206,"line":1733},[204,122414,122415],{"class":51386},"            uuid",[204,122417,51523],{"class":214},[204,122419,122420],{"class":319},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[204,122422,2760],{"class":214},[204,122424,122425,122428,122430,122433],{"class":206,"line":1739},[204,122426,122427],{"class":51386},"            name",[204,122429,51523],{"class":214},[204,122431,122432],{"class":319},"\"EMIS_Vinci_Robocon_5G\"",[204,122434,2760],{"class":214},[204,122436,122437,122440],{"class":206,"line":1760},[204,122438,122439],{"class":51386},"            passthrough",[204,122441,122280],{"class":214},[204,122443,122444,122447,122449,122452],{"class":206,"line":1765},[204,122445,122446],{"class":51386},"              wifi-security.auth-alg",[204,122448,51523],{"class":214},[204,122450,122451],{"class":319},"\"open\"",[204,122453,2760],{"class":214},[204,122455,122456,122459,122461,122464],{"class":206,"line":1779},[204,122457,122458],{"class":51386},"              ipv6.addr-gen-mode",[204,122460,51523],{"class":214},[204,122462,122463],{"class":319},"\"default\"",[204,122465,2760],{"class":214},[204,122467,122468,122471,122473,122476],{"class":206,"line":1784},[204,122469,122470],{"class":51386},"              ipv6.ip6-privacy",[204,122472,51523],{"class":214},[204,122474,122475],{"class":319},"\"-1\"",[204,122477,2760],{"class":214},[204,122479,122480,122483,122485,122487],{"class":206,"line":1813},[204,122481,122482],{"class":51386},"              proxy._",[204,122484,51523],{"class":214},[204,122486,7739],{"class":319},[204,122488,2760],{"class":214},[204,122490,122491,122494],{"class":206,"line":1818},[204,122492,122493],{"class":51386},"      networkmanager",[204,122495,122280],{"class":214},[204,122497,122498,122501,122503,122505],{"class":206,"line":1835},[204,122499,122500],{"class":51386},"        uuid",[204,122502,51523],{"class":214},[204,122504,122420],{"class":319},[204,122506,2760],{"class":214},[204,122508,122509,122511,122513],{"class":206,"line":1840},[204,122510,122329],{"class":51386},[204,122512,51523],{"class":214},[204,122514,122515],{"class":319},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122517,122518],{},"将其改为新wifi的名和密码：",[196,122520,122522],{"className":122268,"code":122521,"language":122270,"meta":125,"style":125},"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",[81,122523,122524,122530,122539,122545,122552,122561,122569,122575,122581],{"__ignoreMap":125},[204,122525,122526,122528],{"class":206,"line":207},[204,122527,122277],{"class":51386},[204,122529,3825],{"class":214},[204,122531,122532,122534,122536],{"class":206,"line":126},[204,122533,122285],{"class":51386},[204,122535,51523],{"class":214},[204,122537,122538],{"class":263},"2\n",[204,122540,122541,122543],{"class":206,"line":131},[204,122542,122296],{"class":51386},[204,122544,3825],{"class":214},[204,122546,122547,122550],{"class":206,"line":1281},[204,122548,122549],{"class":51386},"    wlan0",[204,122551,3825],{"class":214},[204,122553,122554,122556,122558],{"class":206,"line":1287},[204,122555,122341],{"class":51386},[204,122557,51523],{"class":214},[204,122559,122560],{"class":263},"true\n",[204,122562,122563,122565,122567],{"class":206,"line":1301},[204,122564,122352],{"class":51386},[204,122566,51523],{"class":214},[204,122568,122560],{"class":263},[204,122570,122571,122573],{"class":206,"line":1307},[204,122572,122363],{"class":51386},[204,122574,3825],{"class":214},[204,122576,122577,122579],{"class":206,"line":1398},[204,122578,122370],{"class":319},[204,122580,3825],{"class":214},[204,122582,122583,122586,122588],{"class":206,"line":1404},[204,122584,122585],{"class":51386},"          password",[204,122587,51523],{"class":214},[204,122589,122590],{"class":319},"\"vinci666\"\n",[19,122592,122593],{},"工控机开机即可连上网。",[14,122595,122597],{"id":122596},"_72-ssh远程开发","7.2 SSH远程开发",[49,122599,122601],{"id":122600},"_721-环境准备","7.2.1 环境准备",[19,122603,122604],{},[30,122605,122606],{},"1.硬件准备",[19,122608,122609],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122611,122612],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122614,122615],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122617,122618],{},[30,122619,122620],{},"2.设置固定IP",[19,122622,122623],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122625,122626],{},"1.进入设置界面",[19,122628,122629],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122631,122632],{},[23,122633],{"alt":125,"src":122634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122636,122637],{},"2.配置所连接的网络",[19,122639,122640],{},[23,122641],{"alt":125,"src":122642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122644,122645],{},"3.设置固定IP",[19,122647,122648],{},"查看当前IP地址。",[19,122650,122651],{},[23,122652],{"alt":125,"src":122653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122655,122656],{},"设置固定IP。",[19,122658,122659],{},[23,122660],{"alt":125,"src":122661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122663,122664],{},"至此，IP配置完毕。",[49,122666,122668],{"id":122667},"_722-环境搭建","7.2.2 环境搭建",[19,122670,122671],{},[30,122672,25839],{},[19,122674,122675],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122677,122678],{},[30,122679,122680],{},"实现",[19,122682,122683],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[161,122685,122686,122689,122692,122695],{},[71,122687,122688],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[71,122690,122691],{},"远程主机启动SSH服务；",[71,122693,122694],{},"本地主机登陆远程主机；",[71,122696,122697],{},"实现数据传输。",[19,122699,122700],{},"1.安装SSH客户端与服务端",[19,122702,122703],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[196,122705,122707],{"className":120901,"code":122706,"language":120903,"meta":120904,"style":125}," sudo apt install openssh-server\n",[81,122708,122709],{"__ignoreMap":125},[204,122710,122711],{"class":206,"line":207},[204,122712,122706],{},[19,122714,122715],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[196,122717,122719],{"className":120901,"code":122718,"language":120903,"meta":120904,"style":125},"sudo apt install openssh-client\n",[81,122720,122721],{"__ignoreMap":125},[204,122722,122723],{"class":206,"line":207},[204,122724,122718],{},[19,122726,122727],{},"2.远程主机启动SSH服务",[19,122729,122730],{},"远程主机启动 ssh 服务命令如下：",[196,122732,122734],{"className":120901,"code":122733,"language":120903,"meta":120904,"style":125},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[81,122735,122736],{"__ignoreMap":125},[204,122737,122738],{"class":206,"line":207},[204,122739,122733],{},[19,122741,122742],{},"启动后可使用如下命令查看服务是否正常运行：",[196,122744,122746],{"className":120901,"code":122745,"language":120903,"meta":120904,"style":125},"ps -e | grep ssh\n",[81,122747,122748],{"__ignoreMap":125},[204,122749,122750],{"class":206,"line":207},[204,122751,122745],{},[19,122753,122754],{},"如果启动成功，会包含 sshd 程序。",[19,122756,122757],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[196,122759,122761],{"className":120901,"code":122760,"language":120903,"meta":120904,"style":125},"sudo systemctl enable ssh\n",[81,122762,122763],{"__ignoreMap":125},[204,122764,122765],{"class":206,"line":207},[204,122766,122760],{},[19,122768,122769],{},"3.本地远程登录",[19,122771,122772],{},"登录远程主机可以调用如下命令:",[196,122774,122776],{"className":117381,"code":122775,"language":117383,"meta":125,"style":125},"ssh -X 用户名@ip地址\n",[81,122777,122778],{"__ignoreMap":125},[204,122779,122780,122782,122785],{"class":206,"line":207},[204,122781,121732],{"class":2049},[204,122783,122784],{"class":263}," -X",[204,122786,122787],{"class":319}," 用户名@ip地址\n",[19,122789,122790],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122792,122793],{},"如果退出，可以调用exit命令：",[196,122795,122797],{"className":120901,"code":122796,"language":120903,"meta":120904,"style":125},"exit\n",[81,122798,122799],{"__ignoreMap":125},[204,122800,122801],{"class":206,"line":207},[204,122802,122796],{},[19,122804,122805],{},[30,122806,122807],{},"4.实现数据传输",[19,122809,122810],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122812,122813],{},"上传文件指令格式如下：",[196,122815,122817],{"className":120901,"code":122816,"language":120903,"meta":120904,"style":125},"scp 本地文件路径 账号@ip:路径\n",[81,122818,122819],{"__ignoreMap":125},[204,122820,122821],{"class":206,"line":207},[204,122822,122816],{},[19,122824,122825],{},"上传文件夹指令格式如下：",[196,122827,122829],{"className":120901,"code":122828,"language":120903,"meta":120904,"style":125},"scp -r 本地文件夹路径 账号@ip:路径\n",[81,122830,122831],{"__ignoreMap":125},[204,122832,122833],{"class":206,"line":207},[204,122834,122828],{},[19,122836,122837],{},"下载文件指令格式如下：",[196,122839,122841],{"className":120901,"code":122840,"language":120903,"meta":120904,"style":125},"scp 账号@ip:路径 本地文件夹路径\n",[81,122842,122843],{"__ignoreMap":125},[204,122844,122845],{"class":206,"line":207},[204,122846,122840],{},[19,122848,122849],{},"下载文件夹指令格式如下：",[196,122851,122853],{"className":120901,"code":122852,"language":120903,"meta":120904,"style":125},"scp -r 账号@ip:路径 本地文件夹路径\n",[81,122854,122855],{"__ignoreMap":125},[204,122856,122857],{"class":206,"line":207},[204,122858,122852],{},[19,122860,122861],{},[30,122862,122863],{},"优化",[19,122865,122866],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[161,122868,122869,122872],{},[71,122870,122871],{},"本地生成密钥对；",[71,122873,122874],{},"将公钥上传至远程主机。",[19,122876,122877],{},[30,122878,122879],{},"1.生成密钥对",[19,122881,122882],{},"本地客户端生成公私钥：（一路回车默认即可）",[196,122884,122886],{"className":120901,"code":122885,"language":120903,"meta":120904,"style":125},"ssh-keygen\n",[81,122887,122888],{"__ignoreMap":125},[204,122889,122890],{"class":206,"line":207},[204,122891,122885],{},[19,122893,122894],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[161,122896,122897,122900],{},[71,122898,122899],{},"id_rsa （私钥）；",[71,122901,122902],{},"id_rsa.pub (公钥)。",[19,122904,122905],{},[30,122906,122907],{},"2.公钥上传",[19,122909,122910],{},"上传指令如下：",[196,122912,122914],{"className":120901,"code":122913,"language":120903,"meta":120904,"style":125},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[81,122915,122916],{"__ignoreMap":125},[204,122917,122918],{"class":206,"line":207},[204,122919,122913],{},[19,122921,122922],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122924,122925],{},"以后再远程登录就无需录入密码了。",[49,122927,122929],{"id":122928},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122931,122932],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122934,122935],{},[30,122936,122937],{},"1.准备工作",[19,122939,122940],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,122942,122943],{},[30,122944,122945],{},"2.为VScode安装远程开发插件",[19,122947,122948,122949,122952,122953,122956,122957,28471],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[81,122950,122951],{},"扩展：商店","的搜索栏输入",[81,122954,122955],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[81,122958,122959],{},"安装",[19,122961,122962],{},[23,122963],{"alt":125,"src":122964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,122966,122967],{},[30,122968,122969],{},"3.配置远程连接",[19,122971,122972,122973,122976,122977,122980],{},"步骤1：使用快捷键",[81,122974,122975],{},"ctrl + shift + p","打开命令输入窗口，并输入",[81,122978,122979],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,122982,122983],{},[23,122984],{"alt":125,"src":122985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,122987,122988,122989,28471],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[81,122990,122991],{},"Add New SSH Host",[19,122993,122994],{},[23,122995],{"alt":125,"src":122996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,122998,122999,123000,123003,123004,123007,123008,123011],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[81,123001,123002],{},"ssh +X ubuntu@192.168.43.164","，其中，",[81,123005,123006],{},"ubuntu","需要替换为你的登录用户名，",[81,123009,123010],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123013,123014],{},[23,123015],{"alt":125,"src":123016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123018,123019],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123021,123022],{},[23,123023],{"alt":125,"src":123024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123026,123027],{},[23,123028],{"alt":125,"src":123029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123031,123032],{},[30,123033,123034],{},"4.使用",[19,123036,123037,123038,122976,123040,123042],{},"步骤1：继续使用快捷键",[81,123039,122975],{},[81,123041,122979],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123044,123045],{},[23,123046],{"alt":125,"src":123047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123049,123050,123051,123054],{},"或者，也可以点击侧边栏的",[81,123052,123053],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123056,123057],{},[23,123058],{"alt":125,"src":123059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123061,123062,123063,123066,123067,123070],{},"步骤2：选择菜单栏的",[81,123064,123065],{},"文件","下的",[81,123068,123069],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123072,123073],{},[23,123074],{"alt":125,"src":123075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123077,123078],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123080,123082],{"id":123081},"_73-远程桌面","7.3 远程桌面",[19,123084,123085],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123087,123088],{},"我们选择使用VNC来看。",[161,123090,123091],{},[71,123092,123093],{},"安装VNC服务器：",[19,123095,123096],{},"这里以TigerVNC为例进行安装：",[196,123098,123100],{"className":117381,"code":123099,"language":117383,"meta":125,"style":125},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[81,123101,123102],{"__ignoreMap":125},[204,123103,123104,123106,123108,123110,123113],{"class":206,"line":207},[204,123105,24663],{"class":2049},[204,123107,117402],{"class":319},[204,123109,23921],{"class":319},[204,123111,123112],{"class":319}," tigervnc-standalone-server",[204,123114,123115],{"class":319}," tigervnc-common\n",[161,123117,123118],{"start":126},[71,123119,123120],{},"设置VNC密码：",[19,123122,123123],{},"为VNC用户设置密码，运行以下命令：",[196,123125,123127],{"className":117381,"code":123126,"language":117383,"meta":125,"style":125},"vncpasswd\n",[81,123128,123129],{"__ignoreMap":125},[204,123130,123131],{"class":206,"line":207},[204,123132,123126],{"class":2049},[161,123134,123135],{"start":131},[71,123136,123137],{},"配置VNC启动脚本:",[19,123139,123140],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[196,123142,123144],{"className":117381,"code":123143,"language":117383,"meta":125,"style":125},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[81,123145,123146,123155],{"__ignoreMap":125},[204,123147,123148,123150,123152],{"class":206,"line":207},[204,123149,101351],{"class":2049},[204,123151,29302],{"class":263},[204,123153,123154],{"class":319}," ~\u002F.vnc\n",[204,123156,123157,123160],{"class":206,"line":126},[204,123158,123159],{"class":2049},"nano",[204,123161,123162],{"class":319}," ~\u002F.vnc\u002Fxstartup\n",[19,123164,123165],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[196,123167,123169],{"className":117381,"code":123168,"language":117383,"meta":125,"style":125},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[81,123170,123171,123176,123184,123191],{"__ignoreMap":125},[204,123172,123173],{"class":206,"line":207},[204,123174,123175],{"class":273},"#!\u002Fbin\u002Fsh\n",[204,123177,123178,123181],{"class":206,"line":126},[204,123179,123180],{"class":263},"unset",[204,123182,123183],{"class":319}," SESSION_MANAGER\n",[204,123185,123186,123188],{"class":206,"line":131},[204,123187,123180],{"class":263},[204,123189,123190],{"class":319}," DBUS_SESSION_BUS_ADDRESS\n",[204,123192,123193],{"class":206,"line":1281},[204,123194,123195],{"class":2049},"gnome-session\n",[19,123197,123198],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[161,123200,123201],{"start":1281},[71,123202,123203],{},"给予执行权限：",[19,123205,123206],{},"为xstartup文件设置执行权限：",[196,123208,123210],{"className":117381,"code":123209,"language":117383,"meta":125,"style":125},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[81,123211,123212],{"__ignoreMap":125},[204,123213,123214,123216,123219],{"class":206,"line":207},[204,123215,24698],{"class":2049},[204,123217,123218],{"class":319}," +x",[204,123220,123162],{"class":319},[161,123222,123223],{"start":1287},[71,123224,123225],{},"启动VNC服务器：",[196,123227,123229],{"className":117381,"code":123228,"language":117383,"meta":125,"style":125},"vncserver -geometry 1920x1080 -localhost=0\n",[81,123230,123231],{"__ignoreMap":125},[204,123232,123233,123236,123239,123242],{"class":206,"line":207},[204,123234,123235],{"class":2049},"vncserver",[204,123237,123238],{"class":263}," -geometry",[204,123240,123241],{"class":319}," 1920x1080",[204,123243,123244],{"class":263}," -localhost=0\n",[19,123246,123247],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123249,123250],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[161,123252,123253],{"start":1301},[71,123254,123255],{},"查看已开启的VNC服务器：",[196,123257,123259],{"className":117381,"code":123258,"language":117383,"meta":125,"style":125},"vncserver -list\n",[81,123260,123261],{"__ignoreMap":125},[204,123262,123263,123265],{"class":206,"line":207},[204,123264,123235],{"class":2049},[204,123266,123267],{"class":263}," -list\n",[19,123269,123270],{},[23,123271],{"alt":125,"src":123272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[161,123274,123275],{"start":1307},[71,123276,123277],{},"连接到VNC服务器：",[19,123279,123280],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[161,123282,123283],{"start":1398},[71,123284,123285],{},"停止VNC服务器：",[19,123287,123288],{},"如果需要停止VNC服务器，可以使用以下命令：",[196,123290,123292],{"className":117381,"code":123291,"language":117383,"meta":125,"style":125},"vncserver -kill :1\n",[81,123293,123294],{"__ignoreMap":125},[204,123295,123296,123298,123301],{"class":206,"line":207},[204,123297,123235],{"class":2049},[204,123299,123300],{"class":263}," -kill",[204,123302,123303],{"class":319}," :1\n",[19,123305,123306],{},"将:1替换为你实际使用的显示编号。",[19,123308,123309],{},[23,123310],{"alt":125,"src":123311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123313,123314],{},[23,123315],{"alt":125,"src":123316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123318,123320],{"id":123319},"_74-usb端口设置","7.4 USB端口设置",[19,123322,123323],{},[30,123324,123325],{},"首先先配置好权限",[196,123327,123329],{"className":117381,"code":123328,"language":117383,"meta":125,"style":125},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[81,123330,123331,123336,123349,123356,123361],{"__ignoreMap":125},[204,123332,123333],{"class":206,"line":207},[204,123334,123335],{"class":273},"# 将用户权限提高\n",[204,123337,123338,123340,123342,123344,123347],{"class":206,"line":126},[204,123339,24663],{"class":2049},[204,123341,26660],{"class":319},[204,123343,26663],{"class":263},[204,123345,123346],{"class":319}," dialout",[204,123348,26668],{"class":214},[204,123350,123351,123353],{"class":206,"line":131},[204,123352,26687],{"class":2049},[204,123354,123355],{"class":319}," dialout\n",[204,123357,123358],{"class":206,"line":1281},[204,123359,123360],{"class":273},"# 查看下面命令是否输出dialout（若输出才正常）\n",[204,123362,123363],{"class":206,"line":1287},[204,123364,123365],{"class":2049},"groups\n",[19,123367,123368],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[49,123370,123372],{"id":123371},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123374,123375,123378],{},[30,123376,123377],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123380,123381,123384],{},[30,123382,123383],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123386,123387],{},[30,123388,123389],{},"流程如下：",[19,123391,123392],{},"（1）.查找设备idVendor和idProduct",[19,123394,123395,123396,123399],{},"接入两个USB设备，在终端调用指令",[81,123397,123398],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123401,123402],{},[23,123403],{"alt":125,"src":123404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123406,123407,123408,123411],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[81,123409,123410],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123413,123414],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123416,123417],{},"（2）.编写映射规则",[19,123419,123420,123421,123424],{},"在",[81,123422,123423],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[196,123426,123428],{"className":117381,"code":123427,"language":117383,"meta":125,"style":125},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[81,123429,123430],{"__ignoreMap":125},[204,123431,123432,123434,123436],{"class":206,"line":207},[204,123433,24663],{"class":2049},[204,123435,118668],{"class":319},[204,123437,123438],{"class":319}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123440,123441],{},"输入如下内容：",[196,123443,123445],{"className":117381,"code":123444,"language":117383,"meta":125,"style":125},"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",[81,123446,123447,123477],{"__ignoreMap":125},[204,123448,123449,123452,123454,123457,123460,123463,123466,123468,123471,123474],{"class":206,"line":207},[204,123450,123451],{"class":214},"KERNEL",[204,123453,260],{"class":210},[204,123455,123456],{"class":319},"=\"ttyUSB*\",",[204,123458,123459],{"class":2049}," ATTRS",[204,123461,123462],{"class":319},"{idVendor}==",[204,123464,123465],{"class":2049},"\"10c4\"",[204,123467,591],{"class":2049},[204,123469,123470],{"class":319}," ATTRS{idProduct}==\"ea60\",",[204,123472,123473],{"class":319}," MODE:=\"0777\",",[204,123475,123476],{"class":319}," SYMLINK+=\"mylidar\"\n",[204,123478,123479,123481,123483,123485,123487,123489,123492,123494,123497,123499],{"class":206,"line":126},[204,123480,123451],{"class":214},[204,123482,260],{"class":210},[204,123484,123456],{"class":319},[204,123486,123459],{"class":2049},[204,123488,123462],{"class":319},[204,123490,123491],{"class":2049},"\"1a86\"",[204,123493,591],{"class":2049},[204,123495,123496],{"class":319}," ATTRS{idProduct}==\"7523\",",[204,123498,123473],{"class":319},[204,123500,123501],{"class":319}," SYMLINK+=\"mycar\"\n",[19,123503,123504],{},"代码解释：",[68,123506,123507,123510,123513,123516],{},[71,123508,123509],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[71,123511,123512],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[71,123514,123515],{},"SYMLINK是符号连接，即绑定的别名；",[71,123517,123518],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123520,123521,123522,123525,123528],{},"***小提示：***",[23640,123523,123524],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[81,123526,123527],{},"\u002Fetc\u002Fudev\u002Frule.d",[23640,123529,123530],{},"目录即可。",[19,123532,123533],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123535,123536],{},"（3）.使规则生效",[19,123538,123539],{},"在终端下输入如下指令：",[196,123541,123543],{"className":117381,"code":123542,"language":117383,"meta":125,"style":125},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[81,123544,123545,123550,123562,123573,123577,123582,123595],{"__ignoreMap":125},[204,123546,123547],{"class":206,"line":207},[204,123548,123549],{"class":273},"# Ubuntu用下方命令\n",[204,123551,123552,123554,123556,123559],{"class":206,"line":126},[204,123553,24663],{"class":2049},[204,123555,120133],{"class":319},[204,123557,123558],{"class":319}," udev",[204,123560,123561],{"class":319}," reload\n",[204,123563,123564,123566,123568,123570],{"class":206,"line":131},[204,123565,24663],{"class":2049},[204,123567,120133],{"class":319},[204,123569,123558],{"class":319},[204,123571,123572],{"class":319}," restart\n",[204,123574,123575],{"class":206,"line":1281},[204,123576,2486],{"emptyLinePlaceholder":135},[204,123578,123579],{"class":206,"line":1287},[204,123580,123581],{"class":273},"#Fedora用下方命令\n",[204,123583,123584,123586,123589,123592],{"class":206,"line":1301},[204,123585,24663],{"class":2049},[204,123587,123588],{"class":319}," udevadm",[204,123590,123591],{"class":319}," control",[204,123593,123594],{"class":263}," --reload\n",[204,123596,123597,123599,123601],{"class":206,"line":1307},[204,123598,24663],{"class":2049},[204,123600,123588],{"class":319},[204,123602,123603],{"class":319}," trigger\n",[19,123605,123606],{},"再重新插拔设备即可。",[19,123608,123609],{},"（4）.测试",[19,123611,123612],{},"终端下输入如下指令",[196,123614,123616],{"className":117381,"code":123615,"language":117383,"meta":125,"style":125},"ll \u002Fdev | grep ttyUSB\n",[81,123617,123618],{"__ignoreMap":125},[204,123619,123620,123623,123626,123628,123630],{"class":206,"line":207},[204,123621,123622],{"class":2049},"ll",[204,123624,123625],{"class":319}," \u002Fdev",[204,123627,25196],{"class":210},[204,123629,30322],{"class":2049},[204,123631,123632],{"class":319}," ttyUSB\n",[19,123634,123635],{},"运行结果如下：",[19,123637,123638],{},[23,123639],{"alt":125,"src":123640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123642,123643,123644,123647],{},"也可以多次插拔USB设备，会发现设备端口",[81,123645,123646],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123649,123650],{},[30,123651,118049],{},[19,123653,123654],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[49,123656,123658],{"id":123657},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123660,123661,123663],{},[30,123662,123377],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123665,123666,123668],{},[30,123667,123383],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123670,123671],{},[30,123672,123389],{},[19,123674,123675],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123677,123678],{},"调用如下指令查看第一台雷达的USB信息：",[196,123680,123682],{"className":117381,"code":123681,"language":117383,"meta":125,"style":125},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[81,123683,123684,123704],{"__ignoreMap":125},[204,123685,123686,123689,123691,123694,123697,123699,123701],{"class":206,"line":207},[204,123687,123688],{"class":2049},"udevadm",[204,123690,69907],{"class":319},[204,123692,123693],{"class":263}," --attribute-walk",[204,123695,123696],{"class":263}," --name=\u002Fdev\u002FttyUSB0",[204,123698,25196],{"class":210},[204,123700,30322],{"class":2049},[204,123702,123703],{"class":319}," KERNELS\n",[204,123705,123706,123708,123710,123712,123715,123717,123719],{"class":206,"line":126},[204,123707,123688],{"class":2049},[204,123709,69907],{"class":319},[204,123711,123693],{"class":263},[204,123713,123714],{"class":263}," --name=\u002Fdev\u002FttyACM0",[204,123716,25196],{"class":210},[204,123718,30322],{"class":2049},[204,123720,123703],{"class":319},[19,123722,123723],{},[23,123724],{"alt":125,"src":123725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123727,123728],{},"调用如下指令查看第二台雷达的USB信息：",[196,123730,123732],{"className":117381,"code":123731,"language":117383,"meta":125,"style":125},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[81,123733,123734],{"__ignoreMap":125},[204,123735,123736,123738,123740,123742,123745,123747,123749],{"class":206,"line":207},[204,123737,123688],{"class":2049},[204,123739,69907],{"class":319},[204,123741,123693],{"class":263},[204,123743,123744],{"class":263}," --name=\u002Fdev\u002FttyUSB1",[204,123746,25196],{"class":210},[204,123748,30322],{"class":2049},[204,123750,123703],{"class":319},[19,123752,123753,123754,123757,123758,123761,123762,123765],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[81,123755,123756],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[81,123759,123760],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[30,123763,123764],{},"唯一性标识","”。",[19,123767,123417],{},[19,123769,123420,123770,123772],{},[81,123771,123423],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[196,123774,123775],{"className":117381,"code":123427,"language":117383,"meta":125,"style":125},[81,123776,123777],{"__ignoreMap":125},[204,123778,123779,123781,123783],{"class":206,"line":207},[204,123780,24663],{"class":2049},[204,123782,118668],{"class":319},[204,123784,123438],{"class":319},[196,123786,123788],{"className":117381,"code":123787,"language":117383,"meta":125,"style":125},"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",[81,123789,123790,123819],{"__ignoreMap":125},[204,123791,123792,123794,123796,123798,123801,123803,123806,123809,123811,123814,123816],{"class":206,"line":207},[204,123793,123451],{"class":214},[204,123795,260],{"class":210},[204,123797,123456],{"class":319},[204,123799,123800],{"class":214}," KERNELS",[204,123802,260],{"class":210},[204,123804,123805],{"class":319},"=\"1-1.3:1.0\",",[204,123807,123808],{"class":2049}," MODE:",[204,123810,260],{"class":319},[204,123812,123813],{"class":2049},"\"0777\"",[204,123815,591],{"class":2049},[204,123817,123818],{"class":319}," SYMLINK+=\"rplidar_front\"\n",[204,123820,123821,123823,123825,123827,123829,123831,123834,123836,123838,123840,123842],{"class":206,"line":126},[204,123822,123451],{"class":214},[204,123824,260],{"class":210},[204,123826,123456],{"class":319},[204,123828,123800],{"class":214},[204,123830,260],{"class":210},[204,123832,123833],{"class":319},"=\"1-1.4:1.0\",",[204,123835,123808],{"class":2049},[204,123837,260],{"class":319},[204,123839,123813],{"class":2049},[204,123841,591],{"class":2049},[204,123843,123844],{"class":319}," SYMLINK+=\"rplidar_back\"\n",[19,123846,123536],{},[19,123848,123539],{},[196,123850,123851],{"className":117381,"code":123542,"language":117383,"meta":125,"style":125},[81,123852,123853,123857,123867,123877,123881,123885,123895],{"__ignoreMap":125},[204,123854,123855],{"class":206,"line":207},[204,123856,123549],{"class":273},[204,123858,123859,123861,123863,123865],{"class":206,"line":126},[204,123860,24663],{"class":2049},[204,123862,120133],{"class":319},[204,123864,123558],{"class":319},[204,123866,123561],{"class":319},[204,123868,123869,123871,123873,123875],{"class":206,"line":131},[204,123870,24663],{"class":2049},[204,123872,120133],{"class":319},[204,123874,123558],{"class":319},[204,123876,123572],{"class":319},[204,123878,123879],{"class":206,"line":1281},[204,123880,2486],{"emptyLinePlaceholder":135},[204,123882,123883],{"class":206,"line":1287},[204,123884,123581],{"class":273},[204,123886,123887,123889,123891,123893],{"class":206,"line":1301},[204,123888,24663],{"class":2049},[204,123890,123588],{"class":319},[204,123892,123591],{"class":319},[204,123894,123594],{"class":263},[204,123896,123897,123899,123901],{"class":206,"line":1307},[204,123898,24663],{"class":2049},[204,123900,123588],{"class":319},[204,123902,123603],{"class":319},[19,123904,123606],{},[19,123906,123609],{},[19,123908,123612,123909,123912],{},[81,123910,123911],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123914,123915],{},[23,123916],{"alt":125,"src":123917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123919,123920],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123922,123923,123925],{},[30,123924,118049],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[49,123927,123929],{"id":123928},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123931,123932],{},"（1）.查看所连接的主机USB接口的信息",[196,123934,123936],{"className":117381,"code":123935,"language":117383,"meta":125,"style":125},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[81,123937,123938,123968],{"__ignoreMap":125},[204,123939,123940,123942,123944,123947,123949,123951,123953,123955,123958,123961,123963,123966],{"class":206,"line":207},[204,123941,123688],{"class":2049},[204,123943,69907],{"class":319},[204,123945,123946],{"class":263}," -a",[204,123948,29302],{"class":263},[204,123950,28508],{"class":214},[204,123952,123688],{"class":2049},[204,123954,69907],{"class":319},[204,123956,123957],{"class":263}," -q",[204,123959,123960],{"class":319}," path",[204,123962,25202],{"class":263},[204,123964,123965],{"class":319}," \u002Fdev\u002FttyACM0",[204,123967,221],{"class":214},[204,123969,123970,123972,123974,123976,123978,123980,123982,123984,123986,123988,123990,123993],{"class":206,"line":126},[204,123971,123688],{"class":2049},[204,123973,69907],{"class":319},[204,123975,123946],{"class":263},[204,123977,29302],{"class":263},[204,123979,28508],{"class":214},[204,123981,123688],{"class":2049},[204,123983,69907],{"class":319},[204,123985,123957],{"class":263},[204,123987,123960],{"class":319},[204,123989,25202],{"class":263},[204,123991,123992],{"class":319}," \u002Fdev\u002FttyUSB0",[204,123994,221],{"class":214},[19,123996,123997],{},[23,123998],{"alt":125,"src":123999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124001,124002],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124004,123417],{},[19,124006,123420,124007,123772],{},[81,124008,123423],{},[196,124010,124011],{"className":117381,"code":123427,"language":117383,"meta":125,"style":125},[81,124012,124013],{"__ignoreMap":125},[204,124014,124015,124017,124019],{"class":206,"line":207},[204,124016,24663],{"class":2049},[204,124018,118668],{"class":319},[204,124020,123438],{"class":319},[196,124022,124024],{"className":117381,"code":124023,"language":117383,"meta":125,"style":125},"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",[81,124025,124026,124054,124080],{"__ignoreMap":125},[204,124027,124028,124030,124032,124035,124037,124039,124041,124043,124046,124049,124051],{"class":206,"line":207},[204,124029,123451],{"class":214},[204,124031,260],{"class":210},[204,124033,124034],{"class":319},"=\"ttyACM*\",",[204,124036,123459],{"class":2049},[204,124038,123462],{"class":319},[204,124040,123491],{"class":2049},[204,124042,591],{"class":2049},[204,124044,124045],{"class":319}," ATTRS{idProduct}==\"55d4\",",[204,124047,124048],{"class":319}," ATTRS{serial}==\"0001\",",[204,124050,123473],{"class":319},[204,124052,124053],{"class":319}," SYMLINK+=\"ttyACM_MCU\"\n",[204,124055,124056,124058,124060,124062,124064,124066,124068,124070,124072,124075,124077],{"class":206,"line":126},[204,124057,123451],{"class":214},[204,124059,260],{"class":210},[204,124061,124034],{"class":319},[204,124063,123459],{"class":2049},[204,124065,123462],{"class":319},[204,124067,123491],{"class":2049},[204,124069,591],{"class":2049},[204,124071,124045],{"class":319},[204,124073,124074],{"class":319}," ATTRS{serial}==\"0002\",",[204,124076,123473],{"class":319},[204,124078,124079],{"class":319}," SYMLINK+=\"ttyACM_Lidar\"\n",[204,124081,124082,124084,124086,124088,124090,124092,124094,124096,124098,124100],{"class":206,"line":131},[204,124083,123451],{"class":214},[204,124085,260],{"class":210},[204,124087,123456],{"class":319},[204,124089,123459],{"class":2049},[204,124091,123462],{"class":319},[204,124093,123491],{"class":2049},[204,124095,591],{"class":2049},[204,124097,123496],{"class":319},[204,124099,123473],{"class":319},[204,124101,124102],{"class":319}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124104,123536],{},[19,124106,123539],{},[196,124108,124109],{"className":117381,"code":123542,"language":117383,"meta":125,"style":125},[81,124110,124111,124115,124125,124135,124139,124143,124153],{"__ignoreMap":125},[204,124112,124113],{"class":206,"line":207},[204,124114,123549],{"class":273},[204,124116,124117,124119,124121,124123],{"class":206,"line":126},[204,124118,24663],{"class":2049},[204,124120,120133],{"class":319},[204,124122,123558],{"class":319},[204,124124,123561],{"class":319},[204,124126,124127,124129,124131,124133],{"class":206,"line":131},[204,124128,24663],{"class":2049},[204,124130,120133],{"class":319},[204,124132,123558],{"class":319},[204,124134,123572],{"class":319},[204,124136,124137],{"class":206,"line":1281},[204,124138,2486],{"emptyLinePlaceholder":135},[204,124140,124141],{"class":206,"line":1287},[204,124142,123581],{"class":273},[204,124144,124145,124147,124149,124151],{"class":206,"line":1301},[204,124146,24663],{"class":2049},[204,124148,123588],{"class":319},[204,124150,123591],{"class":319},[204,124152,123594],{"class":263},[204,124154,124155,124157,124159],{"class":206,"line":1307},[204,124156,24663],{"class":2049},[204,124158,123588],{"class":319},[204,124160,123603],{"class":319},[19,124162,124163,124164],{},"再重新插拔设备即可，或者 ",[30,124165,124166],{},"直接重启系统。",[19,124168,123609],{},[19,124170,123612,124171,123912],{},[81,124172,123911],{},[19,124174,124175],{},[23,124176],{"alt":125,"src":124177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124179,123920],{},[19,124181,124182,124184],{},[30,124183,118049],{}," 一些设备可能没有串口号等。",[49,124186,124188],{"id":124187},"_744-其他注意事项","7.4.4 其他注意事项",[19,124190,124191,124192,124194,124195,124198,124199,18497,124202,124205,124206,124208],{},"并非所有的USB设备端口号都是",[81,124193,123646],{},"的格式，比如Arduino的端口号可能是",[81,124196,124197],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[81,124200,124201],{},"videon",[81,124203,124204],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[81,124207,124201],{},"端口，绑定时需要关联的也是该接口。",[19,124210,124211,124212,124215,124216,124219,124220,124222,124223,124226,124227,124230,124231,124234,124235,124234,124238,124234,124241,28471],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[81,124213,124214],{},"KERNEL==\"ttyUSB*\"","修改为",[81,124217,124218],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[81,124221,124214],{},"修改为类似于",[81,124224,124225],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[81,124228,124229],{},"video[0,2,4,6]","表示可以绑定的端口为",[81,124232,124233],{},"video0","或",[81,124236,124237],{},"video2",[81,124239,124240],{},"video4",[81,124242,124243],{},"video6",[14,124245,124247],{"id":124246},"_75-挂载内网网页","7.5 挂载内网网页",[19,124249,124250],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124252,124253],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124255,124256],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124258,124259,124260],{},"Termux 下载地址（F-Droid）：",[62,124261,124262],{"href":124262,"rel":124263},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[66],[19,124265,124266],{},"首先打开app后，先更新软件缓存：",[196,124268,124270],{"className":117381,"code":124269,"language":117383,"meta":125,"style":125},"pkg update\n",[81,124271,124272],{"__ignoreMap":125},[204,124273,124274,124277],{"class":206,"line":207},[204,124275,124276],{"class":2049},"pkg",[204,124278,26328],{"class":319},[19,124280,124281],{},"然后换源",[196,124283,124285],{"className":117381,"code":124284,"language":117383,"meta":125,"style":125},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[81,124286,124287],{"__ignoreMap":125},[204,124288,124289,124291,124294],{"class":206,"line":207},[204,124290,123159],{"class":2049},[204,124292,124293],{"class":214}," $PREFIX",[204,124295,124296],{"class":319},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124298,124299],{},"将该文件内容替换为下面：",[196,124301,124303],{"className":117381,"code":124302,"language":117383,"meta":125,"style":125},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[81,124304,124305],{"__ignoreMap":125},[204,124306,124307,124310,124313,124316],{"class":206,"line":207},[204,124308,124309],{"class":2049},"deb",[204,124311,124312],{"class":319}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[204,124314,124315],{"class":319}," stable",[204,124317,124318],{"class":319}," main\n",[68,124320,124321,124348],{},[71,124322,124323,124324,124326,124327],{},"如果你使用的是",[81,124325,123159],{},"编辑器：",[68,124328,124329,124336,124342],{},[71,124330,124331,124332,124335],{},"按 ",[81,124333,124334],{},"Ctrl+O"," 保存文件。",[71,124337,124331,124338,124341],{},[81,124339,124340],{},"Enter"," 确认文件名。",[71,124343,124331,124344,124347],{},[81,124345,124346],{},"Ctrl+X"," 退出编辑器。",[71,124349,124323,124350,124326,124353],{},[81,124351,124352],{},"vim",[68,124354,124355,124361],{},[71,124356,124331,124357,124360],{},[81,124358,124359],{},"Esc"," 退出编辑模式。",[71,124362,124363,124364,124366],{},"输入 ",[81,124365,119306],{}," 保存并退出。",[19,124368,124369],{},"接下来重新更新软件源：",[196,124371,124373],{"className":117381,"code":124372,"language":117383,"meta":125,"style":125},"pkg update && pkg upgrade\n",[81,124374,124375],{"__ignoreMap":125},[204,124376,124377,124379,124381,124383,124385],{"class":206,"line":207},[204,124378,124276],{"class":2049},[204,124380,117432],{"class":319},[204,124382,26276],{"class":214},[204,124384,124276],{"class":2049},[204,124386,117418],{"class":319},[19,124388,124389],{},"安装python：",[196,124391,124393],{"className":117381,"code":124392,"language":117383,"meta":125,"style":125},"pkg install python\n",[81,124394,124395],{"__ignoreMap":125},[204,124396,124397,124399,124401],{"class":206,"line":207},[204,124398,124276],{"class":2049},[204,124400,23921],{"class":319},[204,124402,124403],{"class":319}," python\n",[19,124405,124406,26559],{},[30,124407,124408],{},"通过Termux访问设备存储",[19,124410,124411],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[196,124413,124415],{"className":117381,"code":124414,"language":117383,"meta":125,"style":125},"termux-setup-storage\n",[81,124416,124417],{"__ignoreMap":125},[204,124418,124419],{"class":206,"line":207},[204,124420,124414],{"class":2049},[161,124422,124423],{},[71,124424,124425,26559,124428],{},[30,124426,124427],{},"进入HTML文件所在的目录",[161,124429,124430],{},[71,124431,124432,124433,124435],{},"使用",[81,124434,101361],{},"命令进入HTML文件所在的目录：",[196,124437,124439],{"className":117381,"code":124438,"language":117383,"meta":125,"style":125},"cd ~\u002Fyour_html_folder\n",[81,124440,124441],{"__ignoreMap":125},[204,124442,124443,124445],{"class":206,"line":207},[204,124444,101361],{"class":263},[204,124446,124447],{"class":319}," ~\u002Fyour_html_folder\n",[161,124449,124450],{"start":126},[71,124451,124452,26559,124455,124460,124477],{},[30,124453,124454],{},"启动Python HTTP服务器",[161,124456,124457],{},[71,124458,124459],{},"运行以下命令启动一个简单的HTTP服务器：",[196,124461,124463],{"className":117381,"code":124462,"language":117383,"meta":125,"style":125},"python -m http.server 8000\n",[81,124464,124465],{"__ignoreMap":125},[204,124466,124467,124469,124471,124474],{"class":206,"line":207},[204,124468,30466],{"class":2049},[204,124470,100968],{"class":263},[204,124472,124473],{"class":319}," http.server",[204,124475,124476],{"class":263}," 8000\n",[161,124478,124479],{"start":131},[71,124480,124481,124482,124485],{},"这会在端口",[81,124483,124484],{},"8000","上启动一个Web服务器。",[68,124487,124488],{},[71,124489,124490],{},"启动服务器后，Termux会显示日志信息，例如：",[196,124492,124494],{"className":120901,"code":124493,"language":120903,"meta":120904,"style":125},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[81,124495,124496],{"__ignoreMap":125},[204,124497,124498],{"class":206,"line":207},[204,124499,124493],{},[68,124501,124502],{},[71,124503,124504],{},"这表示服务器已成功启动。",[19,124506,124507],{},[30,124508,124509],{},"在浏览器中访问HTML文件",[161,124511,124512],{},[71,124513,124514,26559,124517,124522],{},[30,124515,124516],{},"在同一设备上访问",[161,124518,124519],{},[71,124520,124521],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[196,124523,124526],{"className":124524,"code":124525,"language":71750,"meta":125,"style":125},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[81,124527,124528],{"__ignoreMap":125},[204,124529,124530,124533],{"class":206,"line":207},[204,124531,124532],{"class":214},"http:",[204,124534,124535],{"class":273},"\u002F\u002Flocalhost:8000\n",[68,124537,124538],{},[71,124539,124540,124541,124544],{},"如果HTML文件中有",[81,124542,124543],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124546,124548],{"id":124547},"_76-linux重点知识","7.6 Linux重点知识",[49,124550,124552],{"id":124551},"_761-关于点的说明","7.6.1 关于点的说明",[19,124554,124555],{},[23,124556],{"alt":125,"src":124557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124559,124560],{},"一点本目录，两点上目录",[49,124562,124564],{"id":124563},"_762-目录","7.6.2 目录",[22085,124566,124568],{"id":124567},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124570,124571],{},[30,124572,124573],{},"\u002Fboot:",[19,124575,124576],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124578,124579],{},[30,124580,124581],{},"\u002Fetc:",[19,124583,124584],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124586,124587],{},[30,124588,124589],{},"\u002Flib：",[19,124591,124592],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124594,124595],{},[30,124596,124597],{},"\u002Fsys:",[19,124599,124600],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22085,124602,124604],{"id":124603},"_7622-指令集合","7.6.2.2 指令集合",[19,124606,124607],{},[30,124608,124609],{},"\u002Fbin:",[19,124611,124612],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124614,124615],{},[30,124616,124617],{},"\u002Fsbin:",[19,124619,124620],{},"只有系统管理员才能使用的程序和指令",[22085,124622,124624],{"id":124623},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124626,124627],{},[30,124628,124629],{},"\u002Fdev:",[19,124631,124632],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124634,124635],{},[30,124636,124637],{},"\u002Fmedia:",[19,124639,124640],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124642,124643],{},[30,124644,124645],{},"\u002Fmnt:",[19,124647,124648],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22085,124650,124652],{"id":124651},"_7624-临时文件","7.6.2.4 临时文件",[19,124654,124655],{},[30,124656,124657],{},"\u002Frun:",[19,124659,124660],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124662,124663],{},[30,124664,124665],{},"\u002Flost+found:",[19,124667,124668],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124670,124671],{},[30,124672,124673],{},"\u002Ftmp:",[19,124675,124676],{},"这个目录是用来存放一些临时文件的",[22085,124678,124680],{"id":124679},"_7625-账户","7.6.2.5 账户",[19,124682,124683],{},[30,124684,124685],{},"\u002Froot：",[19,124687,124688],{},"系统管理员的用户主目录",[19,124690,124691,26559],{},[30,124692,124693],{},"\u002Fhome",[19,124695,124696],{},"用户的主目录，以用户的账号命名的",[19,124698,124699,26559],{},[30,124700,124701],{},"\u002Fusr",[19,124703,124704],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124706,124707],{},[30,124708,124709],{},"\u002Fusr\u002Fbin：",[19,124711,124712],{},"系统用户使用的应用程序与指令",[19,124714,124715],{},[30,124716,124717],{},"\u002Fusr\u002Fsbin：",[19,124719,124720],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124722,124723],{},[30,124724,124725],{},"\u002Fusr\u002Fsrc：",[19,124727,124728],{},"内核源代码默认的放置目录",[22085,124730,124732],{"id":124731},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124734,124735],{},[30,124736,124737],{},"\u002Fvar：",[19,124739,124740],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124742,124743],{},[30,124744,124745],{},"\u002Fproc:",[19,124747,124748,124749,124752],{},"管理 ",[30,124750,124751],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22085,124754,124756],{"id":124755},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124758,124759],{},[30,124760,124761],{},"\u002Fopt:",[19,124763,124764],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124766,124767],{},[30,124768,124769],{},"\u002Fsrv:",[19,124771,124772],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[49,124774,124776],{"id":124775},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124778,124779],{},[23,124780],{"alt":125,"src":124781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124783,124784],{},"windows-->linux:",[19,124786,124787],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124789,124790],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124792,124793],{},"linux传输文件到windows",[19,124795,124796],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[49,124798,124800],{"id":124799},"_764-易忘知识","7.6.4 易忘知识",[19,124802,124803],{},"操作系统内核查看",[196,124805,124806],{"className":117381,"code":121375,"language":117383,"meta":125,"style":125},[81,124807,124808],{"__ignoreMap":125},[204,124809,124810,124812],{"class":206,"line":207},[204,124811,70290],{"class":2049},[204,124813,121384],{"class":263},[19,124815,124816],{},[23,124817],{"alt":125,"src":124818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124820,124821],{},[23,124822],{"alt":125,"src":124823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[196,124825,124827],{"className":117381,"code":124826,"language":117383,"meta":125,"style":125},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[81,124828,124829,124841],{"__ignoreMap":125},[204,124830,124831,124833,124836,124839],{"class":206,"line":207},[204,124832,121592],{"class":2049},[204,124834,124835],{"class":319}," mvtest",[204,124837,124838],{"class":319}," mvtest2",[204,124840,2760],{"class":214},[204,124842,124843],{"class":206,"line":126},[204,124844,124845],{"class":2049},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124847,124848],{},[23,124849],{"alt":125,"src":124850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124852,124853],{},[23,124854],{"alt":125,"src":124855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124857,124858,124859,124862],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[81,124860,124861],{},"du -a"," 可以快速查看磁盘使用细节。",[49,124864,124866],{"id":124865},"_765-vim","7.6.5 Vim",[19,124868,124869],{},[23,124870],{"alt":125,"src":124871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124873,124874],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124876,124877],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124879,124880],{},[30,124881,124882],{},"1.命令模式：",[19,124884,124885],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124887,124888],{},"x 删除当前光标所在处的字符",[19,124890,124891],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124893,124894],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124896,124897],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124899,124900],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124902,124903],{},"dd 剪切当前行",[19,124905,124906],{},"yy 复制当前行",[19,124908,124909],{},"p 粘贴剪贴板内容到光标下方",[19,124911,124912],{},"P 粘贴剪贴板内容到光标上方",[19,124914,124915],{},"u 撤销上一次操作",[19,124917,124918],{},"ctrl+r 重做上一次操作",[19,124920,124921,124923],{},[1008,124922],{}," 保存文件",[19,124925,124926,124928],{},[858,124927],{}," 退出Vim编辑器",[19,124930,124931,124933],{},[858,124932],{},"! 强制退出Vim编辑器，不保存修改",[19,124935,124936],{},[30,124937,124938],{},"2.输入模式：",[19,124940,124941],{},[23,124942],{"alt":125,"src":124943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,124945,124946],{},[30,124947,124948],{},"3.底线命令模式：",[19,124950,124951],{},[23,124952],{"alt":125,"src":124953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,124955,124956],{},"按下esc可以退出底线命令模式",[49,124958,124960],{"id":124959},"_766-apt","7.6.6 apt",[19,124962,124963],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[49,124965,124967],{"id":124966},"_767-home与root的区别","7.6.7 home与root的区别",[19,124969,124970],{},[23,124971],{"alt":125,"src":124972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,124974,124975],{},[23,124976],{"alt":125,"src":124977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,124979,124980],{},[23,124981],{"alt":125,"src":124982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,124984,124985],{},[23,124986],{"alt":125,"src":124987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[49,124989,124991],{"id":124990},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,124993,124994],{},[62,124995,124996],{"href":124996,"rel":124997},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[66],[161,124999,125000,125003],{},[71,125001,125002],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[71,125004,125005],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125007,125008],{},[23,125009],{"alt":125,"src":125010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125012,125013],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125015,125016],{},[23,125017],{"alt":125,"src":125018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[196,125020,125022],{"className":120901,"code":125021,"language":120903,"meta":120904,"style":125},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[81,125023,125024,125029],{"__ignoreMap":125},[204,125025,125026],{"class":206,"line":207},[204,125027,125028],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[204,125030,125031],{"class":206,"line":126},[204,125032,125033],{},".\u002Fpycharm.sh\n",[19,125035,125036],{},"3️⃣创建.desktop文件",[19,125038,125039],{},[30,125040,125041],{},"原理：",[68,125043,125044,125054],{},[71,125045,125046,125047,125053],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[30,125048,125049,125052],{},[81,125050,125051],{},".desktop"," 文件"," 来识别应用。",[71,125055,125056,125058,125059],{},[81,125057,125051],{}," 文件相当于一个“应用注册表”，告诉系统：",[68,125060,125061,125064,125067,125070,125073],{},[71,125062,125063],{},"应用名字（Name）",[71,125065,125066],{},"图标（Icon）",[71,125068,125069],{},"执行命令（Exec）",[71,125071,125072],{},"分类（Categories）",[71,125074,125075],{},"是否需要终端（Terminal）",[196,125077,125079],{"className":120901,"code":125078,"language":120903,"meta":120904,"style":125},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[81,125080,125081,125086],{"__ignoreMap":125},[204,125082,125083],{"class":206,"line":207},[204,125084,125085],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[204,125087,125088],{"class":206,"line":126},[204,125089,125090],{},"nano pycharm.desktop\n",[19,125092,125093],{},"nano是一个命令行下的编辑器，也可以使用vim",[196,125095,125097],{"className":120901,"code":125096,"language":120903,"meta":120904,"style":125},"[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",[81,125098,125099,125104,125109,125114,125119,125124,125129,125134,125139,125144],{"__ignoreMap":125},[204,125100,125101],{"class":206,"line":207},[204,125102,125103],{},"[Desktop Entry]\n",[204,125105,125106],{"class":206,"line":126},[204,125107,125108],{},"Version=1.0\n",[204,125110,125111],{"class":206,"line":131},[204,125112,125113],{},"Type=Application\n",[204,125115,125116],{"class":206,"line":1281},[204,125117,125118],{},"Name=PyCharm\n",[204,125120,125121],{"class":206,"line":1287},[204,125122,125123],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[204,125125,125126],{"class":206,"line":1301},[204,125127,125128],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[204,125130,125131],{"class":206,"line":1307},[204,125132,125133],{},"Comment=JetBrains PyCharm IDE\n",[204,125135,125136],{"class":206,"line":1398},[204,125137,125138],{},"Categories=Development;IDE;\n",[204,125140,125141],{"class":206,"line":1404},[204,125142,125143],{},"Terminal=false\n",[204,125145,125146],{"class":206,"line":1416},[204,125147,125148],{},"StartupWMClass=jetbrains-pycharm\n",[68,125150,125151,125157,125163,125169],{},[71,125152,125153,125156],{},[81,125154,125155],{},"Exec"," → 点击图标时执行的命令",[71,125158,125159,125162],{},[81,125160,125161],{},"Icon"," → 显示在菜单和桌面上的图标",[71,125164,125165,125168],{},[81,125166,125167],{},"Terminal=false"," → 不打开终端",[71,125170,125171,125174],{},[81,125172,125173],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125176,125177,125178],"blockquote",{},[19,125179,125180,125181,125183,125184],{},"可以理解成 ",[81,125182,125051],{}," 文件是 Linux 的 ",[30,125185,125186],{},"快捷方式配置文件",[19,125188,125189],{},"4️⃣设置可执行权限",[196,125191,125193],{"className":120901,"code":125192,"language":120903,"meta":120904,"style":125},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[81,125194,125195],{"__ignoreMap":125},[204,125196,125197],{"class":206,"line":207},[204,125198,125192],{},[19,125200,125201],{},"5️⃣桌面图标启动的话如下：",[196,125203,125205],{"className":120901,"code":125204,"language":120903,"meta":120904,"style":125},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[81,125206,125207,125212],{"__ignoreMap":125},[204,125208,125209],{"class":206,"line":207},[204,125210,125211],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[204,125213,125214],{"class":206,"line":126},[204,125215,125216],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[161,125218,125219],{"start":131},[71,125220,125221],{},"下载Appimage文件实现软件的安装",[19,125223,125224],{},"1️⃣先下载appimage",[19,125226,125227],{},[62,125228,125229],{"href":125229,"rel":125230},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[66],[19,125232,125233],{},[23,125234],{"alt":125,"src":125235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125237,125238],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125240,125241],{},[23,125242],{"alt":125,"src":125243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125245,125246],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125248,125249],{},[23,125250],{"alt":125,"src":125251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125253,125254],{},[23,125255],{"alt":125,"src":125256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125258,125259,125260,125263],{},"3️⃣给他们放在",[81,125261,125262],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125265,125266],{},"4️⃣给软件执行权限",[196,125268,125270],{"className":120901,"code":125269,"language":120903,"meta":120904,"style":125},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[81,125271,125272,125277],{"__ignoreMap":125},[204,125273,125274],{"class":206,"line":207},[204,125275,125276],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[204,125278,125279],{"class":206,"line":126},[204,125280,125281],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125283,125284],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[196,125286,125288],{"className":117381,"code":125287,"language":117383,"meta":125,"style":125},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[81,125289,125290,125297,125304,125310],{"__ignoreMap":125},[204,125291,125292,125294],{"class":206,"line":207},[204,125293,101361],{"class":263},[204,125295,125296],{"class":319}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[204,125298,125299,125301],{"class":206,"line":126},[204,125300,101368],{"class":2049},[204,125302,125303],{"class":319}," .\u002Fqqmusic.desktop\n",[204,125305,125306,125308],{"class":206,"line":131},[204,125307,124352],{"class":2049},[204,125309,125303],{"class":319},[204,125311,125312,125314,125316,125318],{"class":206,"line":1281},[204,125313,24663],{"class":2049},[204,125315,24666],{"class":319},[204,125317,123218],{"class":319},[204,125319,125303],{"class":319},[19,125321,125322,125324],{},[81,125323,101368],{},"：一个 Linux 命令，主要功能是：",[68,125326,125327,125330],{},[71,125328,125329],{},"如果文件不存在，就创建一个新的空文件",[71,125331,125332],{},"如果文件已存在，就更新该文件的最后修改时间",[196,125334,125336],{"className":120901,"code":125335,"language":120903,"meta":120904,"style":125},"[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",[81,125337,125338,125342,125347,125352,125357,125361,125366],{"__ignoreMap":125},[204,125339,125340],{"class":206,"line":207},[204,125341,125103],{},[204,125343,125344],{"class":206,"line":126},[204,125345,125346],{},"Name=QQ音乐\n",[204,125348,125349],{"class":206,"line":131},[204,125350,125351],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[204,125353,125354],{"class":206,"line":1281},[204,125355,125356],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[204,125358,125359],{"class":206,"line":1287},[204,125360,125113],{},[204,125362,125363],{"class":206,"line":1301},[204,125364,125365],{},"Categories=Audio;Music;Player;\n",[204,125367,125368],{"class":206,"line":1307},[204,125369,125370],{},"Comment=QQ Music Client for Linux\n",[19,125372,125373],{},"将文件复制进去",[19,125375,125376],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125378,125379],{},[23,125380],{"alt":125,"src":125381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125383,125384],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125386,125387],{},[23,125388],{"alt":125,"src":125389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125391,125392,125393,125396,125397,125400],{},"如果你用的不是KDE，那么也可以直接修改",[81,125394,125395],{},"qqmuic.desktop","：在exec的末尾加上",[81,125398,125399],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[196,125402,125404],{"className":120901,"code":125403,"language":120903,"meta":120904,"style":125},"[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",[81,125405,125406,125410,125414,125419,125423,125427,125431],{"__ignoreMap":125},[204,125407,125408],{"class":206,"line":207},[204,125409,125103],{},[204,125411,125412],{"class":206,"line":126},[204,125413,125346],{},[204,125415,125416],{"class":206,"line":131},[204,125417,125418],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[204,125420,125421],{"class":206,"line":1281},[204,125422,125356],{},[204,125424,125425],{"class":206,"line":1287},[204,125426,125113],{},[204,125428,125429],{"class":206,"line":1301},[204,125430,125365],{},[204,125432,125433],{"class":206,"line":1307},[204,125434,125370],{},[19,125436,125437],{},[23,125438],{"alt":125,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125441,125442],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[196,125444,125446],{"className":120901,"code":125445,"language":120903,"meta":120904,"style":125},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[81,125447,125448],{"__ignoreMap":125},[204,125449,125450],{"class":206,"line":207},[204,125451,125445],{},[161,125453,125454],{"start":1281},[71,125455,125456],{},"去Flathub上安装软件",[19,125458,125459],{},[62,125460,125461],{"href":125461,"rel":125462},"https:\u002F\u002Fflathub.org\u002F",[66],[19,125464,125465],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125467,125468],{},[23,125469],{"alt":125,"src":125470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[196,125472,125474],{"className":120901,"code":125473,"language":120903,"meta":120904,"style":125},"flatpak install flathub com.obsproject.Studio\n",[81,125475,125476],{"__ignoreMap":125},[204,125477,125478],{"class":206,"line":207},[204,125479,125473],{},[19,125481,125482],{},[23,125483],{"alt":125,"src":125484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125486,125487],{},"2️⃣运行软件",[19,125489,125490],{},"a.官方方式：",[19,125492,125493],{},[23,125494],{"alt":125,"src":125495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[196,125497,125498],{"className":120901,"code":125473,"language":120903,"meta":120904,"style":125},[81,125499,125500],{"__ignoreMap":125},[204,125501,125502],{"class":206,"line":207},[204,125503,125473],{},[19,125505,125506],{},"b.当普通软件运行：",[19,125508,125509],{},[23,125510],{"alt":125,"src":125511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125513,125514],{},[23,125515],{"alt":125,"src":125516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5213,125518,125519],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":125,"searchDepth":126,"depth":126,"links":125521},[125522,125523,125528,125529,125535,125536],{"id":122254,"depth":126,"text":122255},{"id":122596,"depth":126,"text":122597,"children":125524},[125525,125526,125527],{"id":122600,"depth":131,"text":122601},{"id":122667,"depth":131,"text":122668},{"id":122928,"depth":131,"text":122929},{"id":123081,"depth":126,"text":123082},{"id":123319,"depth":126,"text":123320,"children":125530},[125531,125532,125533,125534],{"id":123371,"depth":131,"text":123372},{"id":123657,"depth":131,"text":123658},{"id":123928,"depth":131,"text":123929},{"id":124187,"depth":131,"text":124188},{"id":124246,"depth":126,"text":124247},{"id":124547,"depth":126,"text":124548,"children":125537},[125538,125539,125540,125541,125542,125543,125544,125545],{"id":124551,"depth":131,"text":124552},{"id":124563,"depth":131,"text":124564},{"id":124775,"depth":131,"text":124776},{"id":124799,"depth":131,"text":124800},{"id":124865,"depth":131,"text":124866},{"id":124959,"depth":131,"text":124960},{"id":124966,"depth":131,"text":124967},{"id":124990,"depth":131,"text":124991},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122246,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125552,"title":125553,"body":125554,"description":132,"extension":133,"meta":125558,"navigation":135,"path":125559,"seo":125560,"stem":125561,"__hash__":125562},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125555,"toc":125556},[],{"title":125,"searchDepth":126,"depth":126,"links":125557},[],{"category":30349},"\u002Fwiki\u002F2025-01-27-linux",{"title":125553,"description":132},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125564,"title":125565,"body":125566,"description":125570,"extension":133,"meta":125961,"navigation":135,"path":125962,"seo":125963,"stem":125964,"__hash__":125965},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125567,"toc":125959},[125568,125571,125575,125592,125595,125648,125652,125654,125694,125703,125707,125710,125951,125956],[19,125569,125570],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125572,125574],{"id":125573},"_1ubuntu环境配置","1.Ubuntu环境配置",[161,125576,125577,125580,125583,125586,125589],{},[71,125578,125579],{},"ubuntu环境换源",[71,125581,125582],{},"安装cuda",[71,125584,125585],{},"安装miniconda",[71,125587,125588],{},"安装pytorch",[71,125590,125591],{},"安装genesis",[19,125593,125594],{},"参考链接：",[196,125596,125598],{"className":23909,"code":125597,"language":23911,"meta":125,"style":125},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[81,125599,125600],{"__ignoreMap":125},[204,125601,125602,125605,125608,125611,125613,125616,125619,125621,125624,125627,125629,125632,125635,125637,125640,125643,125645],{"class":206,"line":207},[204,125603,125604],{"class":2049},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[204,125606,125607],{"class":319},"=blogdetail",[204,125609,125610],{"class":214},"&sharetype",[204,125612,260],{"class":210},[204,125614,125615],{"class":319},"blogdetail",[204,125617,125618],{"class":214},"&sharerId",[204,125620,260],{"class":210},[204,125622,125623],{"class":319},"144728092",[204,125625,125626],{"class":214},"&sharerefer",[204,125628,260],{"class":210},[204,125630,125631],{"class":319},"PC",[204,125633,125634],{"class":214},"&sharesource",[204,125636,260],{"class":210},[204,125638,125639],{"class":319},"qq_69379513",[204,125641,125642],{"class":214},"&sharefrom",[204,125644,260],{"class":210},[204,125646,125647],{"class":319},"from_link\n",[10,125649,125651],{"id":125650},"_2genesis-报错issue","2.Genesis 报错issue",[19,125653,125594],{},[196,125655,125656],{"className":23909,"code":125597,"language":23911,"meta":125,"style":125},[81,125657,125658],{"__ignoreMap":125},[204,125659,125660,125662,125664,125666,125668,125670,125672,125674,125676,125678,125680,125682,125684,125686,125688,125690,125692],{"class":206,"line":207},[204,125661,125604],{"class":2049},[204,125663,125607],{"class":319},[204,125665,125610],{"class":214},[204,125667,260],{"class":210},[204,125669,125615],{"class":319},[204,125671,125618],{"class":214},[204,125673,260],{"class":210},[204,125675,125623],{"class":319},[204,125677,125626],{"class":214},[204,125679,260],{"class":210},[204,125681,125631],{"class":319},[204,125683,125634],{"class":214},[204,125685,260],{"class":210},[204,125687,125639],{"class":319},[204,125689,125642],{"class":214},[204,125691,260],{"class":210},[204,125693,125647],{"class":319},[196,125695,125697],{"className":23909,"code":125696,"language":23911,"meta":125,"style":125},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[81,125698,125699],{"__ignoreMap":125},[204,125700,125701],{"class":206,"line":207},[204,125702,125696],{"class":2049},[10,125704,125706],{"id":125705},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125708,125709],{},"hello_robot.py",[196,125711,125713],{"className":30464,"code":125712,"language":30466,"meta":125,"style":125},"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",[81,125714,125715,125721,125736,125740,125752,125764,125768,125781,125785,125804,125814,125824,125838,125842,125846,125851,125855,125865,125872,125886,125893,125903,125908,125912,125930,125935,125939,125946],{"__ignoreMap":125},[204,125716,125717,125719],{"class":206,"line":207},[204,125718,30478],{"class":210},[204,125720,45391],{"class":214},[204,125722,125723,125726,125729,125731,125733],{"class":206,"line":126},[204,125724,125725],{"class":214},"os.environ[",[204,125727,125728],{"class":319},"'PYOPENGL_PLATFORM'",[204,125730,4529],{"class":214},[204,125732,260],{"class":210},[204,125734,125735],{"class":319}," 'glx'\n",[204,125737,125738],{"class":206,"line":131},[204,125739,2486],{"emptyLinePlaceholder":135},[204,125741,125742,125744,125747,125749],{"class":206,"line":1281},[204,125743,30478],{"class":210},[204,125745,125746],{"class":214}," genesis ",[204,125748,31469],{"class":210},[204,125750,125751],{"class":214}," gs\n",[204,125753,125754,125756,125759,125761],{"class":206,"line":1287},[204,125755,30823],{"class":210},[204,125757,125758],{"class":214}," pynput ",[204,125760,30478],{"class":210},[204,125762,125763],{"class":214}," keyboard\n",[204,125765,125766],{"class":206,"line":1301},[204,125767,2486],{"emptyLinePlaceholder":135},[204,125769,125770,125773,125776,125778],{"class":206,"line":1307},[204,125771,125772],{"class":214},"gs.init(",[204,125774,125775],{"class":5303},"backend",[204,125777,260],{"class":210},[204,125779,125780],{"class":214},"gs.gpu)\n",[204,125782,125783],{"class":206,"line":1398},[204,125784,2486],{"emptyLinePlaceholder":135},[204,125786,125787,125790,125792,125795,125798,125800,125802],{"class":206,"line":1404},[204,125788,125789],{"class":214},"scene ",[204,125791,260],{"class":210},[204,125793,125794],{"class":214}," gs.Scene(",[204,125796,125797],{"class":5303},"show_viewer",[204,125799,260],{"class":210},[204,125801,31562],{"class":263},[204,125803,221],{"class":214},[204,125805,125806,125809,125811],{"class":206,"line":1416},[204,125807,125808],{"class":214},"plane ",[204,125810,260],{"class":210},[204,125812,125813],{"class":214}," scene.add_entity(gs.morphs.Plane())\n",[204,125815,125816,125819,125821],{"class":206,"line":1698},[204,125817,125818],{"class":214},"franka ",[204,125820,260],{"class":210},[204,125822,125823],{"class":214}," scene.add_entity(\n",[204,125825,125826,125829,125831,125833,125836],{"class":206,"line":1703},[204,125827,125828],{"class":214},"    gs.morphs.MJCF(",[204,125830,45440],{"class":5303},[204,125832,260],{"class":210},[204,125834,125835],{"class":319},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[204,125837,38133],{"class":214},[204,125839,125840],{"class":206,"line":1709},[204,125841,221],{"class":214},[204,125843,125844],{"class":206,"line":1714},[204,125845,2486],{"emptyLinePlaceholder":135},[204,125847,125848],{"class":206,"line":1728},[204,125849,125850],{"class":214},"scene.build()\n",[204,125852,125853],{"class":206,"line":1733},[204,125854,2486],{"emptyLinePlaceholder":135},[204,125856,125857,125859,125862],{"class":206,"line":1739},[204,125858,32033],{"class":210},[204,125860,125861],{"class":2049}," on_press",[204,125863,125864],{"class":214},"(key):\n",[204,125866,125867,125870],{"class":206,"line":1760},[204,125868,125869],{"class":210},"    try",[204,125871,3825],{"class":214},[204,125873,125874,125876,125879,125881,125884],{"class":206,"line":1765},[204,125875,2583],{"class":210},[204,125877,125878],{"class":214}," key.char ",[204,125880,3035],{"class":210},[204,125882,125883],{"class":319}," 'q'",[204,125885,3825],{"class":214},[204,125887,125888,125890],{"class":206,"line":1779},[204,125889,15819],{"class":210},[204,125891,125892],{"class":263}," False\n",[204,125894,125895,125898,125901],{"class":206,"line":1784},[204,125896,125897],{"class":210},"    except",[204,125899,125900],{"class":263}," AttributeError",[204,125902,3825],{"class":214},[204,125904,125905],{"class":206,"line":1813},[204,125906,125907],{"class":210},"        pass\n",[204,125909,125910],{"class":206,"line":1818},[204,125911,2486],{"emptyLinePlaceholder":135},[204,125913,125914,125917,125919,125922,125925,125927],{"class":206,"line":1835},[204,125915,125916],{"class":214},"listener ",[204,125918,260],{"class":210},[204,125920,125921],{"class":214}," keyboard.Listener(",[204,125923,125924],{"class":5303},"on_press",[204,125926,260],{"class":210},[204,125928,125929],{"class":214},"on_press)\n",[204,125931,125932],{"class":206,"line":1840},[204,125933,125934],{"class":214},"listener.start()\n",[204,125936,125937],{"class":206,"line":1845},[204,125938,2486],{"emptyLinePlaceholder":135},[204,125940,125941,125943],{"class":206,"line":1850},[204,125942,108748],{"class":210},[204,125944,125945],{"class":214}," listener.running:\n",[204,125947,125948],{"class":206,"line":1864},[204,125949,125950],{"class":214},"    scene.step()\n",[19,125952,125953],{},[23,125954],{"alt":125,"src":125955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5213,125957,125958],{},"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":125,"searchDepth":126,"depth":126,"links":125960},[],{"category":23465},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125565,"description":125570},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125967,"title":125968,"body":125969,"description":132,"extension":133,"meta":125984,"navigation":135,"path":125985,"seo":125986,"stem":125987,"__hash__":125988},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125970,"toc":125981},[125971,125974,125978],[10,125972,125968],{"id":125973},"_1-基础知识",[14,125975,125977],{"id":125976},"_11-js的组成","1.1 js的组成",[19,125979,125980],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":125,"searchDepth":126,"depth":126,"links":125982},[125983],{"id":125976,"depth":126,"text":125977},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125968,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125990,"title":125991,"body":125992,"description":132,"extension":133,"meta":126131,"navigation":135,"path":126132,"seo":126133,"stem":126134,"__hash__":126135},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125993,"toc":126119},[125994,125997,126001,126004,126008,126018,126022,126025,126028,126031,126035,126042,126048,126052,126058,126069,126073,126076,126080,126083,126087,126090,126094,126097,126101,126104,126107,126110,126113,126116],[10,125995,125991],{"id":125996},"_2-vscode必备内容",[14,125998,126000],{"id":125999},"_21-标签分类","2.1 标签分类",[19,126002,126003],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126005,126007],{"id":126006},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126009,126010,126011,126013,126014,126017],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[81,126012,440],{}," 然后按 ",[81,126015,126016],{},"Tab","，快速自动生成基本结构。",[14,126019,126021],{"id":126020},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126023,126024],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126026,126027],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126029,126030],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126032,126034],{"id":126033},"_24-视图缩放","2.4 视图缩放",[19,126036,126037,126038,126041],{},"缩放视图 ",[81,126039,126040],{},"ctrl+"," 可实现代码增大。",[19,126043,126044,126047],{},[81,126045,126046],{},"ctrl-"," 可实现代码减小。",[14,126049,126051],{"id":126050},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126053,126054,126055,28471],{},"VSCode 新建文件快捷键为 ",[81,126056,126057],{},"ctrl+N",[19,126059,126060,126061,126064,126065,126068],{},"保存快捷键为 ",[81,126062,126063],{},"ctrl+S","，将文本保存为 ",[81,126066,126067],{},".html"," 文件。",[14,126070,126072],{"id":126071},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126074,126075],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126077,126079],{"id":126078},"_27-vscode-icons","2.7 vscode-icons",[19,126081,126082],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126084,126086],{"id":126085},"_28-easy-less","2.8 Easy LESS",[19,126088,126089],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126091,126093],{"id":126092},"_29-会了吧插件","2.9 会了吧插件",[19,126095,126096],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126098,126100],{"id":126099},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126102,126103],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126105,126106],{},"②选定多个相同的单词:ctrl+D",[19,126108,126109],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126111,126112],{},"④全局替换某些单词:ctrl+h",[19,126114,126115],{},"⑤快速定位到某一行:ctrl+g",[19,126117,126118],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":125,"searchDepth":126,"depth":126,"links":126120},[126121,126122,126123,126124,126125,126126,126127,126128,126129,126130],{"id":125999,"depth":126,"text":126000},{"id":126006,"depth":126,"text":126007},{"id":126020,"depth":126,"text":126021},{"id":126033,"depth":126,"text":126034},{"id":126050,"depth":126,"text":126051},{"id":126071,"depth":126,"text":126072},{"id":126078,"depth":126,"text":126079},{"id":126085,"depth":126,"text":126086},{"id":126092,"depth":126,"text":126093},{"id":126099,"depth":126,"text":126100},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125991,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126137,"title":126138,"body":126139,"description":132,"extension":133,"meta":126298,"navigation":135,"path":126299,"seo":126300,"stem":126301,"__hash__":126302},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126140,"toc":126290},[126141,126144,126148,126158,126164,126170,126174,126183,126187,126192,126195,126198,126202,126205,126215,126224,126233,126242,126252,126259,126264,126269,126282],[10,126142,126138],{"id":126143},"_3-html文本与容器标签",[14,126145,126147],{"id":126146},"_31-标题标签","3.1 标题标签",[19,126149,126150,126153,126154,126157],{},[81,126151,126152],{},"\u003Ch1>","我是一级标签",[81,126155,126156],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126159,126160,126153,126162],{},[81,126161,126152],{},[81,126163,126156],{},[19,126165,123420,126166,126169],{},[81,126167,126168],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126171,126173],{"id":126172},"_32-段落标签","3.2 段落标签",[19,126175,126176,126179,126180],{},[81,126177,126178],{},"\u003Cp>","....",[81,126181,126182],{},"\u003C\u002Fp>",[14,126184,126186],{"id":126185},"_33-换行标签","3.3 换行标签",[19,126188,126189],{},[81,126190,126191],{},"\u003Cbr \u002F>",[19,126193,126194],{},"具有强制换行的作用",[19,126196,126197],{},"单标签",[14,126199,126201],{"id":126200},"_34-文本格式化标签","3.4 文本格式化标签",[19,126203,126204],{},"提供粗体、斜体和下划线等效果",[19,126206,126207,126208,82625,126211,126214],{},"加粗：",[81,126209,126210],{},"\u003Cstrong>...\u003C\u002Fstrong>",[81,126212,126213],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126216,126217,126218,82625,126221,126214],{},"斜体：",[81,126219,126220],{},"\u003Cem>...\u003C\u002Fem>",[81,126222,126223],{},"\u003Ci>...\u003C\u002Fi>",[19,126225,126226,126227,82625,126230,126214],{},"删除线：",[81,126228,126229],{},"\u003Cdel>...\u003C\u002Fdel>",[81,126231,126232],{},"\u003Cs>...\u003C\u002Fs>",[19,126234,126235,126236,82625,126239,126214],{},"下划线：",[81,126237,126238],{},"\u003Cins>...\u003C\u002Fins>",[81,126240,126241],{},"\u003Cu>...\u003C\u002Fu>",[14,126243,126245,126246,18497,126249,102778],{"id":126244},"_35-div和span标签","3.5 ",[81,126247,126248],{},"\u003Cdiv>",[81,126250,126251],{},"\u003Cspan>",[19,126253,126254,43,126256,126258],{},[81,126255,126248],{},[81,126257,126251],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126260,126261],{},[81,126262,126263],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126265,126266],{},[81,126267,126268],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126270,126271,126272,126274,126275,126277,126278,126281],{},"两者特点：①",[81,126273,126248],{}," 标签用来布局，但一行通常只放一个 ",[81,126276,126248],{},"。可以理解为一个大盒子，独占一行，在 ",[81,126279,126280],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126283,77335,126284,126286,126287,126289],{},[81,126285,126251],{}," 标签也可用于布局，一行可以放多个 ",[81,126288,126251],{},"，可理解为小盒子。",{"title":125,"searchDepth":126,"depth":126,"links":126291},[126292,126293,126294,126295,126296],{"id":126146,"depth":126,"text":126147},{"id":126172,"depth":126,"text":126173},{"id":126185,"depth":126,"text":126186},{"id":126200,"depth":126,"text":126201},{"id":126244,"depth":126,"text":126297},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126138,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126304,"title":126305,"body":126306,"description":132,"extension":133,"meta":126502,"navigation":135,"path":126503,"seo":126504,"stem":126505,"__hash__":126506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126307,"toc":126494},[126308,126311,126315,126318,126324,126331,126337,126343,126346,126349,126352,126355,126358,126361,126364,126368,126371,126374,126377,126383,126389,126395,126402,126406,126412,126418,126421,126424,126430,126436,126442,126445,126448,126452,126455,126465,126471,126475,126484,126488,126491],[10,126309,126305],{"id":126310},"_4-html图像与链接",[14,126312,126314],{"id":126313},"_41-图像标签","4.1 图像标签",[19,126316,126317],{},"（1）标签",[19,126319,126320,126323],{},[81,126321,126322],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126325,126326,126327,126330],{},"src是",[81,126328,126329],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126332,126333,126334],{},"alt:文本，替换文本。图像不能显示的文字 ",[81,126335,126336],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126338,126339,126340],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[81,126341,126342],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126344,126345],{},"width:像素，设置图像的宽度",[19,126347,126348],{},"height:像素，设置图像的高度",[19,126350,126351],{},"border：像素，设置图像的边框粗细",[19,126353,126354],{},"（2）图像标签属性的注意点：",[19,126356,126357],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126359,126360],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126362,126363],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126365,126367],{"id":126366},"_42-路径注意要点","4.2 路径注意要点：",[19,126369,126370],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126372,126373],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126375,126376],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126378,126379,126380],{},"①同一级路径：图像文件位于HTML文件同一级，如",[81,126381,126382],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126384,126385,126386],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[81,126387,126388],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126390,126391,126392],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[81,126393,126394],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126396,126397,126398,464],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[62,126399,126400],{"href":126400,"rel":126401},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[66],[14,126403,126405],{"id":126404},"_43-超链接标签","4.3 超链接标签",[19,126407,126408,126411],{},[81,126409,126410],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126413,126414,126415],{},"①语法格式：",[81,126416,126417],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126419,126420],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126422,126423],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126425,126426,126427],{},"③链接分类：外部链接：",[81,126428,126429],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126431,126432,126433],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[81,126434,126435],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126437,126438,126439],{},"空链接：如果当时没有确定链接目标时，",[81,126440,126441],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126443,126444],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126446,126447],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126449,126451],{"id":126450},"_44-锚点链接","4.4 锚点链接",[19,126453,126454],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126456,126457,126458,126461,126462],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[81,126459,126460],{},"\u003Ca href=\"#two\">","第二级",[81,126463,126464],{},"\u003C\u002Fa>",[19,126466,126467,126468],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[81,126469,126470],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126472,126474],{"id":126473},"_45-注释标签","4.5 注释标签",[19,126476,126477,126480,126481],{},[81,126478,126479],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[81,126482,126483],{},"ctrl+\u002F",[14,126485,126487],{"id":126486},"_46-特殊字符","4.6 特殊字符",[19,126489,126490],{},"可以实现添加多个空格",[23,126492],{"style":25,"src":126493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":125,"searchDepth":126,"depth":126,"links":126495},[126496,126497,126498,126499,126500,126501],{"id":126313,"depth":126,"text":126314},{"id":126366,"depth":126,"text":126367},{"id":126404,"depth":126,"text":126405},{"id":126450,"depth":126,"text":126451},{"id":126473,"depth":126,"text":126474},{"id":126486,"depth":126,"text":126487},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126305,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126508,"title":126509,"body":126510,"description":132,"extension":133,"meta":126803,"navigation":135,"path":126804,"seo":126805,"stem":126806,"__hash__":126807},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126511,"toc":126794},[126512,126515,126519,126522,126525,126528,126531,126534,126537,126540,126543,126546,126566,126572,126576,126579,126582,126585,126588,126591,126594,126598,126601,126604,126607,126610,126623,126628,126631,126634,126649,126652,126655,126658,126661,126664,126668,126671,126678,126681,126684,126687,126690,126693,126699,126702,126705,126711,126714,126717,126720,126726,126729,126732,126746,126753,126756,126759,126766,126775,126778,126781,126784,126788,126791],[10,126513,126509],{"id":126514},"_5-html表格列表与表单",[14,126516,126518],{"id":126517},"_51-表格标签","5.1 表格标签",[19,126520,126521],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126523,126524],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126526,126527],{},"②表格基本语法：",[23,126529],{"style":25,"src":126530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126532,126533],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[23,126535],{"style":25,"src":126536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126538,126539],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[23,126541],{"style":25,"src":126542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126544,126545],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126547,126548,126551,126552,126554,126555,126558,126559,126561,126562,126565],{},[81,126549,126550],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[81,126553,126550],{},"内部必须拥有",[81,126556,126557],{},"\u003Ctr>","标签，一般位于第一行，",[81,126560,126550],{},"比",[81,126563,126564],{},"\u003Cth>","范围广",[19,126567,126568,126571],{},[81,126569,126570],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126573,126575],{"id":126574},"_52-合并单元格","5.2 合并单元格",[19,126577,126578],{},"（1）合并单元格方式：",[19,126580,126581],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126583,126584],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126586,126587],{},"（2）目标单元格：",[19,126589,126590],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126592,126593],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126595,126597],{"id":126596},"_53-列表标签","5.3 列表标签",[19,126599,126600],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126602,126603],{},"①无序列表：",[23,126605],{"style":25,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126608,126609],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126611,126612,126615,126616,126619,126620,126622],{},[81,126613,126614],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[81,126617,126618],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[81,126621,126614],{},"中输入其他标签或文字是不对的",[19,126624,126625,126627],{},[81,126626,126618],{},"之间相当于一个容器，可以容纳所有元素",[19,126629,126630],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126632,126633],{},"在css中去除前边的小圆点采用如下代码:",[196,126635,126639],{"className":126636,"code":126637,"language":126638,"meta":125,"style":125},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[81,126640,126641],{"__ignoreMap":125},[204,126642,126643,126646],{"class":206,"line":207},[204,126644,126645],{"class":51386},"list-style",[204,126647,126648],{"class":214},": none;\n",[19,126650,126651],{},"②有序列表：",[23,126653],{"style":25,"src":126654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126656,126657],{},"③自定义列表：",[23,126659],{"style":25,"src":126660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[23,126662],{"style":25,"src":126663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126665,126667],{"id":126666},"_54-表单标签","5.4 表单标签",[19,126669,126670],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126672,126673,126674,126677],{},"（1）表单域：包含单元素的区域，",[81,126675,126676],{},"\u003Cform>","标签可以实现信息的收集和传递。",[23,126679],{"style":25,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126682,126683],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126685,126686],{},"表单元素提交必须有name属性",[19,126688,126689],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126691,126692],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126694,77312,126695,126698],{},[81,126696,126697],{},"\u003Cinput>","输入表单元素",[23,126700],{"style":25,"src":126701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[23,126703],{"style":25,"src":126704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126706,126707,126708],{},"单选按钮：",[81,126709,126710],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[23,126712],{"style":25,"src":126713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126715,126716],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[23,126718],{"style":25,"src":126719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126721,126722,126725],{},[30,126723,126724],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126727,126728],{},"②select下拉表单元素：可以节约页面控件",[23,126730],{"style":25,"src":126731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126733,126734,13882,126736,126739,126740,126742,126743,126745],{},[30,126735,244],{},[81,126737,126738],{},"\u003Cselect>","中至少包含一对",[81,126741,102799],{},"；在",[81,126744,102799],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126747,126748,126749,126752],{},"③",[81,126750,126751],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[23,126754],{"style":25,"src":126755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126757,126758],{},"3行20列",[14,126760,126762,126763,102778],{"id":126761},"_55-lable标签","5.5 ",[81,126764,126765],{},"\u003Clable>",[19,126767,126768,126769,126771,126772,126774],{},"它不是表单标签，但常常与表单标签搭配使用，",[81,126770,126765],{},"标签用于绑定一个表单标签，当点击",[81,126773,126765],{},"标签内的文本",[19,126776,126777],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[23,126779],{"style":25,"src":126780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[23,126782],{"style":25,"src":126783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126785,126787],{"id":126786},"_56-实例","5.6 实例",[23,126789],{"style":25,"src":126790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5213,126792,126793],{},"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":125,"searchDepth":126,"depth":126,"links":126795},[126796,126797,126798,126799,126800,126802],{"id":126517,"depth":126,"text":126518},{"id":126574,"depth":126,"text":126575},{"id":126596,"depth":126,"text":126597},{"id":126666,"depth":126,"text":126667},{"id":126761,"depth":126,"text":126801},"5.5 \u003Clable>标签",{"id":126786,"depth":126,"text":126787},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126509,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126809,"title":126810,"body":126811,"description":132,"extension":133,"meta":127360,"navigation":135,"path":127361,"seo":127362,"stem":127363,"__hash__":127364},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126812,"toc":127335},[126813,126816,126820,126823,126826,126830,126833,126836,126839,126842,126845,126848,126851,126855,126858,126862,126865,126868,126871,126875,126878,126881,126884,126890,126893,126896,126899,126902,126905,126908,126911,126944,126948,126951,126954,126957,126961,126964,126967,126970,126973,126976,126980,126983,126986,126989,126993,126996,127000,127003,127007,127010,127015,127019,127022,127026,127029,127032,127035,127038,127065,127068,127072,127075,127078,127083,127086,127089,127093,127096,127101,127104,127107,127110,127114,127117,127120,127123,127127,127130,127133,127136,127140,127144,127147,127187,127190,127194,127201,127204,127208,127211,127257,127261,127264,127267,127270,127298,127302,127305,127332],[10,126814,126810],{"id":126815},"_6-css语法与文本样式",[14,126817,126819],{"id":126818},"_61-css语法规范","6.1 css语法规范",[19,126821,126822],{},"由两部分组成，选择器及一条或多条声明",[23,126824],{"style":25,"src":126825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126827,126828],{},[30,126829,244],{},[19,126831,126832],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126834,126835],{},"②属性与属性值以“键值对”的形式出现",[19,126837,126838],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126840,126841],{},"④属性和属性值之间用英文“;”分开",[23,126843],{"style":25,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[23,126846],{"style":25,"src":126847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[23,126849],{"style":25,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126852,126854],{"id":126853},"_62-css选择器","6.2 css选择器",[19,126856,126857],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[49,126859,126861],{"id":126860},"_621-标签选择器","6.2.1 标签选择器",[19,126863,126864],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126866,126867],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[23,126869],{"style":25,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[49,126872,126874],{"id":126873},"_622-类选择器","6.2.2 类选择器",[19,126876,126877],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126879,126880],{},"②样例",[23,126882],{"style":25,"src":126883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126885,126886,126887,126889],{},"③ ",[30,126888,126724],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126891,126892],{},"可以理解为给这个标签起了个名字，来表示；",[19,126894,126895],{},"长名称或词组可以使用横线来为选择器命名；",[19,126897,126898],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126900,126901],{},"命名要有意义；",[23,126903],{"style":25,"src":126904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126906,126907],{},"类选择器也可以指定特殊的元素p.center{}",[19,126909,126910],{},"p.center和.center都对",[196,126912,126914],{"className":126636,"code":126913,"language":126638,"meta":125,"style":125},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[81,126915,126916,126921,126930,126940],{"__ignoreMap":125},[204,126917,126918],{"class":206,"line":207},[204,126919,126920],{"class":273},"\u002F* 类选择器指定特殊元素 *\u002F\n",[204,126922,126923,126925,126928],{"class":206,"line":126},[204,126924,19],{"class":51386},[204,126926,126927],{"class":2049},".center",[204,126929,15659],{"class":214},[204,126931,126932,126934,126936,126938],{"class":206,"line":131},[204,126933,70612],{"class":263},[204,126935,51523],{"class":214},[204,126937,51678],{"class":263},[204,126939,1377],{"class":214},[204,126941,126942],{"class":206,"line":1281},[204,126943,1651],{"class":214},[49,126945,126947],{"id":126946},"_623-多类名使用","6.2.3 多类名使用",[19,126949,126950],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[23,126952],{"style":25,"src":126953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,126955,126956],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[49,126958,126960],{"id":126959},"_624-id选择器","6.2.4 id选择器",[19,126962,126963],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,126965,126966],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[23,126968],{"style":25,"src":126969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,126971,126972],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,126974,126975],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[49,126977,126979],{"id":126978},"_625-通配符选择器","6.2.5 通配符选择器",[19,126981,126982],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,126984,126985],{},"* {",[19,126987,126988],{},"color=\"red\"}",[49,126990,126992],{"id":126991},"_626-总结","6.2.6 总结",[23,126994],{"style":25,"src":126995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,126997,126999],{"id":126998},"_63-css字体属性","6.3 css字体属性",[19,127001,127002],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[49,127004,127006],{"id":127005},"_631-字体系列","6.3.1 字体系列",[19,127008,127009],{},"font-family: '宋体';",[19,127011,127012,127014],{},[30,127013,244],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[49,127016,127018],{"id":127017},"_632-字体大小","6.3.2 字体大小",[19,127020,127021],{},"font-size: 20px",[19,127023,127024,26559],{},[30,127025,126724],{},[19,127027,127028],{},"①px（像素）大小是网页的最常用单位",[19,127030,127031],{},"②谷歌浏览器默认为16px",[19,127033,127034],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127036,127037],{},"④可以给body指定整个页面的大小：会自动引用",[196,127039,127041],{"className":126636,"code":127040,"language":126638,"meta":125,"style":125},"body {\n  font-size: 16px;\n}\n",[81,127042,127043,127049,127061],{"__ignoreMap":125},[204,127044,127045,127047],{"class":206,"line":207},[204,127046,51886],{"class":51386},[204,127048,15659],{"class":214},[204,127050,127051,127053,127055,127057,127059],{"class":206,"line":126},[204,127052,70712],{"class":263},[204,127054,51523],{"class":214},[204,127056,814],{"class":263},[204,127058,51578],{"class":210},[204,127060,1377],{"class":214},[204,127062,127063],{"class":206,"line":131},[204,127064,1651],{"class":214},[19,127066,127067],{},"⑤标题标签比较特殊，需要单独指定大小",[49,127069,127071],{"id":127070},"_633-字体粗细","6.3.3 字体粗细",[19,127073,127074],{},"font-weight: bold;",[19,127076,127077],{},"font-weight: 100；",[19,127079,127080,127082],{},[30,127081,244],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127084,127085],{},"font-weight= 400;",[19,127087,127088],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[49,127090,127092],{"id":127091},"_634-文字样式","6.3.4 文字样式",[19,127094,127095],{},"font-style: normal；",[19,127097,127098,26559],{},[30,127099,127100],{},"属性值",[19,127102,127103],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127105,127106],{},"②italic：浏览器会显示斜体的字体样式",[23,127108],{"style":25,"src":127109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[49,127111,127113],{"id":127112},"_635-字体符合属性","6.3.5 字体符合属性",[23,127115],{"style":25,"src":127116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[23,127118],{"style":25,"src":127119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127121,127122],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127124,127125,26559],{},[30,127126,126724],{},[19,127128,127129],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127131,127132],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127134,127135],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127137,127139],{"id":127138},"_64-css-test文本属性","6.4 css test文本属性",[49,127141,127143],{"id":127142},"_641-文本颜色","6.4.1 文本颜色",[19,127145,127146],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[196,127148,127150],{"className":126636,"code":127149,"language":126638,"meta":125,"style":125},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[81,127151,127152,127157,127163,127173,127178,127183],{"__ignoreMap":125},[204,127153,127154],{"class":206,"line":207},[204,127155,127156],{"class":273},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[204,127158,127159,127161],{"class":206,"line":126},[204,127160,19],{"class":51386},[204,127162,15659],{"class":214},[204,127164,127165,127167,127169,127171],{"class":206,"line":131},[204,127166,70991],{"class":263},[204,127168,51523],{"class":214},[204,127170,57507],{"class":263},[204,127172,1377],{"class":214},[204,127174,127175],{"class":206,"line":1281},[204,127176,127177],{"class":273},"  \u002F* color: #ff0000; *\u002F\n",[204,127179,127180],{"class":206,"line":1287},[204,127181,127182],{"class":273},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[204,127184,127185],{"class":206,"line":1301},[204,127186,1651],{"class":214},[23,127188],{"style":25,"src":127189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[49,127191,127193],{"id":127192},"_642-对齐文本","6.4.2 对齐文本",[19,127195,127196,127197,127200],{},"text-align属于用于设置元素内文本内容的 ",[30,127198,127199],{},"水平对齐"," 方式",[19,127202,127203],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[49,127205,127207],{"id":127206},"_643-装饰文本","6.4.3 装饰文本",[19,127209,127210],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[196,127212,127214],{"className":126636,"code":127213,"language":126638,"meta":125,"style":125},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[81,127215,127216,127222,127232,127236,127242,127253],{"__ignoreMap":125},[204,127217,127218,127220],{"class":206,"line":207},[204,127219,62],{"class":51386},[204,127221,15659],{"class":214},[204,127223,127224,127226,127228,127230],{"class":206,"line":126},[204,127225,70588],{"class":263},[204,127227,51523],{"class":214},[204,127229,54823],{"class":263},[204,127231,1377],{"class":214},[204,127233,127234],{"class":206,"line":131},[204,127235,1651],{"class":214},[204,127237,127238,127240],{"class":206,"line":1281},[204,127239,19],{"class":51386},[204,127241,15659],{"class":214},[204,127243,127244,127246,127248,127251],{"class":206,"line":1287},[204,127245,70588],{"class":263},[204,127247,51523],{"class":214},[204,127249,127250],{"class":263},"underline",[204,127252,1377],{"class":214},[204,127254,127255],{"class":206,"line":1301},[204,127256,1651],{"class":214},[49,127258,127260],{"id":127259},"_644-文本缩进","6.4.4 文本缩进",[19,127262,127263],{},"实现文本的第一行首行缩进自己指定的距离",[19,127265,127266],{},"20px往右边走；-20px往左边走",[19,127268,127269],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[196,127271,127273],{"className":126636,"code":127272,"language":126638,"meta":125,"style":125},"p {\n  text-indent: 2em;\n}\n",[81,127274,127275,127281,127294],{"__ignoreMap":125},[204,127276,127277,127279],{"class":206,"line":207},[204,127278,19],{"class":51386},[204,127280,15659],{"class":214},[204,127282,127283,127286,127288,127290,127292],{"class":206,"line":126},[204,127284,127285],{"class":263},"  text-indent",[204,127287,51523],{"class":214},[204,127289,292],{"class":263},[204,127291,23640],{"class":210},[204,127293,1377],{"class":214},[204,127295,127296],{"class":206,"line":131},[204,127297,1651],{"class":214},[49,127299,127301],{"id":127300},"_645-行间距","6.4.5 行间距",[19,127303,127304],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[196,127306,127308],{"className":126636,"code":127307,"language":126638,"meta":125,"style":125},"p {\n  line-height: 1.6;\n}\n",[81,127309,127310,127316,127328],{"__ignoreMap":125},[204,127311,127312,127314],{"class":206,"line":207},[204,127313,19],{"class":51386},[204,127315,15659],{"class":214},[204,127317,127318,127321,127323,127326],{"class":206,"line":126},[204,127319,127320],{"class":263},"  line-height",[204,127322,51523],{"class":214},[204,127324,127325],{"class":263},"1.6",[204,127327,1377],{"class":214},[204,127329,127330],{"class":206,"line":131},[204,127331,1651],{"class":214},[5213,127333,127334],{},"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":125,"searchDepth":126,"depth":126,"links":127336},[127337,127338,127346,127353],{"id":126818,"depth":126,"text":126819},{"id":126853,"depth":126,"text":126854,"children":127339},[127340,127341,127342,127343,127344,127345],{"id":126860,"depth":131,"text":126861},{"id":126873,"depth":131,"text":126874},{"id":126946,"depth":131,"text":126947},{"id":126959,"depth":131,"text":126960},{"id":126978,"depth":131,"text":126979},{"id":126991,"depth":131,"text":126992},{"id":126998,"depth":126,"text":126999,"children":127347},[127348,127349,127350,127351,127352],{"id":127005,"depth":131,"text":127006},{"id":127017,"depth":131,"text":127018},{"id":127070,"depth":131,"text":127071},{"id":127091,"depth":131,"text":127092},{"id":127112,"depth":131,"text":127113},{"id":127138,"depth":126,"text":127139,"children":127354},[127355,127356,127357,127358,127359],{"id":127142,"depth":131,"text":127143},{"id":127192,"depth":131,"text":127193},{"id":127206,"depth":131,"text":127207},{"id":127259,"depth":131,"text":127260},{"id":127300,"depth":131,"text":127301},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126810,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127366,"title":127367,"body":127368,"description":132,"extension":133,"meta":128017,"navigation":135,"path":128018,"seo":128019,"stem":128020,"__hash__":128021},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127369,"toc":127998},[127370,127373,127377,127381,127441,127445,127455,127458,127461,127465,127490,127494,127497,127500,127503,127506,127509,127513,127516,127519,127561,127564,127590,127596,127599,127603,127607,127613,127616,127619,127622,127625,127628,127631,127676,127680,127683,127686,127690,127694,127723,127726,127731,127734,127737,127740,127743,127747,127751,127754,127756,127759,127763,127766,127770,127773,127776,127779,127783,127787,127793,127803,127806,127809,127812,127815,127818,127941,127949,127957,127995],[10,127371,127367],{"id":127372},"_7-css引入方式与选择器进阶",[14,127374,127376],{"id":127375},"_71-css引入方式","7.1 css引入方式",[49,127378,127380],{"id":127379},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[196,127382,127386],{"className":127383,"code":127384,"language":127385,"meta":125,"style":125},"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",[81,127387,127388,127396,127403,127415,127428,127433],{"__ignoreMap":125},[204,127389,127390,127392,127394],{"class":206,"line":207},[204,127391,1123],{"class":214},[204,127393,5213],{"class":51386},[204,127395,51393],{"class":214},[204,127397,127398,127401],{"class":206,"line":126},[204,127399,127400],{"class":51386},"  h1",[204,127402,15659],{"class":214},[204,127404,127405,127408,127410,127413],{"class":206,"line":131},[204,127406,127407],{"class":263},"    color",[204,127409,51523],{"class":214},[204,127411,127412],{"class":263},"blue",[204,127414,1377],{"class":214},[204,127416,127417,127420,127422,127424,127426],{"class":206,"line":1281},[204,127418,127419],{"class":263},"    font-size",[204,127421,51523],{"class":214},[204,127423,1013],{"class":263},[204,127425,51578],{"class":210},[204,127427,1377],{"class":214},[204,127429,127430],{"class":206,"line":1287},[204,127431,127432],{"class":214},"  }\n",[204,127434,127435,127437,127439],{"class":206,"line":1301},[204,127436,51871],{"class":214},[204,127438,5213],{"class":51386},[204,127440,51393],{"class":214},[19,127442,127443,26559],{},[30,127444,126724],{},[19,127446,77312,127447,127450,127451,127454],{},[81,127448,127449],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[81,127452,127453],{},"\u003Chead>","标签中",[19,127456,127457],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127459,127460],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[49,127462,127464],{"id":127463},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[196,127466,127468],{"className":127383,"code":127467,"language":127385,"meta":125,"style":125},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[81,127469,127470],{"__ignoreMap":125},[204,127471,127472,127474,127476,127478,127480,127483,127486,127488],{"class":206,"line":207},[204,127473,1123],{"class":214},[204,127475,19],{"class":51386},[204,127477,62712],{"class":2049},[204,127479,260],{"class":214},[204,127481,127482],{"class":319},"\"color: red; font-size: 16px;\"",[204,127484,127485],{"class":214},">这是一个段落\u003C\u002F",[204,127487,19],{"class":51386},[204,127489,51393],{"class":214},[19,127491,127492,26559],{},[30,127493,126724],{},[19,127495,127496],{},"①style其实就是标签的属性",[19,127498,127499],{},"②在双引号中间，写法要符合css规范",[19,127501,127502],{},"③可以控制当前的标签设置样式",[19,127504,127505],{},"④书写繁琐，简单时才用",[19,127507,127508],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[49,127510,127512],{"id":127511},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127514,127515],{},"使用最多，单独建一个css文件，然后html引用",[19,127517,127518],{},"①css文件部分： style.css",[196,127520,127522],{"className":126636,"code":127521,"language":126638,"meta":125,"style":125},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[81,127523,127524,127529,127535,127545,127557],{"__ignoreMap":125},[204,127525,127526],{"class":206,"line":207},[204,127527,127528],{"class":273},"\u002F* style.css *\u002F\n",[204,127530,127531,127533],{"class":206,"line":126},[204,127532,10],{"class":51386},[204,127534,15659],{"class":214},[204,127536,127537,127539,127541,127543],{"class":206,"line":131},[204,127538,70991],{"class":263},[204,127540,51523],{"class":214},[204,127542,127412],{"class":263},[204,127544,1377],{"class":214},[204,127546,127547,127549,127551,127553,127555],{"class":206,"line":1281},[204,127548,70712],{"class":263},[204,127550,51523],{"class":214},[204,127552,1013],{"class":263},[204,127554,51578],{"class":210},[204,127556,1377],{"class":214},[204,127558,127559],{"class":206,"line":1287},[204,127560,1651],{"class":214},[19,127562,127563],{},"②html部分",[196,127565,127567],{"className":127383,"code":127566,"language":127385,"meta":125,"style":125},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[81,127568,127569],{"__ignoreMap":125},[204,127570,127571,127573,127575,127577,127579,127581,127583,127585,127588],{"class":206,"line":207},[204,127572,1123],{"class":214},[204,127574,69091],{"class":51386},[204,127576,69094],{"class":2049},[204,127578,260],{"class":214},[204,127580,69099],{"class":319},[204,127582,61143],{"class":2049},[204,127584,260],{"class":214},[204,127586,127587],{"class":319},"\"style.css\"",[204,127589,51393],{"class":214},[19,127591,127592,127595],{},[81,127593,127594],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127597,127598],{},"ctrl+0回到页面原来大小",[14,127600,127602],{"id":127601},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[49,127604,127606],{"id":127605},"_721-快速生成html","7.2.1 快速生成html",[19,127608,127609,127610],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[81,127611,127612],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127614,127615],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127617,127618],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127620,127621],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127623,127624],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127626,127627],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127629,127630],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[196,127632,127634],{"className":127383,"code":127633,"language":127385,"meta":125,"style":125},"\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",[81,127635,127636,127641,127646,127651,127656,127661,127666,127671],{"__ignoreMap":125},[204,127637,127638],{"class":206,"line":207},[204,127639,127640],{"class":273},"\u003C!-- Emmet 语法示例 -->\n",[204,127642,127643],{"class":206,"line":126},[204,127644,127645],{"class":273},"\u003C!-- div*3        → 生成3个div -->\n",[204,127647,127648],{"class":206,"line":131},[204,127649,127650],{"class":273},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[204,127652,127653],{"class":206,"line":1281},[204,127654,127655],{"class":273},"\u003C!-- div+p        → 兄弟div和p -->\n",[204,127657,127658],{"class":206,"line":1287},[204,127659,127660],{"class":273},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[204,127662,127663],{"class":206,"line":1301},[204,127664,127665],{"class":273},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[204,127667,127668],{"class":206,"line":1307},[204,127669,127670],{"class":273},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[204,127672,127673],{"class":206,"line":1398},[204,127674,127675],{"class":273},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[49,127677,127679],{"id":127678},"_722-快速生成css","7.2.2 快速生成css",[19,127681,127682],{},"简写开头",[19,127684,127685],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127687,127689],{"id":127688},"_73-css复合选择器","7.3 css复合选择器",[49,127691,127693],{"id":127692},"_731-后代选择器","7.3.1 后代选择器",[196,127695,127697],{"className":126636,"code":127696,"language":126638,"meta":125,"style":125},".parent .child {\n  color: blue;\n}\n",[81,127698,127699,127709,127719],{"__ignoreMap":125},[204,127700,127701,127704,127707],{"class":206,"line":207},[204,127702,127703],{"class":2049},".parent",[204,127705,127706],{"class":2049}," .child",[204,127708,15659],{"class":214},[204,127710,127711,127713,127715,127717],{"class":206,"line":126},[204,127712,70991],{"class":263},[204,127714,51523],{"class":214},[204,127716,127412],{"class":263},[204,127718,1377],{"class":214},[204,127720,127721],{"class":206,"line":131},[204,127722,1651],{"class":214},[19,127724,127725],{},"元素1 元素2 {样式声明}",[19,127727,127728],{},[30,127729,127730],{},"注意点:",[19,127732,127733],{},"①元素1和元素2中间用空格隔开",[19,127735,127736],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127738,127739],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127741,127742],{},"④元素1和元素2可以是任意基础选择器",[49,127744,127746],{"id":127745},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127748,127749],{},[30,127750,127730],{},[19,127752,127753],{},"①元素1和元素2中间用大于号隔开",[19,127755,127736],{},[19,127757,127758],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[49,127760,127762],{"id":127761},"_733-并集选择器","7.3.3 并集选择器",[19,127764,127765],{},"元素1，元素2 {样式声明}",[19,127767,127768],{},[30,127769,127730],{},[19,127771,127772],{},"①元素1和元素2中间用逗号隔开",[19,127774,127775],{},"②逗号可以理解为和的意思",[19,127777,127778],{},"③并集选择器通常用于集体声明",[49,127780,127782],{"id":127781},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127784,127785],{},[30,127786,127730],{},[19,127788,127789,127790,127792],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69091,127791],{},"－:visited－:hover－:active。",[19,127794,127795,127796,127799,127800,47],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127797,127798],"hover",{}," 、 ",[127801,127802],"first-child",{},[19,127804,127805],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127807,127808],{},"link对没访问的进行设置",[19,127810,127811],{},"vistied对已访问的进行改变",[19,127813,127814],{},"hover鼠标经过就会变",[19,127816,127817],{},"active常按(点)就会变",[196,127819,127821],{"className":126636,"code":127820,"language":126638,"meta":125,"style":125},"\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",[81,127822,127823,127828,127837,127847,127857,127861,127870,127881,127885,127893,127903,127913,127917,127926,127937],{"__ignoreMap":125},[204,127824,127825],{"class":206,"line":207},[204,127826,127827],{"class":273},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[204,127829,127830,127832,127835],{"class":206,"line":126},[204,127831,62],{"class":51386},[204,127833,127834],{"class":2049},":link",[204,127836,15659],{"class":214},[204,127838,127839,127841,127843,127845],{"class":206,"line":131},[204,127840,70991],{"class":263},[204,127842,51523],{"class":214},[204,127844,62455],{"class":263},[204,127846,1377],{"class":214},[204,127848,127849,127851,127853,127855],{"class":206,"line":1281},[204,127850,70588],{"class":263},[204,127852,51523],{"class":214},[204,127854,54823],{"class":263},[204,127856,1377],{"class":214},[204,127858,127859],{"class":206,"line":1287},[204,127860,1651],{"class":214},[204,127862,127863,127865,127868],{"class":206,"line":1301},[204,127864,62],{"class":51386},[204,127866,127867],{"class":2049},":visited",[204,127869,15659],{"class":214},[204,127871,127872,127874,127876,127879],{"class":206,"line":1307},[204,127873,70991],{"class":263},[204,127875,51523],{"class":214},[204,127877,127878],{"class":263},"purple",[204,127880,1377],{"class":214},[204,127882,127883],{"class":206,"line":1398},[204,127884,1651],{"class":214},[204,127886,127887,127889,127891],{"class":206,"line":1404},[204,127888,62],{"class":51386},[204,127890,61026],{"class":2049},[204,127892,15659],{"class":214},[204,127894,127895,127897,127899,127901],{"class":206,"line":1416},[204,127896,70991],{"class":263},[204,127898,51523],{"class":214},[204,127900,54975],{"class":263},[204,127902,1377],{"class":214},[204,127904,127905,127907,127909,127911],{"class":206,"line":1698},[204,127906,70588],{"class":263},[204,127908,51523],{"class":214},[204,127910,127250],{"class":263},[204,127912,1377],{"class":214},[204,127914,127915],{"class":206,"line":1703},[204,127916,1651],{"class":214},[204,127918,127919,127921,127924],{"class":206,"line":1709},[204,127920,62],{"class":51386},[204,127922,127923],{"class":2049},":active",[204,127925,15659],{"class":214},[204,127927,127928,127930,127932,127935],{"class":206,"line":1714},[204,127929,70991],{"class":263},[204,127931,51523],{"class":214},[204,127933,127934],{"class":263},"green",[204,127936,1377],{"class":214},[204,127938,127939],{"class":206,"line":1728},[204,127940,1651],{"class":214},[49,127942,127944,127945,127948],{"id":127943},"_735-伪类选择器","7.3.5 ",[127946,127947],"focus",{},"伪类选择器",[19,127950,127951,127953,127954,127956],{},[127946,127952],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[81,127955,126697],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[196,127958,127960],{"className":126636,"code":127959,"language":126638,"meta":125,"style":125},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[81,127961,127962,127970,127981,127991],{"__ignoreMap":125},[204,127963,127964,127966,127968],{"class":206,"line":207},[204,127965,53907],{"class":51386},[204,127967,61986],{"class":2049},[204,127969,15659],{"class":214},[204,127971,127972,127975,127977,127979],{"class":206,"line":126},[204,127973,127974],{"class":263},"  border-color",[204,127976,51523],{"class":214},[204,127978,54975],{"class":263},[204,127980,1377],{"class":214},[204,127982,127983,127985,127987,127989],{"class":206,"line":131},[204,127984,70884],{"class":263},[204,127986,51523],{"class":214},[204,127988,54823],{"class":263},[204,127990,1377],{"class":214},[204,127992,127993],{"class":206,"line":1281},[204,127994,1651],{"class":214},[5213,127996,127997],{},"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":125,"searchDepth":126,"depth":126,"links":127999},[128000,128005,128009],{"id":127375,"depth":126,"text":127376,"children":128001},[128002,128003,128004],{"id":127379,"depth":131,"text":127380},{"id":127463,"depth":131,"text":127464},{"id":127511,"depth":131,"text":127512},{"id":127601,"depth":126,"text":127602,"children":128006},[128007,128008],{"id":127605,"depth":131,"text":127606},{"id":127678,"depth":131,"text":127679},{"id":127688,"depth":126,"text":127689,"children":128010},[128011,128012,128013,128014,128015],{"id":127692,"depth":131,"text":127693},{"id":127745,"depth":131,"text":127746},{"id":127761,"depth":131,"text":127762},{"id":127781,"depth":131,"text":127782},{"id":127943,"depth":131,"text":128016},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127367,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128023,"title":128024,"body":128025,"description":132,"extension":133,"meta":129948,"navigation":135,"path":129949,"seo":129950,"stem":129951,"__hash__":129952},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128026,"toc":129922},[128027,128030,128034,128043,128047,128073,128078,128081,128084,128087,128090,128094,128097,128107,128115,128119,128154,128159,128162,128165,128168,128171,128175,128178,128187,128191,128204,128209,128212,128215,128218,128222,128225,128229,128232,128287,128290,128321,128324,128378,128382,128385,128551,128674,128677,128680,128683,128686,128690,128693,128697,128700,128703,128707,128710,128741,128768,128796,128799,128803,128829,128872,128876,128970,128973,129000,129003,129006,129009,129012,129015,129018,129021,129024,129027,129031,129088,129115,129119,129167,129171,129212,129214,129217,129220,129223,129226,129230,129322,129325,129328,129331,129335,129458,129659,129663,129667,129670,129673,129676,129680,129683,129686,129711,129714,129717,129720,129723,129726,129730,129738,129800,129803,129861,129864,129867,129870,129873,129876,129879,129882,129919],[10,128028,128024],{"id":128029},"_8-css显示模式与背景特性",[14,128031,128033],{"id":128032},"_81-css元素显示模式","8.1 css元素显示模式",[19,128035,128036,128037,128039,128040,128042],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[81,128038,126248],{},"自己占一行，比如一行可以放多个",[81,128041,126251],{},"，HTML 元素一般分为块元素和行内元素两种类型",[49,128044,128046],{"id":128045},"_811-块元素","8.1.1 块元素",[19,128048,128049,128050,128052,128053,426,128056,426,128058,426,128060,426,128063,426,128066,128069,128070,128072],{},"常见的块元素有",[81,128051,126152],{},"~",[81,128054,128055],{},"\u003Ch6>",[81,128057,126178],{},[81,128059,126248],{},[81,128061,128062],{},"\u003Cul>",[81,128064,128065],{},"\u003Col>",[81,128067,128068],{},"\u003Cli>","等，其中 ",[81,128071,126248],{}," 标签是最典型的块元素",[19,128074,128075],{},[30,128076,128077],{},"块级元素的特点：",[19,128079,128080],{},"① 比较霸道，自己独占一行。",[19,128082,128083],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128085,128086],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128088,128089],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128091,128092],{},[30,128093,244],{},[19,128095,128096],{},"①文字类的元素内不能使用块级元素",[19,128098,77335,128099,128101,128102,128104,128105],{},[81,128100,126178],{}," 标签主要用于存放文字，因此 ",[81,128103,126178],{}," 里面不能放块级元素，特别是不能放",[81,128106,126248],{},[19,128108,128109,128110,128052,128112,128114],{},"⑥同理， ",[81,128111,126152],{},[81,128113,128055],{},"等都是文字类块级标签，里面也不能放其他块级元素",[49,128116,128118],{"id":128117},"_812-行内元素","8.1.2 行内元素",[19,128120,128121,128122,426,128124,426,128127,426,128130,426,128133,426,128136,426,128139,426,128142,426,128145,426,128148,128150,128151,128153],{},"常见的行内元素有 ",[81,128123,126410],{},[81,128125,128126],{},"\u003Cstrong>",[81,128128,128129],{},"\u003Cb>",[81,128131,128132],{},"\u003Cem>",[81,128134,128135],{},"\u003Ci>",[81,128137,128138],{},"\u003Cdel>",[81,128140,128141],{},"\u003Cs>",[81,128143,128144],{},"\u003Cins>",[81,128146,128147],{},"\u003Cu>",[81,128149,126251],{}," 等，其中 ",[81,128152,126251],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128155,128156],{},[30,128157,128158],{},"特点：",[19,128160,128161],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128163,128164],{},"② 高、宽直接设置是无效的。",[19,128166,128167],{},"③ 默认宽度就是它本身内容的宽度。",[19,128169,128170],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128172,128173],{},[30,128174,244],{},[19,128176,128177],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128179,128180,128181,128183,128184,128186],{},"②特殊情况链接 ",[81,128182,126410],{}," 里面可以放块级元素，但是给 ",[81,128185,126410],{}," 转换一下块级模式最安全",[49,128188,128190],{"id":128189},"_813-行内块元素","8.1.3 行内块元素",[19,128192,128193,128194,426,128197,426,128200,128203],{},"在行内元素中有几个特殊的标签 —— ",[81,128195,128196],{},"\u003Cimg \u002F>",[81,128198,128199],{},"\u003Cinput \u002F>",[81,128201,128202],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128205,128206],{},[30,128207,128208],{},"行内块元素的特点：",[19,128210,128211],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128213,128214],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128216,128217],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[49,128219,128221],{"id":128220},"_814-总结","8.1.4 总结",[23,128223],{"style":25,"src":128224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[49,128226,128228],{"id":128227},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128230,128231],{},"①转换为块元素：display:block;",[196,128233,128235],{"className":126636,"code":128234,"language":126638,"meta":125,"style":125},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[81,128236,128237,128242,128248,128259,128271,128283],{"__ignoreMap":125},[204,128238,128239],{"class":206,"line":207},[204,128240,128241],{"class":273},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[204,128243,128244,128246],{"class":206,"line":126},[204,128245,62],{"class":51386},[204,128247,15659],{"class":214},[204,128249,128250,128253,128255,128257],{"class":206,"line":131},[204,128251,128252],{"class":263},"  display",[204,128254,51523],{"class":214},[204,128256,60955],{"class":263},[204,128258,1377],{"class":214},[204,128260,128261,128263,128265,128267,128269],{"class":206,"line":1281},[204,128262,70654],{"class":263},[204,128264,51523],{"class":214},[204,128266,524],{"class":263},[204,128268,51578],{"class":210},[204,128270,1377],{"class":214},[204,128272,128273,128275,128277,128279,128281],{"class":206,"line":1287},[204,128274,70874],{"class":263},[204,128276,51523],{"class":214},[204,128278,614],{"class":263},[204,128280,51578],{"class":210},[204,128282,1377],{"class":214},[204,128284,128285],{"class":206,"line":1301},[204,128286,1651],{"class":214},[19,128288,128289],{},"②转换为行内元素：display:inline;",[196,128291,128293],{"className":126636,"code":128292,"language":126638,"meta":125,"style":125},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[81,128294,128295,128300,128306,128317],{"__ignoreMap":125},[204,128296,128297],{"class":206,"line":207},[204,128298,128299],{"class":273},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[204,128301,128302,128304],{"class":206,"line":126},[204,128303,51697],{"class":51386},[204,128305,15659],{"class":214},[204,128307,128308,128310,128312,128315],{"class":206,"line":131},[204,128309,128252],{"class":263},[204,128311,51523],{"class":214},[204,128313,128314],{"class":263},"inline",[204,128316,1377],{"class":214},[204,128318,128319],{"class":206,"line":1281},[204,128320,1651],{"class":214},[19,128322,128323],{},"③转换为行内块：display:inline-block;",[196,128325,128327],{"className":126636,"code":128326,"language":126638,"meta":125,"style":125},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[81,128328,128329,128334,128340,128350,128362,128374],{"__ignoreMap":125},[204,128330,128331],{"class":206,"line":207},[204,128332,128333],{"class":273},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[204,128335,128336,128338],{"class":206,"line":126},[204,128337,204],{"class":51386},[204,128339,15659],{"class":214},[204,128341,128342,128344,128346,128348],{"class":206,"line":131},[204,128343,128252],{"class":263},[204,128345,51523],{"class":214},[204,128347,72469],{"class":263},[204,128349,1377],{"class":214},[204,128351,128352,128354,128356,128358,128360],{"class":206,"line":1281},[204,128353,70654],{"class":263},[204,128355,51523],{"class":214},[204,128357,825],{"class":263},[204,128359,51578],{"class":210},[204,128361,1377],{"class":214},[204,128363,128364,128366,128368,128370,128372],{"class":206,"line":1287},[204,128365,70874],{"class":263},[204,128367,51523],{"class":214},[204,128369,1164],{"class":263},[204,128371,51578],{"class":210},[204,128373,1377],{"class":214},[204,128375,128376],{"class":206,"line":1301},[204,128377,1651],{"class":214},[49,128379,128381],{"id":128380},"_816-小米侧边栏","8.1.6 小米侧边栏",[23,128383],{"style":25,"src":128384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[196,128386,128388],{"className":127383,"code":128387,"language":127385,"meta":125,"style":125},"\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",[81,128389,128390,128395,128410,128429,128448,128467,128486,128505,128524,128543],{"__ignoreMap":125},[204,128391,128392],{"class":206,"line":207},[204,128393,128394],{"class":273},"\u003C!-- 小米侧边栏案例 -->\n",[204,128396,128397,128399,128401,128403,128405,128408],{"class":206,"line":126},[204,128398,1123],{"class":214},[204,128400,51697],{"class":51386},[204,128402,53572],{"class":2049},[204,128404,260],{"class":214},[204,128406,128407],{"class":319},"\"sidebar\"",[204,128409,51393],{"class":214},[204,128411,128412,128414,128416,128418,128420,128422,128425,128427],{"class":206,"line":131},[204,128413,52230],{"class":214},[204,128415,62],{"class":51386},[204,128417,61143],{"class":2049},[204,128419,260],{"class":214},[204,128421,61148],{"class":319},[204,128423,128424],{"class":214},">手机 电话卡\u003C\u002F",[204,128426,62],{"class":51386},[204,128428,51393],{"class":214},[204,128430,128431,128433,128435,128437,128439,128441,128444,128446],{"class":206,"line":1281},[204,128432,52230],{"class":214},[204,128434,62],{"class":51386},[204,128436,61143],{"class":2049},[204,128438,260],{"class":214},[204,128440,61148],{"class":319},[204,128442,128443],{"class":214},">电视 盒子\u003C\u002F",[204,128445,62],{"class":51386},[204,128447,51393],{"class":214},[204,128449,128450,128452,128454,128456,128458,128460,128463,128465],{"class":206,"line":1287},[204,128451,52230],{"class":214},[204,128453,62],{"class":51386},[204,128455,61143],{"class":2049},[204,128457,260],{"class":214},[204,128459,61148],{"class":319},[204,128461,128462],{"class":214},">笔记本 平板\u003C\u002F",[204,128464,62],{"class":51386},[204,128466,51393],{"class":214},[204,128468,128469,128471,128473,128475,128477,128479,128482,128484],{"class":206,"line":1301},[204,128470,52230],{"class":214},[204,128472,62],{"class":51386},[204,128474,61143],{"class":2049},[204,128476,260],{"class":214},[204,128478,61148],{"class":319},[204,128480,128481],{"class":214},">出行 穿戴\u003C\u002F",[204,128483,62],{"class":51386},[204,128485,51393],{"class":214},[204,128487,128488,128490,128492,128494,128496,128498,128501,128503],{"class":206,"line":1307},[204,128489,52230],{"class":214},[204,128491,62],{"class":51386},[204,128493,61143],{"class":2049},[204,128495,260],{"class":214},[204,128497,61148],{"class":319},[204,128499,128500],{"class":214},">智能 路由器\u003C\u002F",[204,128502,62],{"class":51386},[204,128504,51393],{"class":214},[204,128506,128507,128509,128511,128513,128515,128517,128520,128522],{"class":206,"line":1398},[204,128508,52230],{"class":214},[204,128510,62],{"class":51386},[204,128512,61143],{"class":2049},[204,128514,260],{"class":214},[204,128516,61148],{"class":319},[204,128518,128519],{"class":214},">健康 儿童\u003C\u002F",[204,128521,62],{"class":51386},[204,128523,51393],{"class":214},[204,128525,128526,128528,128530,128532,128534,128536,128539,128541],{"class":206,"line":1404},[204,128527,52230],{"class":214},[204,128529,62],{"class":51386},[204,128531,61143],{"class":2049},[204,128533,260],{"class":214},[204,128535,61148],{"class":319},[204,128537,128538],{"class":214},">耳机 音响\u003C\u002F",[204,128540,62],{"class":51386},[204,128542,51393],{"class":214},[204,128544,128545,128547,128549],{"class":206,"line":1416},[204,128546,51871],{"class":214},[204,128548,51697],{"class":51386},[204,128550,51393],{"class":214},[196,128552,128554],{"className":126636,"code":128553,"language":126638,"meta":125,"style":125},".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",[81,128555,128556,128565,128575,128588,128600,128612,128624,128634,128645,128649,128659,128670],{"__ignoreMap":125},[204,128557,128558,128561,128563],{"class":206,"line":207},[204,128559,128560],{"class":2049},".sidebar",[204,128562,1485],{"class":51386},[204,128564,15659],{"class":214},[204,128566,128567,128569,128571,128573],{"class":206,"line":126},[204,128568,128252],{"class":263},[204,128570,51523],{"class":214},[204,128572,60955],{"class":263},[204,128574,1377],{"class":214},[204,128576,128577,128579,128581,128584,128586],{"class":206,"line":131},[204,128578,70654],{"class":263},[204,128580,51523],{"class":214},[204,128582,128583],{"class":263},"234",[204,128585,51578],{"class":210},[204,128587,1377],{"class":214},[204,128589,128590,128592,128594,128596,128598],{"class":206,"line":1281},[204,128591,70874],{"class":263},[204,128593,51523],{"class":214},[204,128595,665],{"class":263},[204,128597,51578],{"class":210},[204,128599,1377],{"class":214},[204,128601,128602,128604,128606,128608,128610],{"class":206,"line":1287},[204,128603,127320],{"class":263},[204,128605,51523],{"class":214},[204,128607,665],{"class":263},[204,128609,51578],{"class":210},[204,128611,1377],{"class":214},[204,128613,128614,128616,128618,128620,128622],{"class":206,"line":1301},[204,128615,70909],{"class":263},[204,128617,51523],{"class":214},[204,128619,1164],{"class":263},[204,128621,51578],{"class":210},[204,128623,1377],{"class":214},[204,128625,128626,128628,128630,128632],{"class":206,"line":1307},[204,128627,70991],{"class":263},[204,128629,51523],{"class":214},[204,128631,60928],{"class":263},[204,128633,1377],{"class":214},[204,128635,128636,128638,128640,128643],{"class":206,"line":1398},[204,128637,70964],{"class":263},[204,128639,51523],{"class":214},[204,128641,128642],{"class":263},"#55585a",[204,128644,1377],{"class":214},[204,128646,128647],{"class":206,"line":1404},[204,128648,1651],{"class":214},[204,128650,128651,128653,128655,128657],{"class":206,"line":1416},[204,128652,128560],{"class":2049},[204,128654,1485],{"class":51386},[204,128656,61026],{"class":2049},[204,128658,15659],{"class":214},[204,128660,128661,128663,128665,128668],{"class":206,"line":1698},[204,128662,70964],{"class":263},[204,128664,51523],{"class":214},[204,128666,128667],{"class":263},"#ff6700",[204,128669,1377],{"class":214},[204,128671,128672],{"class":206,"line":1703},[204,128673,1651],{"class":214},[23,128675],{"style":25,"src":128676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128678,128679],{},"行高=盒子高度：实现文字的垂直居中",[19,128681,128682],{},"原理讲解：",[23,128684],{"style":25,"src":128685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128687,128689],{"id":128688},"_82-css背景","8.2 css背景",[19,128691,128692],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[49,128694,128696],{"id":128695},"_821-背景颜色","8.2.1 背景颜色",[19,128698,128699],{},"background-color:颜色值;",[19,128701,128702],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[49,128704,128706],{"id":128705},"_822-背景图片","8.2.2 背景图片",[19,128708,128709],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[196,128711,128713],{"className":126636,"code":128712,"language":126638,"meta":125,"style":125},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[81,128714,128715,128721,128737],{"__ignoreMap":125},[204,128716,128717,128719],{"class":206,"line":207},[204,128718,51697],{"class":51386},[204,128720,15659],{"class":214},[204,128722,128723,128726,128728,128730,128732,128735],{"class":206,"line":126},[204,128724,128725],{"class":263},"  background-image",[204,128727,51523],{"class":214},[204,128729,61812],{"class":263},[204,128731,215],{"class":214},[204,128733,128734],{"class":5303},"images\u002Fbg.png",[204,128736,2805],{"class":214},[204,128738,128739],{"class":206,"line":131},[204,128740,1651],{"class":214},[352,128742,128743,128752],{},[355,128744,128745],{},[358,128746,128747,128750],{},[361,128748,128749],{"align":23823},"参数值",[361,128751,102781],{"align":23823},[398,128753,128754,128761],{},[358,128755,128756,128758],{},[403,128757,54823],{"align":23823},[403,128759,128760],{"align":23823},"无背景图（默认的）",[358,128762,128763,128765],{},[403,128764,61812],{"align":23823},[403,128766,128767],{"align":23823},"使用绝对或相对地址指定背景图像",[196,128769,128770],{"className":126636,"code":128712,"language":126638,"meta":125,"style":125},[81,128771,128772,128778,128792],{"__ignoreMap":125},[204,128773,128774,128776],{"class":206,"line":207},[204,128775,51697],{"class":51386},[204,128777,15659],{"class":214},[204,128779,128780,128782,128784,128786,128788,128790],{"class":206,"line":126},[204,128781,128725],{"class":263},[204,128783,51523],{"class":214},[204,128785,61812],{"class":263},[204,128787,215],{"class":214},[204,128789,128734],{"class":5303},[204,128791,2805],{"class":214},[204,128793,128794],{"class":206,"line":131},[204,128795,1651],{"class":214},[19,128797,128798],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[49,128800,128802],{"id":128801},"_823-背景平铺","8.2.3 背景平铺",[196,128804,128806],{"className":126636,"code":128805,"language":126638,"meta":125,"style":125},"div {\n  background-repeat: no-repeat;\n}\n",[81,128807,128808,128814,128825],{"__ignoreMap":125},[204,128809,128810,128812],{"class":206,"line":207},[204,128811,51697],{"class":51386},[204,128813,15659],{"class":214},[204,128815,128816,128819,128821,128823],{"class":206,"line":126},[204,128817,128818],{"class":263},"  background-repeat",[204,128820,51523],{"class":214},[204,128822,61822],{"class":263},[204,128824,1377],{"class":214},[204,128826,128827],{"class":206,"line":131},[204,128828,1651],{"class":214},[352,128830,128831,128839],{},[355,128832,128833],{},[358,128834,128835,128837],{},[361,128836,128749],{"align":23823},[361,128838,102781],{"align":23823},[398,128840,128841,128849,128856,128864],{},[358,128842,128843,128846],{},[403,128844,128845],{"align":23823},"repeat",[403,128847,128848],{"align":23823},"背景图像在纵向和横向上平铺（默认的）",[358,128850,128851,128853],{},[403,128852,61822],{"align":23823},[403,128854,128855],{"align":23823},"背景图像不平铺",[358,128857,128858,128861],{},[403,128859,128860],{"align":23823},"repeat-x",[403,128862,128863],{"align":23823},"背景图像在横向上平铺",[358,128865,128866,128869],{},[403,128867,128868],{"align":23823},"repeat-y",[403,128870,128871],{"align":23823},"背景图像在纵向平铺",[49,128873,128875],{"id":128874},"_824-背景图片位置","8.2.4 背景图片位置",[196,128877,128879],{"className":126636,"code":128878,"language":126638,"meta":125,"style":125},"\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",[81,128880,128881,128886,128892,128906,128910,128915,128921,128937,128941,128946,128952,128966],{"__ignoreMap":125},[204,128882,128883],{"class":206,"line":207},[204,128884,128885],{"class":273},"\u002F* 方位名词 *\u002F\n",[204,128887,128888,128890],{"class":206,"line":126},[204,128889,51697],{"class":51386},[204,128891,15659],{"class":214},[204,128893,128894,128897,128899,128901,128904],{"class":206,"line":131},[204,128895,128896],{"class":263},"  background-position",[204,128898,51523],{"class":214},[204,128900,51678],{"class":263},[204,128902,128903],{"class":263}," top",[204,128905,1377],{"class":214},[204,128907,128908],{"class":206,"line":1281},[204,128909,1651],{"class":214},[204,128911,128912],{"class":206,"line":1287},[204,128913,128914],{"class":273},"\u002F* 精确单位 *\u002F\n",[204,128916,128917,128919],{"class":206,"line":1301},[204,128918,51697],{"class":51386},[204,128920,15659],{"class":214},[204,128922,128923,128925,128927,128929,128931,128933,128935],{"class":206,"line":1307},[204,128924,128896],{"class":263},[204,128926,51523],{"class":214},[204,128928,913],{"class":263},[204,128930,51578],{"class":210},[204,128932,57590],{"class":263},[204,128934,51578],{"class":210},[204,128936,1377],{"class":214},[204,128938,128939],{"class":206,"line":1398},[204,128940,1651],{"class":214},[204,128942,128943],{"class":206,"line":1404},[204,128944,128945],{"class":273},"\u002F* 混合单位 *\u002F\n",[204,128947,128948,128950],{"class":206,"line":1416},[204,128949,51697],{"class":51386},[204,128951,15659],{"class":214},[204,128953,128954,128956,128958,128960,128962,128964],{"class":206,"line":1698},[204,128955,128896],{"class":263},[204,128957,51523],{"class":214},[204,128959,913],{"class":263},[204,128961,51578],{"class":210},[204,128963,17231],{"class":263},[204,128965,1377],{"class":214},[204,128967,128968],{"class":206,"line":1703},[204,128969,1651],{"class":214},[19,128971,128972],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[352,128974,128975,128983],{},[355,128976,128977],{},[358,128978,128979,128981],{},[361,128980,128749],{"align":23823},[361,128982,25955],{"align":23823},[398,128984,128985,128992],{},[358,128986,128987,128989],{},[403,128988,52054],{"align":23823},[403,128990,128991],{"align":23823},"百分数|由浮点数和单位标识符组成的长度值",[358,128993,128994,128997],{},[403,128995,128996],{"align":23823},"position",[403,128998,128999],{"align":23823},"top|center|bottom|left|center|right 方位名词",[19,129001,129002],{},"其他说明：",[19,129004,129005],{},"①参数是方位名词",[19,129007,129008],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129010,129011],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129013,129014],{},"②参数是精确单位",[19,129016,129017],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129019,129020],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129022,129023],{},"③参数是混合单位",[19,129025,129026],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[49,129028,129030],{"id":129029},"_825-背景图片固定","8.2.5 背景图片固定",[196,129032,129034],{"className":126636,"code":129033,"language":126638,"meta":125,"style":125},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[81,129035,129036,129041,129047,129059,129063,129068,129074,129084],{"__ignoreMap":125},[204,129037,129038],{"class":206,"line":207},[204,129039,129040],{"class":273},"\u002F* 背景滚动（默认） *\u002F\n",[204,129042,129043,129045],{"class":206,"line":126},[204,129044,51697],{"class":51386},[204,129046,15659],{"class":214},[204,129048,129049,129052,129054,129057],{"class":206,"line":131},[204,129050,129051],{"class":263},"  background-attachment",[204,129053,51523],{"class":214},[204,129055,129056],{"class":263},"scroll",[204,129058,1377],{"class":214},[204,129060,129061],{"class":206,"line":1281},[204,129062,1651],{"class":214},[204,129064,129065],{"class":206,"line":1287},[204,129066,129067],{"class":273},"\u002F* 背景固定 *\u002F\n",[204,129069,129070,129072],{"class":206,"line":1301},[204,129071,51697],{"class":51386},[204,129073,15659],{"class":214},[204,129075,129076,129078,129080,129082],{"class":206,"line":1307},[204,129077,129051],{"class":263},[204,129079,51523],{"class":214},[204,129081,86319],{"class":263},[204,129083,1377],{"class":214},[204,129085,129086],{"class":206,"line":1398},[204,129087,1651],{"class":214},[352,129089,129090,129099],{},[355,129091,129092],{},[358,129093,129094,129097],{},[361,129095,129096],{"align":23823},"参数",[361,129098,102781],{"align":23823},[398,129100,129101,129108],{},[358,129102,129103,129105],{},[403,129104,129056],{"align":23823},[403,129106,129107],{"align":23823},"背景图像是随对象内容滚动",[358,129109,129110,129112],{},[403,129111,86319],{"align":23823},[403,129113,129114],{"align":23823},"背景图像固定",[49,129116,129118],{"id":129117},"_826-背景样式合写","8.2.6 背景样式合写",[196,129120,129122],{"className":126636,"code":129121,"language":126638,"meta":125,"style":125},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[81,129123,129124,129129,129135,129163],{"__ignoreMap":125},[204,129125,129126],{"class":206,"line":207},[204,129127,129128],{"class":273},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[204,129130,129131,129133],{"class":206,"line":126},[204,129132,51697],{"class":51386},[204,129134,15659],{"class":214},[204,129136,129137,129139,129141,129143,129146,129148,129150,129152,129154,129157,129159,129161],{"class":206,"line":131},[204,129138,70697],{"class":263},[204,129140,51523],{"class":214},[204,129142,60928],{"class":263},[204,129144,129145],{"class":263}," url",[204,129147,215],{"class":214},[204,129149,128734],{"class":5303},[204,129151,13801],{"class":214},[204,129153,61822],{"class":263},[204,129155,129156],{"class":263}," fixed",[204,129158,17231],{"class":263},[204,129160,128903],{"class":263},[204,129162,1377],{"class":214},[204,129164,129165],{"class":206,"line":1281},[204,129166,1651],{"class":214},[49,129168,129170],{"id":129169},"_827-背景色半透明","8.2.7 背景色半透明",[196,129172,129174],{"className":126636,"code":129173,"language":126638,"meta":125,"style":125},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[81,129175,129176,129182,129208],{"__ignoreMap":125},[204,129177,129178,129180],{"class":206,"line":207},[204,129179,51697],{"class":51386},[204,129181,15659],{"class":214},[204,129183,129184,129186,129188,129190,129192,129194,129196,129198,129200,129202,129204,129206],{"class":206,"line":126},[204,129185,70697],{"class":263},[204,129187,51523],{"class":214},[204,129189,55196],{"class":263},[204,129191,215],{"class":214},[204,129193,405],{"class":263},[204,129195,12522],{"class":214},[204,129197,405],{"class":263},[204,129199,12522],{"class":214},[204,129201,405],{"class":263},[204,129203,12522],{"class":214},[204,129205,100607],{"class":263},[204,129207,2805],{"class":214},[204,129209,129210],{"class":206,"line":131},[204,129211,1651],{"class":214},[19,129213,99482],{},[19,129215,129216],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129218,129219],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129221,129222],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129224,129225],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[49,129227,129229],{"id":129228},"_828-总结","8.2.8 总结",[352,129231,129232,129243],{},[355,129233,129234],{},[358,129235,129236,129239,129241],{},[361,129237,129238],{"align":23823},"属性",[361,129240,102781],{"align":23823},[361,129242,366],{"align":23823},[398,129244,129245,129256,129267,129278,129289,129300,129311],{},[358,129246,129247,129250,129253],{},[403,129248,129249],{"align":23823},"background-color",[403,129251,129252],{"align":23823},"背景颜色",[403,129254,129255],{"align":23823},"预定义的颜色值\u002F十六进制\u002FRGB代码",[358,129257,129258,129261,129264],{},[403,129259,129260],{"align":23823},"background-image",[403,129262,129263],{"align":23823},"背景图片",[403,129265,129266],{"align":23823},"url(图片路径)",[358,129268,129269,129272,129275],{},[403,129270,129271],{"align":23823},"background-repeat",[403,129273,129274],{"align":23823},"是否平铺",[403,129276,129277],{"align":23823},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[358,129279,129280,129283,129286],{},[403,129281,129282],{"align":23823},"background-position",[403,129284,129285],{"align":23823},"背景位置",[403,129287,129288],{"align":23823},"length\u002Fposition 分别是x和y坐标",[358,129290,129291,129294,129297],{},[403,129292,129293],{"align":23823},"background-attachment",[403,129295,129296],{"align":23823},"背景附着",[403,129298,129299],{"align":23823},"scroll(背景滚动) \u002Ffixed (背景固定)",[358,129301,129302,129305,129308],{},[403,129303,129304],{"align":23823},"背景简写",[403,129306,129307],{"align":23823},"书写更简单",[403,129309,129310],{"align":23823},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[358,129312,129313,129316,129319],{},[403,129314,129315],{"align":23823},"背景半透明",[403,129317,129318],{"align":23823},"背景颜色半透明",[403,129320,129321],{"align":23823},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129323,129324],{},"颜色渐变：",[23,129326],{"style":25,"src":129327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[23,129329],{"style":25,"src":129330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[49,129332,129334],{"id":129333},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[196,129336,129338],{"className":127383,"code":129337,"language":127385,"meta":125,"style":125},"\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",[81,129339,129340,129355,129374,129393,129412,129431,129450],{"__ignoreMap":125},[204,129341,129342,129344,129346,129348,129350,129353],{"class":206,"line":207},[204,129343,1123],{"class":214},[204,129345,51697],{"class":51386},[204,129347,53572],{"class":2049},[204,129349,260],{"class":214},[204,129351,129352],{"class":319},"\"nav\"",[204,129354,51393],{"class":214},[204,129356,129357,129359,129361,129363,129365,129367,129370,129372],{"class":206,"line":126},[204,129358,52230],{"class":214},[204,129360,62],{"class":51386},[204,129362,61143],{"class":2049},[204,129364,260],{"class":214},[204,129366,61148],{"class":319},[204,129368,129369],{"class":214},">五彩导航1\u003C\u002F",[204,129371,62],{"class":51386},[204,129373,51393],{"class":214},[204,129375,129376,129378,129380,129382,129384,129386,129389,129391],{"class":206,"line":131},[204,129377,52230],{"class":214},[204,129379,62],{"class":51386},[204,129381,61143],{"class":2049},[204,129383,260],{"class":214},[204,129385,61148],{"class":319},[204,129387,129388],{"class":214},">五彩导航2\u003C\u002F",[204,129390,62],{"class":51386},[204,129392,51393],{"class":214},[204,129394,129395,129397,129399,129401,129403,129405,129408,129410],{"class":206,"line":1281},[204,129396,52230],{"class":214},[204,129398,62],{"class":51386},[204,129400,61143],{"class":2049},[204,129402,260],{"class":214},[204,129404,61148],{"class":319},[204,129406,129407],{"class":214},">五彩导航3\u003C\u002F",[204,129409,62],{"class":51386},[204,129411,51393],{"class":214},[204,129413,129414,129416,129418,129420,129422,129424,129427,129429],{"class":206,"line":1287},[204,129415,52230],{"class":214},[204,129417,62],{"class":51386},[204,129419,61143],{"class":2049},[204,129421,260],{"class":214},[204,129423,61148],{"class":319},[204,129425,129426],{"class":214},">五彩导航4\u003C\u002F",[204,129428,62],{"class":51386},[204,129430,51393],{"class":214},[204,129432,129433,129435,129437,129439,129441,129443,129446,129448],{"class":206,"line":1301},[204,129434,52230],{"class":214},[204,129436,62],{"class":51386},[204,129438,61143],{"class":2049},[204,129440,260],{"class":214},[204,129442,61148],{"class":319},[204,129444,129445],{"class":214},">五彩导航5\u003C\u002F",[204,129447,62],{"class":51386},[204,129449,51393],{"class":214},[204,129451,129452,129454,129456],{"class":206,"line":1307},[204,129453,51871],{"class":214},[204,129455,51697],{"class":51386},[204,129457,51393],{"class":214},[196,129459,129461],{"className":126636,"code":129460,"language":126638,"meta":125,"style":125},".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",[81,129462,129463,129472,129482,129494,129506,129516,129528,129538,129542,129567,129590,129613,129636],{"__ignoreMap":125},[204,129464,129465,129468,129470],{"class":206,"line":207},[204,129466,129467],{"class":2049},".nav",[204,129469,1485],{"class":51386},[204,129471,15659],{"class":214},[204,129473,129474,129476,129478,129480],{"class":206,"line":126},[204,129475,128252],{"class":263},[204,129477,51523],{"class":214},[204,129479,72469],{"class":263},[204,129481,1377],{"class":214},[204,129483,129484,129486,129488,129490,129492],{"class":206,"line":131},[204,129485,70654],{"class":263},[204,129487,51523],{"class":214},[204,129489,1030],{"class":263},[204,129491,51578],{"class":210},[204,129493,1377],{"class":214},[204,129495,129496,129498,129500,129502,129504],{"class":206,"line":1281},[204,129497,70874],{"class":263},[204,129499,51523],{"class":214},[204,129501,1069],{"class":263},[204,129503,51578],{"class":210},[204,129505,1377],{"class":214},[204,129507,129508,129510,129512,129514],{"class":206,"line":1287},[204,129509,70612],{"class":263},[204,129511,51523],{"class":214},[204,129513,51678],{"class":263},[204,129515,1377],{"class":214},[204,129517,129518,129520,129522,129524,129526],{"class":206,"line":1301},[204,129519,127320],{"class":263},[204,129521,51523],{"class":214},[204,129523,1069],{"class":263},[204,129525,51578],{"class":210},[204,129527,1377],{"class":214},[204,129529,129530,129532,129534,129536],{"class":206,"line":1307},[204,129531,70991],{"class":263},[204,129533,51523],{"class":214},[204,129535,60928],{"class":263},[204,129537,1377],{"class":214},[204,129539,129540],{"class":206,"line":1398},[204,129541,1651],{"class":214},[204,129543,129544,129546,129548,129551,129553,129555,129558,129560,129562,129564],{"class":206,"line":1404},[204,129545,129467],{"class":2049},[204,129547,1485],{"class":51386},[204,129549,129550],{"class":2049},":nth-child",[204,129552,215],{"class":214},[204,129554,431],{"class":263},[204,129556,129557],{"class":214},") { ",[204,129559,129249],{"class":263},[204,129561,51523],{"class":214},[204,129563,128667],{"class":263},[204,129565,129566],{"class":214},"; }\n",[204,129568,129569,129571,129573,129575,129577,129579,129581,129583,129585,129588],{"class":206,"line":1416},[204,129570,129467],{"class":2049},[204,129572,1485],{"class":51386},[204,129574,129550],{"class":2049},[204,129576,215],{"class":214},[204,129578,292],{"class":263},[204,129580,129557],{"class":214},[204,129582,129249],{"class":263},[204,129584,51523],{"class":214},[204,129586,129587],{"class":263},"#ff0000",[204,129589,129566],{"class":214},[204,129591,129592,129594,129596,129598,129600,129602,129604,129606,129608,129611],{"class":206,"line":1698},[204,129593,129467],{"class":2049},[204,129595,1485],{"class":51386},[204,129597,129550],{"class":2049},[204,129599,215],{"class":214},[204,129601,286],{"class":263},[204,129603,129557],{"class":214},[204,129605,129249],{"class":263},[204,129607,51523],{"class":214},[204,129609,129610],{"class":263},"#00a4ff",[204,129612,129566],{"class":214},[204,129614,129615,129617,129619,129621,129623,129625,129627,129629,129631,129634],{"class":206,"line":1703},[204,129616,129467],{"class":2049},[204,129618,1485],{"class":51386},[204,129620,129550],{"class":2049},[204,129622,215],{"class":214},[204,129624,506],{"class":263},[204,129626,129557],{"class":214},[204,129628,129249],{"class":263},[204,129630,51523],{"class":214},[204,129632,129633],{"class":263},"#ff00ff",[204,129635,129566],{"class":214},[204,129637,129638,129640,129642,129644,129646,129648,129650,129652,129654,129657],{"class":206,"line":1709},[204,129639,129467],{"class":2049},[204,129641,1485],{"class":51386},[204,129643,129550],{"class":2049},[204,129645,215],{"class":214},[204,129647,532],{"class":263},[204,129649,129557],{"class":214},[204,129651,129249],{"class":263},[204,129653,51523],{"class":214},[204,129655,129656],{"class":263},"#00ff00",[204,129658,129566],{"class":214},[14,129660,129662],{"id":129661},"_83-css三大特性","8.3 css三大特性",[49,129664,129666],{"id":129665},"_831-层叠性","8.3.1 层叠性",[19,129668,129669],{},"为了解决样式冲突问题",[19,129671,129672],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129674,129675],{},"   ②样式不冲突，不会层叠",[49,129677,129679],{"id":129678},"_832-继承性","8.3.2 继承性",[19,129681,129682],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129684,129685],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[196,129687,129689],{"className":126636,"code":129688,"language":126638,"meta":125,"style":125},"p {\n  color: #333;\n}\n",[81,129690,129691,129697,129707],{"__ignoreMap":125},[204,129692,129693,129695],{"class":206,"line":207},[204,129694,19],{"class":51386},[204,129696,15659],{"class":214},[204,129698,129699,129701,129703,129705],{"class":206,"line":126},[204,129700,70991],{"class":263},[204,129702,51523],{"class":214},[204,129704,62455],{"class":263},[204,129706,1377],{"class":214},[204,129708,129709],{"class":206,"line":131},[204,129710,1651],{"class":214},[23,129712],{"style":25,"src":129713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129715,129716],{},"解释：①行高可以跟单位也可以不跟单位",[19,129718,129719],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129721,129722],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129724,129725],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[49,129727,129729],{"id":129728},"_833-优先级","8.3.3 优先级",[161,129731,129732,129735],{},[71,129733,129734],{},"选择器相同，则执行层叠性",[71,129736,129737],{},"选择器不同，则根据选择器权重执行",[352,129739,129740,129750],{},[355,129741,129742],{},[358,129743,129744,129747],{},[361,129745,129746],{"align":23823},"选择器",[361,129748,129749],{"align":23823},"选择器权重",[398,129751,129752,129760,129768,129776,129784,129792],{},[358,129753,129754,129757],{},[403,129755,129756],{"align":23823},"继承 或者*",[403,129758,129759],{"align":23823},"0，0，0，0",[358,129761,129762,129765],{},[403,129763,129764],{"align":23823},"标签选择器",[403,129766,129767],{"align":23823},"0，0，0，1",[358,129769,129770,129773],{},[403,129771,129772],{"align":23823},"类选择器，伪类选择器",[403,129774,129775],{"align":23823},"0，0，1，0",[358,129777,129778,129781],{},[403,129779,129780],{"align":23823},"ID选择器",[403,129782,129783],{"align":23823},"0，1，0，0",[358,129785,129786,129789],{},[403,129787,129788],{"align":23823},"行内样式",[403,129790,129791],{"align":23823},"1，0，0，0",[358,129793,129794,129797],{},[403,129795,129796],{"align":23823},"！important",[403,129798,129799],{"align":23823},"无穷大",[19,129801,129802],{},"! important用法：",[196,129804,129806],{"className":126636,"code":129805,"language":126638,"meta":125,"style":125},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[81,129807,129808,129813,129819,129832,129836,129841,129847,129857],{"__ignoreMap":125},[204,129809,129810],{"class":206,"line":207},[204,129811,129812],{"class":273},"\u002F* !important 拥有最高优先级 *\u002F\n",[204,129814,129815,129817],{"class":206,"line":126},[204,129816,51697],{"class":51386},[204,129818,15659],{"class":214},[204,129820,129821,129823,129825,129827,129830],{"class":206,"line":131},[204,129822,70991],{"class":263},[204,129824,51523],{"class":214},[204,129826,51731],{"class":263},[204,129828,129829],{"class":210}," !important",[204,129831,1377],{"class":214},[204,129833,129834],{"class":206,"line":1281},[204,129835,1651],{"class":214},[204,129837,129838],{"class":206,"line":1287},[204,129839,129840],{"class":273},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[204,129842,129843,129845],{"class":206,"line":1301},[204,129844,51697],{"class":51386},[204,129846,15659],{"class":214},[204,129848,129849,129851,129853,129855],{"class":206,"line":1307},[204,129850,70991],{"class":263},[204,129852,51523],{"class":214},[204,129854,57507],{"class":263},[204,129856,1377],{"class":214},[204,129858,129859],{"class":206,"line":1398},[204,129860,1651],{"class":214},[19,129862,129863],{},"优先级注意点：",[19,129865,129866],{},"①权重是有4组数字组成,但是不会有进位",[19,129868,129869],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129871,129872],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129874,129875],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129877,129878],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129880,129881],{},"⑥复合选择器",[352,129883,129884,129894],{},[355,129885,129886],{},[358,129887,129888,129891],{},[361,129889,129890],{"align":23823},"div ul li",[361,129892,129893],{"align":23823},"0,0,0,3",[398,129895,129896,129904,129912],{},[358,129897,129898,129901],{},[403,129899,129900],{"align":23823},".nav ul li",[403,129902,129903],{"align":23823},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[358,129905,129906,129909],{},[403,129907,129908],{"align":23823},"a:hover",[403,129910,129911],{"align":23823},"0,0,1,1",[358,129913,129914,129917],{},[403,129915,129916],{"align":23823},".nav a",[403,129918,129911],{"align":23823},[5213,129920,129921],{},"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":125,"searchDepth":126,"depth":126,"links":129923},[129924,129932,129943],{"id":128032,"depth":126,"text":128033,"children":129925},[129926,129927,129928,129929,129930,129931],{"id":128045,"depth":131,"text":128046},{"id":128117,"depth":131,"text":128118},{"id":128189,"depth":131,"text":128190},{"id":128220,"depth":131,"text":128221},{"id":128227,"depth":131,"text":128228},{"id":128380,"depth":131,"text":128381},{"id":128688,"depth":126,"text":128689,"children":129933},[129934,129935,129936,129937,129938,129939,129940,129941,129942],{"id":128695,"depth":131,"text":128696},{"id":128705,"depth":131,"text":128706},{"id":128801,"depth":131,"text":128802},{"id":128874,"depth":131,"text":128875},{"id":129029,"depth":131,"text":129030},{"id":129117,"depth":131,"text":129118},{"id":129169,"depth":131,"text":129170},{"id":129228,"depth":131,"text":129229},{"id":129333,"depth":131,"text":129334},{"id":129661,"depth":126,"text":129662,"children":129944},[129945,129946,129947],{"id":129665,"depth":131,"text":129666},{"id":129678,"depth":131,"text":129679},{"id":129728,"depth":131,"text":129729},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128024,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129954,"title":129955,"body":129956,"description":132,"extension":133,"meta":131546,"navigation":135,"path":131547,"seo":131548,"stem":131549,"__hash__":131550},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129957,"toc":131525},[129958,129961,129965,129968,129971,129974,129977,129980,129983,129986,129990,129998,130035,130071,130074,130088,130093,130127,130130,130223,130228,130231,130261,130264,130269,130277,130281,130288,130334,130378,130383,130386,130389,130392,130395,130398,130401,130403,130406,130410,130415,130459,130464,130467,130470,130507,130512,130515,130518,130521,130524,130556,130559,130562,130565,130597,130600,130603,130606,130610,130613,130645,130648,130652,130672,130675,130683,130686,130690,130695,130698,130730,130735,130738,130776,130780,130785,130788,130791,130822,130825,130842,130847,130899,130959,130964,131018,131056,131060,131064,131067,131071,131079,131082,131084,131095,131100,131148,131182,131185,131188,131191,131194,131238,131241,131244,131247,131250,131253,131256,131300,131303,131306,131309,131312,131315,131318,131324,131327,131371,131374,131377,131380,131383,131386,131430,131433,131435,131438,131442,131446,131484,131488,131491,131494,131498,131506,131510,131513,131516,131519,131522],[10,129959,129955],{"id":129960},"_9-css盒模型浮动与切图",[14,129962,129964],{"id":129963},"_91-盒子模型","9.1 盒子模型",[19,129966,129967],{},"利用盒子来设计网页",[19,129969,129970],{},"盒子包含：边框、外边距、内边距、实际内容",[19,129972,129973],{},"网页布局设置：",[19,129975,129976],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,129978,129979],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,129981,129982],{},"③往盒子里装内容",[23,129984],{"style":25,"src":129985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[49,129987,129989],{"id":129988},"_911-边框border","9.1.1 边框（border）",[161,129991,129992,129995],{},[71,129993,129994],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[71,129996,129997],{},"语法",[196,129999,130001],{"className":126636,"code":130000,"language":126638,"meta":125,"style":125},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[81,130002,130003,130008,130014,130031],{"__ignoreMap":125},[204,130004,130005],{"class":206,"line":207},[204,130006,130007],{"class":273},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[204,130009,130010,130012],{"class":206,"line":126},[204,130011,51697],{"class":51386},[204,130013,15659],{"class":214},[204,130015,130016,130018,130020,130022,130024,130026,130029],{"class":206,"line":131},[204,130017,70982],{"class":263},[204,130019,51523],{"class":214},[204,130021,431],{"class":263},[204,130023,51578],{"class":210},[204,130025,51607],{"class":263},[204,130027,130028],{"class":263}," #ccc",[204,130030,1377],{"class":214},[204,130032,130033],{"class":206,"line":1281},[204,130034,1651],{"class":214},[352,130036,130037,130045],{},[355,130038,130039],{},[358,130040,130041,130043],{},[361,130042,129238],{"align":23823},[361,130044,102781],{"align":23823},[398,130046,130047,130055,130063],{},[358,130048,130049,130052],{},[403,130050,130051],{"align":23823},"border-width",[403,130053,130054],{"align":23823},"定义边框粗细，单位是px",[358,130056,130057,130060],{},[403,130058,130059],{"align":23823},"border-style",[403,130061,130062],{"align":23823},"边框的样式",[358,130064,130065,130068],{},[403,130066,130067],{"align":23823},"border-color",[403,130069,130070],{"align":23823},"边框的颜色",[19,130072,130073],{},"边框样式 border-style 可以设置如下值：",[68,130075,130076,130079,130082,130085],{},[71,130077,130078],{},"none：没有边框即忽略所有边框的宽度（默认值）",[71,130080,130081],{},"solid：边框为单实线(最为常用的)",[71,130083,130084],{},"dashed：边框为虚线",[71,130086,130087],{},"dotted：边框为点线",[161,130089,130090],{"start":131},[71,130091,130092],{},"边框的合写分写",[196,130094,130095],{"className":126636,"code":130000,"language":126638,"meta":125,"style":125},[81,130096,130097,130101,130107,130123],{"__ignoreMap":125},[204,130098,130099],{"class":206,"line":207},[204,130100,130007],{"class":273},[204,130102,130103,130105],{"class":206,"line":126},[204,130104,51697],{"class":51386},[204,130106,15659],{"class":214},[204,130108,130109,130111,130113,130115,130117,130119,130121],{"class":206,"line":131},[204,130110,70982],{"class":263},[204,130112,51523],{"class":214},[204,130114,431],{"class":263},[204,130116,51578],{"class":210},[204,130118,51607],{"class":263},[204,130120,130028],{"class":263},[204,130122,1377],{"class":214},[204,130124,130125],{"class":206,"line":1281},[204,130126,1651],{"class":214},[19,130128,130129],{},"边框分开写法：",[196,130131,130133],{"className":126636,"code":130132,"language":126638,"meta":125,"style":125},"\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",[81,130134,130135,130140,130146,130164,130182,130201,130219],{"__ignoreMap":125},[204,130136,130137],{"class":206,"line":207},[204,130138,130139],{"class":273},"\u002F* 边框分开写法 *\u002F\n",[204,130141,130142,130144],{"class":206,"line":126},[204,130143,51697],{"class":51386},[204,130145,15659],{"class":214},[204,130147,130148,130151,130153,130155,130157,130159,130162],{"class":206,"line":131},[204,130149,130150],{"class":263},"  border-top",[204,130152,51523],{"class":214},[204,130154,431],{"class":263},[204,130156,51578],{"class":210},[204,130158,51607],{"class":263},[204,130160,130161],{"class":263}," #000",[204,130163,1377],{"class":214},[204,130165,130166,130169,130171,130173,130175,130177,130180],{"class":206,"line":1281},[204,130167,130168],{"class":263},"  border-right",[204,130170,51523],{"class":214},[204,130172,292],{"class":263},[204,130174,51578],{"class":210},[204,130176,62327],{"class":263},[204,130178,130179],{"class":263}," #333",[204,130181,1377],{"class":214},[204,130183,130184,130187,130189,130191,130193,130196,130199],{"class":206,"line":1287},[204,130185,130186],{"class":263},"  border-bottom",[204,130188,51523],{"class":214},[204,130190,286],{"class":263},[204,130192,51578],{"class":210},[204,130194,130195],{"class":263}," dotted",[204,130197,130198],{"class":263}," #666",[204,130200,1377],{"class":214},[204,130202,130203,130206,130208,130210,130212,130214,130217],{"class":206,"line":1301},[204,130204,130205],{"class":263},"  border-left",[204,130207,51523],{"class":214},[204,130209,431],{"class":263},[204,130211,51578],{"class":210},[204,130213,51607],{"class":263},[204,130215,130216],{"class":263}," #999",[204,130218,1377],{"class":214},[204,130220,130221],{"class":206,"line":1307},[204,130222,1651],{"class":214},[161,130224,130225],{"start":1281},[71,130226,130227],{},"表格的细线边框",[19,130229,130230],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[196,130232,130234],{"className":126636,"code":130233,"language":126638,"meta":125,"style":125},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[81,130235,130236,130241,130247,130257],{"__ignoreMap":125},[204,130237,130238],{"class":206,"line":207},[204,130239,130240],{"class":273},"\u002F* 表格细线边框合并 *\u002F\n",[204,130242,130243,130245],{"class":206,"line":126},[204,130244,352],{"class":51386},[204,130246,15659],{"class":214},[204,130248,130249,130251,130253,130255],{"class":206,"line":131},[204,130250,70664],{"class":263},[204,130252,51523],{"class":214},[204,130254,65121],{"class":263},[204,130256,1377],{"class":214},[204,130258,130259],{"class":206,"line":1281},[204,130260,1651],{"class":214},[19,130262,130263],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[161,130265,130266],{"start":1287},[71,130267,130268],{},"解决边框额外增加盒子的实际大小的方法：",[68,130270,130271,130274],{},[71,130272,130273],{},"测量盒子大小的时候,不量边框",[71,130275,130276],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[49,130278,130280],{"id":130279},"_912-内边距","9.1.2 内边距",[161,130282,130283,130286],{},[71,130284,130285],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[71,130287,129997],{},[352,130289,130290,130300],{},[355,130291,130292],{},[358,130293,130294,130297],{},[361,130295,130296],{"align":23823},"值的个数",[361,130298,130299],{"align":23823},"表达意思",[398,130301,130302,130310,130318,130326],{},[358,130303,130304,130307],{},[403,130305,130306],{"align":23823},"padding: 5px;",[403,130308,130309],{"align":23823},"1个值，代表上下左右都有5个元素",[358,130311,130312,130315],{},[403,130313,130314],{"align":23823},"padding: 5px 10px;",[403,130316,130317],{"align":23823},"2个值，代表上下内边距为5像素，左右内边距为10像素",[358,130319,130320,130323],{},[403,130321,130322],{"align":23823},"padding: 5px 10px 20px;",[403,130324,130325],{"align":23823},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[358,130327,130328,130331],{},[403,130329,130330],{"align":23823},"padding: 5px 10px 20px 30px;",[403,130332,130333],{"align":23823},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[352,130335,130336,130344],{},[355,130337,130338],{},[358,130339,130340,130342],{},[361,130341,129238],{"align":23823},[361,130343,102781],{"align":23823},[398,130345,130346,130354,130362,130370],{},[358,130347,130348,130351],{},[403,130349,130350],{"align":23823},"padding-left",[403,130352,130353],{"align":23823},"左内边距",[358,130355,130356,130359],{},[403,130357,130358],{"align":23823},"padding-right",[403,130360,130361],{"align":23823},"右内边距",[358,130363,130364,130367],{},[403,130365,130366],{"align":23823},"padding-top",[403,130368,130369],{"align":23823},"上内边距",[358,130371,130372,130375],{},[403,130373,130374],{"align":23823},"padding-bottom",[403,130376,130377],{"align":23823},"下内边距",[161,130379,130380],{"start":131},[71,130381,130382],{},"内边距会影响盒子的实际大小",[19,130384,130385],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130387,130388],{},"①内容和边框有了距离，添加了内边距",[19,130390,130391],{},"②padding影响了盒子实际大小",[19,130393,130394],{},"内边距对盒子大小的影响：",[19,130396,130397],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130399,130400],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130402,95306],{},[19,130404,130405],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[49,130407,130409],{"id":130408},"_913-外边距","9.1.3 外边距",[161,130411,130412],{},[71,130413,130414],{},"控制盒子与盒子之间的距离",[352,130416,130417,130425],{},[355,130418,130419],{},[358,130420,130421,130423],{},[361,130422,129238],{"align":23823},[361,130424,102781],{"align":23823},[398,130426,130427,130435,130443,130451],{},[358,130428,130429,130432],{},[403,130430,130431],{"align":23823},"margin-left",[403,130433,130434],{"align":23823},"左外边距",[358,130436,130437,130440],{},[403,130438,130439],{"align":23823},"margin-right",[403,130441,130442],{"align":23823},"右外边距",[358,130444,130445,130448],{},[403,130446,130447],{"align":23823},"margin-top",[403,130449,130450],{"align":23823},"上外边距",[358,130452,130453,130456],{},[403,130454,130455],{"align":23823},"margin-bottom",[403,130457,130458],{"align":23823},"下外边距",[161,130460,130461],{"start":126},[71,130462,130463],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130465,130466],{},"①盒子必须指定了宽度（width）",[19,130468,130469],{},"②盒子左右的外边距都设置为 auto",[196,130471,130473],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[81,130474,130475,130480,130487,130503],{"__ignoreMap":125},[204,130476,130477],{"class":206,"line":207},[204,130478,130479],{"class":273},"\u002F* margin 复合写法（同上） *\u002F\n",[204,130481,130482,130485],{"class":206,"line":126},[204,130483,130484],{"class":2049},".box",[204,130486,15659],{"class":214},[204,130488,130489,130491,130493,130495,130497,130500],{"class":206,"line":131},[204,130490,70556],{"class":263},[204,130492,51523],{"class":214},[204,130494,405],{"class":263},[204,130496,51642],{"class":263},[204,130498,130499],{"class":214},";  ",[204,130501,130502],{"class":273},"\u002F* 块级盒子水平居中 *\u002F\n",[204,130504,130505],{"class":206,"line":1281},[204,130506,1651],{"class":214},[161,130508,130509],{"start":131},[71,130510,130511],{},"外边距塌陷问题",[19,130513,130514],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[23,130516],{"style":25,"src":130517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130519,130520],{},"解决方案：",[19,130522,130523],{},"①可以为父亲元素定义上边距",[196,130525,130526],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,130527,130528,130532,130538,130552],{"__ignoreMap":125},[204,130529,130530],{"class":206,"line":207},[204,130531,130479],{"class":273},[204,130533,130534,130536],{"class":206,"line":126},[204,130535,130484],{"class":2049},[204,130537,15659],{"class":214},[204,130539,130540,130542,130544,130546,130548,130550],{"class":206,"line":131},[204,130541,70556],{"class":263},[204,130543,51523],{"class":214},[204,130545,405],{"class":263},[204,130547,51642],{"class":263},[204,130549,130499],{"class":214},[204,130551,130502],{"class":273},[204,130553,130554],{"class":206,"line":1281},[204,130555,1651],{"class":214},[19,130557,130558],{},"②可以为父亲元素定义上内边距",[19,130560,130561],{},"③可以为父亲元素添加overflow:hidden",[23,130563],{"style":25,"src":130564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[196,130566,130567],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,130568,130569,130573,130579,130593],{"__ignoreMap":125},[204,130570,130571],{"class":206,"line":207},[204,130572,130479],{"class":273},[204,130574,130575,130577],{"class":206,"line":126},[204,130576,130484],{"class":2049},[204,130578,15659],{"class":214},[204,130580,130581,130583,130585,130587,130589,130591],{"class":206,"line":131},[204,130582,70556],{"class":263},[204,130584,51523],{"class":214},[204,130586,405],{"class":263},[204,130588,51642],{"class":263},[204,130590,130499],{"class":214},[204,130592,130502],{"class":273},[204,130594,130595],{"class":206,"line":1281},[204,130596,1651],{"class":214},[23,130598],{"style":25,"src":130599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130601,130602],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130604,130605],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[49,130607,130609],{"id":130608},"_914-清除内外边距","9.1.4 清除内外边距",[19,130611,130612],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[196,130614,130615],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,130616,130617,130621,130627,130641],{"__ignoreMap":125},[204,130618,130619],{"class":206,"line":207},[204,130620,130479],{"class":273},[204,130622,130623,130625],{"class":206,"line":126},[204,130624,130484],{"class":2049},[204,130626,15659],{"class":214},[204,130628,130629,130631,130633,130635,130637,130639],{"class":206,"line":131},[204,130630,70556],{"class":263},[204,130632,51523],{"class":214},[204,130634,405],{"class":263},[204,130636,51642],{"class":263},[204,130638,130499],{"class":214},[204,130640,130502],{"class":273},[204,130642,130643],{"class":206,"line":1281},[204,130644,1651],{"class":214},[19,130646,130647],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[49,130649,130651],{"id":130650},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[68,130653,130654,130657,130660,130663,130666,130669],{},[71,130655,130656],{},"文件→打开 ：可以打开我们要测量的图片",[71,130658,130659],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[71,130661,130662],{},"右击标尺，把里面的单位改为像素",[71,130664,130665],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[71,130667,130668],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[71,130670,130671],{},"用选区拖动 可以测量大小",[23,130673],{"style":25,"src":130674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[68,130676,130677,130680],{},[71,130678,130679],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[71,130681,130682],{},"吸管取色工具",[23,130684],{"style":25,"src":130685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[49,130687,130689],{"id":130688},"_916-案例","9.1.6 案例",[161,130691,130692],{},[71,130693,130694],{},"小米商品",[23,130696],{"style":25,"src":130697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[196,130699,130700],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,130701,130702,130706,130712,130726],{"__ignoreMap":125},[204,130703,130704],{"class":206,"line":207},[204,130705,130479],{"class":273},[204,130707,130708,130710],{"class":206,"line":126},[204,130709,130484],{"class":2049},[204,130711,15659],{"class":214},[204,130713,130714,130716,130718,130720,130722,130724],{"class":206,"line":131},[204,130715,70556],{"class":263},[204,130717,51523],{"class":214},[204,130719,405],{"class":263},[204,130721,51642],{"class":263},[204,130723,130499],{"class":214},[204,130725,130502],{"class":273},[204,130727,130728],{"class":206,"line":1281},[204,130729,1651],{"class":214},[161,130731,130732],{"start":126},[71,130733,130734],{},"快报模块",[23,130736],{"style":25,"src":130737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[196,130739,130741],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[81,130742,130743,130748,130763,130768],{"__ignoreMap":125},[204,130744,130745],{"class":206,"line":207},[204,130746,130747],{"class":273},"\u003C!-- HTML 代码示例 -->\n",[204,130749,130750,130752,130754,130756,130758,130761],{"class":206,"line":126},[204,130751,1123],{"class":214},[204,130753,51697],{"class":51386},[204,130755,53572],{"class":2049},[204,130757,260],{"class":214},[204,130759,130760],{"class":319},"\"example\"",[204,130762,51393],{"class":214},[204,130764,130765],{"class":206,"line":131},[204,130766,130767],{"class":214},"  示例内容\n",[204,130769,130770,130772,130774],{"class":206,"line":1281},[204,130771,51871],{"class":214},[204,130773,51697],{"class":51386},[204,130775,51393],{"class":214},[49,130777,130779],{"id":130778},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[161,130781,130782],{},[71,130783,130784],{},"圆角边框",[19,130786,130787],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[23,130789],{"style":25,"src":130790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[196,130792,130794],{"className":126636,"code":130793,"language":126638,"meta":125,"style":125},"div {\n  border: 1px solid #ccc;\n}\n",[81,130795,130796,130802,130818],{"__ignoreMap":125},[204,130797,130798,130800],{"class":206,"line":207},[204,130799,51697],{"class":51386},[204,130801,15659],{"class":214},[204,130803,130804,130806,130808,130810,130812,130814,130816],{"class":206,"line":126},[204,130805,70982],{"class":263},[204,130807,51523],{"class":214},[204,130809,431],{"class":263},[204,130811,51578],{"class":210},[204,130813,51607],{"class":263},[204,130815,130028],{"class":263},[204,130817,1377],{"class":214},[204,130819,130820],{"class":206,"line":131},[204,130821,1651],{"class":214},[19,130823,130824],{},"解释:",[68,130826,130827,130830,130833,130836,130839],{},[71,130828,130829],{},"参数值可以为数值或百分比的形式",[71,130831,130832],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[71,130834,130835],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[71,130837,130838],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[71,130840,130841],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[161,130843,130844],{"start":126},[71,130845,130846],{},"盒子阴影",[196,130848,130850],{"className":126636,"code":130849,"language":126638,"meta":125,"style":125},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[81,130851,130852,130858,130895],{"__ignoreMap":125},[204,130853,130854,130856],{"class":206,"line":207},[204,130855,51697],{"class":51386},[204,130857,15659],{"class":214},[204,130859,130860,130863,130865,130867,130869,130871,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893],{"class":206,"line":126},[204,130861,130862],{"class":263},"  box-shadow",[204,130864,51523],{"class":214},[204,130866,405],{"class":263},[204,130868,14842],{"class":263},[204,130870,51578],{"class":210},[204,130872,2124],{"class":263},[204,130874,51578],{"class":210},[204,130876,78853],{"class":263},[204,130878,215],{"class":214},[204,130880,405],{"class":263},[204,130882,12522],{"class":214},[204,130884,405],{"class":263},[204,130886,12522],{"class":214},[204,130888,405],{"class":263},[204,130890,12522],{"class":214},[204,130892,86296],{"class":263},[204,130894,2805],{"class":214},[204,130896,130897],{"class":206,"line":131},[204,130898,1651],{"class":214},[352,130900,130901,130909],{},[355,130902,130903],{},[358,130904,130905,130907],{},[361,130906,366],{"align":23823},[361,130908,27575],{"align":23823},[398,130910,130911,130919,130927,130935,130943,130951],{},[358,130912,130913,130916],{},[403,130914,130915],{"align":23823},"h-shadow",[403,130917,130918],{"align":23823},"必需,水平阴影的位置,允许负值",[358,130920,130921,130924],{},[403,130922,130923],{"align":23823},"v-shadow",[403,130925,130926],{"align":23823},"必需,垂直阴影的位置,允许负值",[358,130928,130929,130932],{},[403,130930,130931],{"align":23823},"blur",[403,130933,130934],{"align":23823},"可选,模糊距离,就是影子的虚实",[358,130936,130937,130940],{},[403,130938,130939],{"align":23823},"spread",[403,130941,130942],{"align":23823},"可选,阴影尺寸",[358,130944,130945,130948],{},[403,130946,130947],{"align":23823},"color",[403,130949,130950],{"align":23823},"可选,阴影的颜色",[358,130952,130953,130956],{},[403,130954,130955],{"align":23823},"inset",[403,130957,130958],{"align":23823},"可选,将外部阴影(outset)改为内部阴影",[161,130960,130961],{"start":131},[71,130962,130963],{},"文字阴影",[196,130965,130967],{"className":126636,"code":130966,"language":126638,"meta":125,"style":125},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[81,130968,130969,130975,131014],{"__ignoreMap":125},[204,130970,130971,130973],{"class":206,"line":207},[204,130972,19],{"class":51386},[204,130974,15659],{"class":214},[204,130976,130977,130980,130982,130984,130986,130988,130990,130992,130994,130996,130998,131000,131002,131004,131006,131008,131010,131012],{"class":206,"line":126},[204,130978,130979],{"class":263},"  text-shadow",[204,130981,51523],{"class":214},[204,130983,431],{"class":263},[204,130985,51578],{"class":210},[204,130987,25205],{"class":263},[204,130989,51578],{"class":210},[204,130991,14842],{"class":263},[204,130993,51578],{"class":210},[204,130995,78853],{"class":263},[204,130997,215],{"class":214},[204,130999,405],{"class":263},[204,131001,12522],{"class":214},[204,131003,405],{"class":263},[204,131005,12522],{"class":214},[204,131007,405],{"class":263},[204,131009,12522],{"class":214},[204,131011,100607],{"class":263},[204,131013,2805],{"class":214},[204,131015,131016],{"class":206,"line":131},[204,131017,1651],{"class":214},[352,131019,131020,131028],{},[355,131021,131022],{},[358,131023,131024,131026],{},[361,131025,366],{"align":23823},[361,131027,27575],{"align":23823},[398,131029,131030,131036,131043,131050],{},[358,131031,131032,131034],{},[403,131033,130915],{"align":23823},[403,131035,130918],{"align":23823},[358,131037,131038,131040],{},[403,131039,130923],{"align":23823},[403,131041,131042],{"align":23823},"必需,垂直阴影位置,允许负值",[358,131044,131045,131047],{},[403,131046,130931],{"align":23823},[403,131048,131049],{"align":23823},"可选,模糊的距离",[358,131051,131052,131054],{},[403,131053,130947],{"align":23823},[403,131055,130950],{"align":23823},[14,131057,131059],{"id":131058},"_92-浮动","9.2 浮动",[49,131061,131063],{"id":131062},"_921-浮动介绍","9.2.1 浮动介绍",[19,131065,131066],{},"在16.2中详细介绍",[49,131068,131070],{"id":131069},"_922-清除浮动","9.2.2 清除浮动",[161,131072,131073,131076],{},[71,131074,131075],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[71,131077,131078],{},"清除浮动的本质",[19,131080,131081],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131083,9112],{},[68,131085,131086,131089,131092],{},[71,131087,131088],{},"如果父盒子本身有高度，则不需要清除浮动",[71,131090,131091],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[71,131093,131094],{},"父级有了高度，就不会影响下面的标准流了",[161,131096,131097],{"start":131},[71,131098,131099],{},"清除浮动样式",[196,131101,131103],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[81,131104,131105,131112,131123,131127,131134,131144],{"__ignoreMap":125},[204,131106,131107,131110],{"class":206,"line":207},[204,131108,131109],{"class":2049},".left",[204,131111,15659],{"class":214},[204,131113,131114,131117,131119,131121],{"class":206,"line":126},[204,131115,131116],{"class":263},"  float",[204,131118,51523],{"class":214},[204,131120,23823],{"class":263},[204,131122,1377],{"class":214},[204,131124,131125],{"class":206,"line":131},[204,131126,1651],{"class":214},[204,131128,131129,131132],{"class":206,"line":1281},[204,131130,131131],{"class":2049},".right",[204,131133,15659],{"class":214},[204,131135,131136,131138,131140,131142],{"class":206,"line":1287},[204,131137,131116],{"class":263},[204,131139,51523],{"class":214},[204,131141,72608],{"class":263},[204,131143,1377],{"class":214},[204,131145,131146],{"class":206,"line":1301},[204,131147,1651],{"class":214},[352,131149,131150,131158],{},[355,131151,131152],{},[358,131153,131154,131156],{},[361,131155,127100],{"align":23823},[361,131157,27575],{"align":23823},[398,131159,131160,131167,131174],{},[358,131161,131162,131164],{},[403,131163,23823],{"align":23823},[403,131165,131166],{"align":23823},"不允许左侧有浮动元素（清除左侧浮动的影响）",[358,131168,131169,131171],{},[403,131170,72608],{"align":23823},[403,131172,131173],{"align":23823},"不允许右侧有浮动元素（清除右侧浮动的影响）",[358,131175,131176,131179],{},[403,131177,131178],{"align":23823},"both",[403,131180,131181],{"align":23823},"同时清除左右侧浮动的影响",[19,131183,131184],{},"法一",[19,131186,131187],{},"额外标签法也称为隔墙法",[19,131189,131190],{},"使用方式：",[19,131192,131193],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[196,131195,131196],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,131197,131198,131204,131214,131218,131224,131234],{"__ignoreMap":125},[204,131199,131200,131202],{"class":206,"line":207},[204,131201,131109],{"class":2049},[204,131203,15659],{"class":214},[204,131205,131206,131208,131210,131212],{"class":206,"line":126},[204,131207,131116],{"class":263},[204,131209,51523],{"class":214},[204,131211,23823],{"class":263},[204,131213,1377],{"class":214},[204,131215,131216],{"class":206,"line":131},[204,131217,1651],{"class":214},[204,131219,131220,131222],{"class":206,"line":1281},[204,131221,131131],{"class":2049},[204,131223,15659],{"class":214},[204,131225,131226,131228,131230,131232],{"class":206,"line":1287},[204,131227,131116],{"class":263},[204,131229,51523],{"class":214},[204,131231,72608],{"class":263},[204,131233,1377],{"class":214},[204,131235,131236],{"class":206,"line":1301},[204,131237,1651],{"class":214},[19,131239,131240],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131242,131243],{},"优点： 通俗易懂，书写方便",[19,131245,131246],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131248,131249],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131251,131252],{},"法二",[19,131254,131255],{},"父级添加overflow属性",[196,131257,131258],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,131259,131260,131266,131276,131280,131286,131296],{"__ignoreMap":125},[204,131261,131262,131264],{"class":206,"line":207},[204,131263,131109],{"class":2049},[204,131265,15659],{"class":214},[204,131267,131268,131270,131272,131274],{"class":206,"line":126},[204,131269,131116],{"class":263},[204,131271,51523],{"class":214},[204,131273,23823],{"class":263},[204,131275,1377],{"class":214},[204,131277,131278],{"class":206,"line":131},[204,131279,1651],{"class":214},[204,131281,131282,131284],{"class":206,"line":1281},[204,131283,131131],{"class":2049},[204,131285,15659],{"class":214},[204,131287,131288,131290,131292,131294],{"class":206,"line":1287},[204,131289,131116],{"class":263},[204,131291,51523],{"class":214},[204,131293,72608],{"class":263},[204,131295,1377],{"class":214},[204,131297,131298],{"class":206,"line":1301},[204,131299,1651],{"class":214},[19,131301,131302],{},"overflow: hidden;",[19,131304,131305],{},"优点：代码简洁",[19,131307,131308],{},"缺点：无法显示溢出的部分",[19,131310,131311],{},"注意：是给父元素添加代码",[19,131313,131314],{},"法三",[19,131316,131317],{},"父级添加after伪元素",[19,131319,131320,131323],{},[131321,131322],"after",{}," 方式是额外标签法的升级版",[19,131325,131326],{},"使用的时候复制就可以",[196,131328,131329],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,131330,131331,131337,131347,131351,131357,131367],{"__ignoreMap":125},[204,131332,131333,131335],{"class":206,"line":207},[204,131334,131109],{"class":2049},[204,131336,15659],{"class":214},[204,131338,131339,131341,131343,131345],{"class":206,"line":126},[204,131340,131116],{"class":263},[204,131342,51523],{"class":214},[204,131344,23823],{"class":263},[204,131346,1377],{"class":214},[204,131348,131349],{"class":206,"line":131},[204,131350,1651],{"class":214},[204,131352,131353,131355],{"class":206,"line":1281},[204,131354,131131],{"class":2049},[204,131356,15659],{"class":214},[204,131358,131359,131361,131363,131365],{"class":206,"line":1287},[204,131360,131116],{"class":263},[204,131362,51523],{"class":214},[204,131364,72608],{"class":263},[204,131366,1377],{"class":214},[204,131368,131369],{"class":206,"line":1301},[204,131370,1651],{"class":214},[19,131372,131373],{},"优点：没有增加标签，结构更简单",[19,131375,131376],{},"缺点：照顾低版本浏览器",[19,131378,131379],{},"代表网站： 百度、淘宝网、网易等",[19,131381,131382],{},"法四",[19,131384,131385],{},"父级添加双伪元素",[196,131387,131388],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,131389,131390,131396,131406,131410,131416,131426],{"__ignoreMap":125},[204,131391,131392,131394],{"class":206,"line":207},[204,131393,131109],{"class":2049},[204,131395,15659],{"class":214},[204,131397,131398,131400,131402,131404],{"class":206,"line":126},[204,131399,131116],{"class":263},[204,131401,51523],{"class":214},[204,131403,23823],{"class":263},[204,131405,1377],{"class":214},[204,131407,131408],{"class":206,"line":131},[204,131409,1651],{"class":214},[204,131411,131412,131414],{"class":206,"line":1281},[204,131413,131131],{"class":2049},[204,131415,15659],{"class":214},[204,131417,131418,131420,131422,131424],{"class":206,"line":1287},[204,131419,131116],{"class":263},[204,131421,51523],{"class":214},[204,131423,72608],{"class":263},[204,131425,1377],{"class":214},[204,131427,131428],{"class":206,"line":1301},[204,131429,1651],{"class":214},[19,131431,131432],{},"优点：代码更简洁",[19,131434,131376],{},[19,131436,131437],{},"代表网站：小米、腾讯等",[14,131439,131441],{"id":131440},"_93-ps切图","9.3 PS切图",[49,131443,131445],{"id":131444},"_931-常见图片格式","9.3.1 常见图片格式",[352,131447,131448,131458],{},[355,131449,131450],{},[358,131451,131452,131455],{},[361,131453,131454],{"align":23823},"jpg图像格式",[361,131456,131457],{"align":23823},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[398,131459,131460,131468,131476],{},[358,131461,131462,131465],{},[403,131463,131464],{"align":23823},"gif图像格式",[403,131466,131467],{"align":23823},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[358,131469,131470,131473],{},[403,131471,131472],{"align":23823},"png图像格式",[403,131474,131475],{"align":23823},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[358,131477,131478,131481],{},[403,131479,131480],{"align":23823},"PSD图像格式",[403,131482,131483],{"align":23823},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[49,131485,131487],{"id":131486},"_932-图层切图","9.3.2 图层切图",[19,131489,131490],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131492,131493],{},"按住shift选中两个图层->图层菜单->合并图层",[49,131495,131497],{"id":131496},"_933-切片切图","9.3.3 切片切图",[68,131499,131500,131503],{},[71,131501,131502],{},"利用切片工具手动划出",[71,131504,131505],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[49,131507,131509],{"id":131508},"_934-切图步骤","9.3.4 切图步骤",[19,131511,131512],{},"用切片工具选中：",[23,131514],{"style":25,"src":131515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131517,131518],{},"文件 -> 导出",[23,131520],{"style":25,"src":131521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5213,131523,131524],{},"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":125,"searchDepth":126,"depth":126,"links":131526},[131527,131536,131540],{"id":129963,"depth":126,"text":129964,"children":131528},[131529,131530,131531,131532,131533,131534,131535],{"id":129988,"depth":131,"text":129989},{"id":130279,"depth":131,"text":130280},{"id":130408,"depth":131,"text":130409},{"id":130608,"depth":131,"text":130609},{"id":130650,"depth":131,"text":130651},{"id":130688,"depth":131,"text":130689},{"id":130778,"depth":131,"text":130779},{"id":131058,"depth":126,"text":131059,"children":131537},[131538,131539],{"id":131062,"depth":131,"text":131063},{"id":131069,"depth":131,"text":131070},{"id":131440,"depth":126,"text":131441,"children":131541},[131542,131543,131544,131545],{"id":131444,"depth":131,"text":131445},{"id":131486,"depth":131,"text":131487},{"id":131496,"depth":131,"text":131497},{"id":131508,"depth":131,"text":131509},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129955,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131552,"title":131553,"body":131554,"description":132,"extension":133,"meta":132195,"navigation":135,"path":132196,"seo":132197,"stem":132198,"__hash__":132199},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131555,"toc":132183},[131556,131559,131563,131589,131623,131627,131631,131634,131676,131683,131693,131701,131703,131706,131709,131712,131719,131733,131737,131740,131769,131773,131776,131790,131794,131797,131825,131829,131832,131858,131862,131867,131900,131905,131933,131937,131954,132000,132005,132049,132066,132173,132181],[10,131557,131553],{"id":131558},"_10-css规范与学成在线案例",[14,131560,131562],{"id":131561},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[161,131564,131565,131571,131577,131583],{},[71,131566,131567,131570],{},[30,131568,131569],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[71,131572,131573,131576],{},[30,131574,131575],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[71,131578,131579,131582],{},[30,131580,131581],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[71,131584,131585,131588],{},[30,131586,131587],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[196,131590,131591],{"className":126636,"code":130000,"language":126638,"meta":125,"style":125},[81,131592,131593,131597,131603,131619],{"__ignoreMap":125},[204,131594,131595],{"class":206,"line":207},[204,131596,130007],{"class":273},[204,131598,131599,131601],{"class":206,"line":126},[204,131600,51697],{"class":51386},[204,131602,15659],{"class":214},[204,131604,131605,131607,131609,131611,131613,131615,131617],{"class":206,"line":131},[204,131606,70982],{"class":263},[204,131608,51523],{"class":214},[204,131610,431],{"class":263},[204,131612,51578],{"class":210},[204,131614,51607],{"class":263},[204,131616,130028],{"class":263},[204,131618,1377],{"class":214},[204,131620,131621],{"class":206,"line":1281},[204,131622,1651],{"class":214},[14,131624,131626],{"id":131625},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[49,131628,131630],{"id":131629},"_1021-header头部制作","10.2.1 header头部制作",[23,131632],{"style":25,"src":131633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[68,131635,131636,131643,131650,131656,131663,131670],{},[71,131637,131638,131639,131642],{},"1号是版心盒子 ",[30,131640,131641],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[71,131644,131645,131646,131649],{},"版心盒子 里面包含 2号盒子 ",[30,131647,131648],{},"logo"," 图标",[71,131651,131652,131653,131655],{},"版心盒子 里面包含 3号盒子 ",[30,131654,53799],{}," 导航栏",[71,131657,131658,131659,131662],{},"版心盒子 里面包含 4号盒子 ",[30,131660,131661],{},"search"," 搜索框",[71,131664,131665,131666,131669],{},"版心盒子 里面包含 5号盒子 ",[30,131667,131668],{},"user"," 个人信息",[71,131671,131672,131673],{},"注意，要求里面的 ",[30,131674,131675],{},"4个子盒子 必须都浮动",[161,131677,131678],{},[71,131679,131680],{},[30,131681,131682],{},"导航栏注意点:",[19,131684,131685,131686,131689,131690],{},"实际开发中， ",[30,131687,131688],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[30,131691,131692],{},"用 li 包含链接(li+a)的做法",[68,131694,131695,131698],{},[71,131696,131697],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[71,131699,131700],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131702,9112],{},[19,131704,131705],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131707,131708],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131710,131711],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[161,131713,131714],{"start":126},[71,131715,131716],{},[30,131717,131718],{},"4号盒子search的细节：",[68,131720,131721,131724,131727],{},[71,131722,131723],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[71,131725,131726],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[71,131728,131729,131732],{},[81,131730,131731],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[49,131734,131736],{"id":131735},"_1022-banner制作","10.2.2 banner制作",[23,131738],{"style":25,"src":131739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[68,131741,131742,131749,131755,131762],{},[71,131743,131744,131745,131748],{},"1号盒子是通栏的大盒子 ",[30,131746,131747],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[71,131750,131751,131752,131754],{},"2号盒子是版心 ",[30,131753,1008],{}," ， 要水平居中对齐",[71,131756,131757,131758,131761],{},"3号盒子版心内，左对齐 ",[30,131759,131760],{},"subnav"," 侧导航栏",[71,131763,131764,131765,131768],{},"4号盒子版心内，右对齐 ",[30,131766,131767],{},"course"," 课程",[49,131770,131772],{"id":131771},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[23,131774],{"style":25,"src":131775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[68,131777,131778,131781,131784,131787],{},[71,131779,131780],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[71,131782,131783],{},"1号盒子是标题 H3 左侧浮动",[71,131785,131786],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[71,131788,131789],{},"3号盒子 右浮动 mod 修改",[49,131791,131793],{"id":131792},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[23,131795],{"style":25,"src":131796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[68,131798,131799,131805,131812,131819,131822],{},[71,131800,131801,131802,131804],{},"1号盒子为最大的盒子 ",[30,131803,53800],{}," 版心水平居中对齐",[71,131806,131807,131808,131811],{},"2号盒子为上面部分 ",[30,131809,131810],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[71,131813,131814,131815,131818],{},"3号盒子为底下部分 ",[30,131816,131817],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[71,131820,131821],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[71,131823,131824],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[49,131826,131828],{"id":131827},"_1025-底部模块制作","10.2.5 底部模块制作",[23,131830],{"style":25,"src":131831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[68,131833,131834,131841,131844,131851],{},[71,131835,131836,131837,131840],{},"1号盒子通栏大盒子 底部 ",[30,131838,131839],{},"footer"," 给高度 底色是白色",[71,131842,131843],{},"2号盒子版心水平居中",[71,131845,131846,131847,131850],{},"3号盒子版权 ",[30,131848,131849],{},"copyright"," 左对齐",[71,131852,131853,131854,131857],{},"4号盒子 链接组 ",[30,131855,131856],{},"links"," 右对齐",[49,131859,131861],{"id":131860},"_1026-代码模块","10.2.6 代码模块",[161,131863,131864],{},[71,131865,131866],{},"html部分",[196,131868,131870],{"className":127383,"code":131869,"language":127385,"meta":125,"style":125},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[81,131871,131872],{"__ignoreMap":125},[204,131873,131874,131876,131878,131880,131882,131885,131888,131890,131893,131896,131898],{"class":206,"line":207},[204,131875,1123],{"class":214},[204,131877,62],{"class":51386},[204,131879,61143],{"class":2049},[204,131881,260],{"class":214},[204,131883,131884],{"class":319},"\"https:\u002F\u002Fexample.com\"",[204,131886,131887],{"class":2049}," target",[204,131889,260],{"class":214},[204,131891,131892],{"class":319},"\"_blank\"",[204,131894,131895],{"class":214},">链接文字\u003C\u002F",[204,131897,62],{"class":51386},[204,131899,51393],{"class":214},[161,131901,131902],{"start":126},[71,131903,131904],{},"css部分",[196,131906,131907],{"className":127383,"code":131869,"language":127385,"meta":125,"style":125},[81,131908,131909],{"__ignoreMap":125},[204,131910,131911,131913,131915,131917,131919,131921,131923,131925,131927,131929,131931],{"class":206,"line":207},[204,131912,1123],{"class":214},[204,131914,62],{"class":51386},[204,131916,61143],{"class":2049},[204,131918,260],{"class":214},[204,131920,131884],{"class":319},[204,131922,131887],{"class":2049},[204,131924,260],{"class":214},[204,131926,131892],{"class":319},[204,131928,131895],{"class":214},[204,131930,62],{"class":51386},[204,131932,51393],{"class":214},[49,131934,131936],{"id":131935},"_1027-收获","10.2.7 收获",[161,131938,131939,131942,131945,131948,131951],{},[71,131940,131941],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[71,131943,131944],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[71,131946,131947],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[71,131949,131950],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[71,131952,131953],{},"遗忘代码",[196,131955,131957],{"className":126636,"code":131956,"language":126638,"meta":125,"style":125},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[81,131958,131959,131981,131986,131996],{"__ignoreMap":125},[204,131960,131961,131963,131965,131967,131969,131971,131973,131975,131977,131979],{"class":206,"line":207},[204,131962,51697],{"class":51386},[204,131964,12522],{"class":214},[204,131966,19],{"class":51386},[204,131968,12522],{"class":214},[204,131970,10],{"class":51386},[204,131972,12522],{"class":214},[204,131974,68],{"class":51386},[204,131976,12522],{"class":214},[204,131978,71],{"class":51386},[204,131980,15659],{"class":214},[204,131982,131983],{"class":206,"line":126},[204,131984,131985],{"class":273},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[204,131987,131988,131990,131992,131994],{"class":206,"line":131},[204,131989,128252],{"class":263},[204,131991,51523],{"class":214},[204,131993,60955],{"class":263},[204,131995,1377],{"class":214},[204,131997,131998],{"class":206,"line":1281},[204,131999,1651],{"class":214},[161,132001,132002],{"start":1301},[71,132003,132004],{},"html引css的程序",[196,132006,132007],{"className":126636,"code":131956,"language":126638,"meta":125,"style":125},[81,132008,132009,132031,132035,132045],{"__ignoreMap":125},[204,132010,132011,132013,132015,132017,132019,132021,132023,132025,132027,132029],{"class":206,"line":207},[204,132012,51697],{"class":51386},[204,132014,12522],{"class":214},[204,132016,19],{"class":51386},[204,132018,12522],{"class":214},[204,132020,10],{"class":51386},[204,132022,12522],{"class":214},[204,132024,68],{"class":51386},[204,132026,12522],{"class":214},[204,132028,71],{"class":51386},[204,132030,15659],{"class":214},[204,132032,132033],{"class":206,"line":126},[204,132034,131985],{"class":273},[204,132036,132037,132039,132041,132043],{"class":206,"line":131},[204,132038,128252],{"class":263},[204,132040,51523],{"class":214},[204,132042,60955],{"class":263},[204,132044,1377],{"class":214},[204,132046,132047],{"class":206,"line":1281},[204,132048,1651],{"class":214},[161,132050,132051,132054,132057,132060,132063],{"start":1307},[71,132052,132053],{},"浮动的盒子不会有外边距合并问题",[71,132055,132056],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[71,132058,132059],{},"ctrl+g快速定位行；shift+alt多个光标",[71,132061,132062],{},"学习上方各个模块的选择器起名方法，以后就这样用",[71,132064,132065],{},"在写选择器时尽量写全一些，例如",[196,132067,132069],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},"\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",[81,132070,132071,132076,132092,132097,132112,132117,132132,132137,132152,132157],{"__ignoreMap":125},[204,132072,132073],{"class":206,"line":207},[204,132074,132075],{"class":273},"\u002F* 静态定位（默认） *\u002F\n",[204,132077,132078,132081,132083,132085,132087,132090],{"class":206,"line":126},[204,132079,132080],{"class":2049},".static",[204,132082,79893],{"class":214},[204,132084,128996],{"class":263},[204,132086,51523],{"class":214},[204,132088,132089],{"class":263},"static",[204,132091,129566],{"class":214},[204,132093,132094],{"class":206,"line":131},[204,132095,132096],{"class":273},"\u002F* 相对定位 *\u002F\n",[204,132098,132099,132102,132104,132106,132108,132110],{"class":206,"line":1281},[204,132100,132101],{"class":2049},".relative",[204,132103,79893],{"class":214},[204,132105,128996],{"class":263},[204,132107,51523],{"class":214},[204,132109,54850],{"class":263},[204,132111,129566],{"class":214},[204,132113,132114],{"class":206,"line":1287},[204,132115,132116],{"class":273},"\u002F* 绝对定位 *\u002F\n",[204,132118,132119,132122,132124,132126,132128,132130],{"class":206,"line":1301},[204,132120,132121],{"class":2049},".absolute",[204,132123,79893],{"class":214},[204,132125,128996],{"class":263},[204,132127,51523],{"class":214},[204,132129,54917],{"class":263},[204,132131,129566],{"class":214},[204,132133,132134],{"class":206,"line":1307},[204,132135,132136],{"class":273},"\u002F* 固定定位 *\u002F\n",[204,132138,132139,132142,132144,132146,132148,132150],{"class":206,"line":1398},[204,132140,132141],{"class":2049},".fixed",[204,132143,79893],{"class":214},[204,132145,128996],{"class":263},[204,132147,51523],{"class":214},[204,132149,86319],{"class":263},[204,132151,129566],{"class":214},[204,132153,132154],{"class":206,"line":1404},[204,132155,132156],{"class":273},"\u002F* 粘性定位 *\u002F\n",[204,132158,132159,132162,132164,132166,132168,132171],{"class":206,"line":1416},[204,132160,132161],{"class":2049},".sticky",[204,132163,79893],{"class":214},[204,132165,128996],{"class":263},[204,132167,51523],{"class":214},[204,132169,132170],{"class":263},"sticky",[204,132172,129566],{"class":214},[161,132174,132175,132178],{"start":1703},[71,132176,132177],{},"一定要用好注释",[71,132179,132180],{},"浮动的盒子不会有外边距合并的问题",[5213,132182,131524],{},{"title":125,"searchDepth":126,"depth":126,"links":132184},[132185,132186],{"id":131561,"depth":126,"text":131562},{"id":131625,"depth":126,"text":131626,"children":132187},[132188,132189,132190,132191,132192,132193,132194],{"id":131629,"depth":131,"text":131630},{"id":131735,"depth":131,"text":131736},{"id":131771,"depth":131,"text":131772},{"id":131792,"depth":131,"text":131793},{"id":131827,"depth":131,"text":131828},{"id":131860,"depth":131,"text":131861},{"id":131935,"depth":131,"text":131936},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131553,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132201,"title":132202,"body":132203,"description":132,"extension":133,"meta":133689,"navigation":135,"path":133690,"seo":133691,"stem":133692,"__hash__":133693},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132204,"toc":133681},[132205,132208,132212,132216,132227,132231,132248,132292,132325,132328,132345,132348,132351,132395,132399,132403,132406,132409,132413,132416,132427,132490,132531,132534,132549,132603,132611,132614,132625,132679,132705,132708,132721,132775,132807,132861,132884,132938,132941,132944,132951,133005,133026,133080,133083,133086,133171,133179,133236,133259,133263,133266,133284,133288,133307,133361,133399,133403,133406,133409,133431,133435,133443,133446,133451,133462,133465,133469,133483,133527,133530,133534,133537,133542,133568,133573,133650,133653,133657,133660,133663,133666,133669,133672,133675,133678],[10,132206,132202],{"id":132207},"_11-传统布局与定位体系",[14,132209,132211],{"id":132210},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[49,132213,132215],{"id":132214},"_1111-普通流标准流","11.1.1 普通流（标准流）",[68,132217,132218,132221,132224],{},[71,132219,132220],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[71,132222,132223],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[71,132225,132226],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[49,132228,132230],{"id":132229},"_1112-浮动","11.1.2 浮动",[68,132232,132233,132236,132239,132242,132245],{},[71,132234,132235],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[71,132237,132238],{},"浮动可以改变元素标签默认的排列方式",[71,132240,132241],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[71,132243,132244],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[71,132246,132247],{},"在使用行内块转换时盒子之间是有空隙的",[196,132249,132250],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,132251,132252,132258,132268,132272,132278,132288],{"__ignoreMap":125},[204,132253,132254,132256],{"class":206,"line":207},[204,132255,131109],{"class":2049},[204,132257,15659],{"class":214},[204,132259,132260,132262,132264,132266],{"class":206,"line":126},[204,132261,131116],{"class":263},[204,132263,51523],{"class":214},[204,132265,23823],{"class":263},[204,132267,1377],{"class":214},[204,132269,132270],{"class":206,"line":131},[204,132271,1651],{"class":214},[204,132273,132274,132276],{"class":206,"line":1281},[204,132275,131131],{"class":2049},[204,132277,15659],{"class":214},[204,132279,132280,132282,132284,132286],{"class":206,"line":1287},[204,132281,131116],{"class":263},[204,132283,51523],{"class":214},[204,132285,72608],{"class":263},[204,132287,1377],{"class":214},[204,132289,132290],{"class":206,"line":1301},[204,132291,1651],{"class":214},[352,132293,132294,132302],{},[355,132295,132296],{},[358,132297,132298,132300],{},[361,132299,127100],{"align":23823},[361,132301,27575],{"align":23823},[398,132303,132304,132311,132318],{},[358,132305,132306,132308],{},[403,132307,54823],{"align":23823},[403,132309,132310],{"align":23823},"元素不浮动（默认值）",[358,132312,132313,132315],{},[403,132314,23823],{"align":23823},[403,132316,132317],{"align":23823},"元素向左浮动",[358,132319,132320,132322],{},[403,132321,72608],{"align":23823},[403,132323,132324],{"align":23823},"元素向右浮动",[19,132326,132327],{},"浮动重点：",[68,132329,132330,132333,132336,132339,132342],{},[71,132331,132332],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[71,132334,132335],{},"浮动的元素会一行内显示并且元素顶部对齐",[71,132337,132338],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[71,132340,132341],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[71,132343,132344],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132346,132347],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132349,132350],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[196,132352,132353],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,132354,132355,132361,132371,132375,132381,132391],{"__ignoreMap":125},[204,132356,132357,132359],{"class":206,"line":207},[204,132358,131109],{"class":2049},[204,132360,15659],{"class":214},[204,132362,132363,132365,132367,132369],{"class":206,"line":126},[204,132364,131116],{"class":263},[204,132366,51523],{"class":214},[204,132368,23823],{"class":263},[204,132370,1377],{"class":214},[204,132372,132373],{"class":206,"line":131},[204,132374,1651],{"class":214},[204,132376,132377,132379],{"class":206,"line":1281},[204,132378,131131],{"class":2049},[204,132380,15659],{"class":214},[204,132382,132383,132385,132387,132389],{"class":206,"line":1287},[204,132384,131116],{"class":263},[204,132386,51523],{"class":214},[204,132388,72608],{"class":263},[204,132390,1377],{"class":214},[204,132392,132393],{"class":206,"line":1301},[204,132394,1651],{"class":214},[49,132396,132398],{"id":132397},"_1113-定位","11.1.3 定位",[22085,132400,132402],{"id":132401},"_11131-使用场景","11.1.3.1 使用场景",[19,132404,132405],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132407,132408],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22085,132410,132412],{"id":132411},"_11132-定位组成","11.1.3.2 定位组成",[19,132414,132415],{},"定位 = 定位模式 + 边偏移",[161,132417,132418],{},[71,132419,132420,132423,132424],{},[30,132421,132422],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[30,132425,132426],{},"定位模式",[196,132428,132430],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[81,132431,132432,132438,132452,132469,132486],{"__ignoreMap":125},[204,132433,132434,132436],{"class":206,"line":207},[204,132435,130484],{"class":2049},[204,132437,15659],{"class":214},[204,132439,132440,132443,132445,132447,132449],{"class":206,"line":126},[204,132441,132442],{"class":263},"  position",[204,132444,51523],{"class":214},[204,132446,54850],{"class":263},[204,132448,130499],{"class":214},[204,132450,132451],{"class":273},"\u002F* 定位模式 *\u002F\n",[204,132453,132454,132457,132459,132461,132463,132466],{"class":206,"line":131},[204,132455,132456],{"class":263},"  top",[204,132458,51523],{"class":214},[204,132460,659],{"class":263},[204,132462,51578],{"class":210},[204,132464,132465],{"class":214},";           ",[204,132467,132468],{"class":273},"\u002F* 边偏移：上 *\u002F\n",[204,132470,132471,132474,132476,132478,132480,132483],{"class":206,"line":1281},[204,132472,132473],{"class":263},"  left",[204,132475,51523],{"class":214},[204,132477,913],{"class":263},[204,132479,51578],{"class":210},[204,132481,132482],{"class":214},";          ",[204,132484,132485],{"class":273},"\u002F* 边偏移：左 *\u002F\n",[204,132487,132488],{"class":206,"line":1287},[204,132489,1651],{"class":214},[352,132491,132492,132501],{},[355,132493,132494],{},[358,132495,132496,132498],{},[361,132497,366],{"align":23823},[361,132499,132500],{"align":23823},"语义",[398,132502,132503,132510,132517,132524],{},[358,132504,132505,132507],{},[403,132506,132089],{"align":23823},[403,132508,132509],{"align":23823},"静态定位",[358,132511,132512,132514],{},[403,132513,54850],{"align":23823},[403,132515,132516],{"align":23823},"相对定位",[358,132518,132519,132521],{},[403,132520,54917],{"align":23823},[403,132522,132523],{"align":23823},"绝对定位",[358,132525,132526,132528],{},[403,132527,86319],{"align":23823},[403,132529,132530],{"align":23823},"固定定位",[19,132532,132533],{},"（1）静态定位：",[68,132535,132536,132547],{},[71,132537,132538,132539,132542,132543,132546],{},"静态定位是元素的 ",[30,132540,132541],{},"默认定位方式"," ， ",[30,132544,132545],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[71,132548,5268],{},[196,132550,132551],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132552,132553,132559,132571,132585,132599],{"__ignoreMap":125},[204,132554,132555,132557],{"class":206,"line":207},[204,132556,130484],{"class":2049},[204,132558,15659],{"class":214},[204,132560,132561,132563,132565,132567,132569],{"class":206,"line":126},[204,132562,132442],{"class":263},[204,132564,51523],{"class":214},[204,132566,54850],{"class":263},[204,132568,130499],{"class":214},[204,132570,132451],{"class":273},[204,132572,132573,132575,132577,132579,132581,132583],{"class":206,"line":131},[204,132574,132456],{"class":263},[204,132576,51523],{"class":214},[204,132578,659],{"class":263},[204,132580,51578],{"class":210},[204,132582,132465],{"class":214},[204,132584,132468],{"class":273},[204,132586,132587,132589,132591,132593,132595,132597],{"class":206,"line":1281},[204,132588,132473],{"class":263},[204,132590,51523],{"class":214},[204,132592,913],{"class":263},[204,132594,51578],{"class":210},[204,132596,132482],{"class":214},[204,132598,132485],{"class":273},[204,132600,132601],{"class":206,"line":1287},[204,132602,1651],{"class":214},[68,132604,132605,132608],{},[71,132606,132607],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[71,132609,132610],{},"静态定位在布局时我们几乎不用的",[19,132612,132613],{},"（2）相对定位",[68,132615,132616,132623],{},[71,132617,132618,132619,132622],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[30,132620,132621],{},"原来的位置"," 来说的（自恋型）",[71,132624,5268],{},[196,132626,132627],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132628,132629,132635,132647,132661,132675],{"__ignoreMap":125},[204,132630,132631,132633],{"class":206,"line":207},[204,132632,130484],{"class":2049},[204,132634,15659],{"class":214},[204,132636,132637,132639,132641,132643,132645],{"class":206,"line":126},[204,132638,132442],{"class":263},[204,132640,51523],{"class":214},[204,132642,54850],{"class":263},[204,132644,130499],{"class":214},[204,132646,132451],{"class":273},[204,132648,132649,132651,132653,132655,132657,132659],{"class":206,"line":131},[204,132650,132456],{"class":263},[204,132652,51523],{"class":214},[204,132654,659],{"class":263},[204,132656,51578],{"class":210},[204,132658,132465],{"class":214},[204,132660,132468],{"class":273},[204,132662,132663,132665,132667,132669,132671,132673],{"class":206,"line":1281},[204,132664,132473],{"class":263},[204,132666,51523],{"class":214},[204,132668,913],{"class":263},[204,132670,51578],{"class":210},[204,132672,132482],{"class":214},[204,132674,132485],{"class":273},[204,132676,132677],{"class":206,"line":1287},[204,132678,1651],{"class":214},[68,132680,132681],{},[71,132682,132683,132684,132686,132687,132689,132690,132693,132694,132697,132698,132700,132701,132704],{},"相对定位的特点：",[53802,132685],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53802,132688],{},"  ② ",[30,132691,132692],{},"原来"," 在标准流的 ",[30,132695,132696],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53802,132699],{},"  ③因此， ",[30,132702,132703],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132706,132707],{},"（3）绝对定位",[68,132709,132710,132719],{},[71,132711,132712,132714,132715,132718],{},[30,132713,132523],{}," 是元素在移动位置的时候，是相对于它 ",[30,132716,132717],{},"祖先元素"," 来说的（拼爹型）",[71,132720,5268],{},[196,132722,132723],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132724,132725,132731,132743,132757,132771],{"__ignoreMap":125},[204,132726,132727,132729],{"class":206,"line":207},[204,132728,130484],{"class":2049},[204,132730,15659],{"class":214},[204,132732,132733,132735,132737,132739,132741],{"class":206,"line":126},[204,132734,132442],{"class":263},[204,132736,51523],{"class":214},[204,132738,54850],{"class":263},[204,132740,130499],{"class":214},[204,132742,132451],{"class":273},[204,132744,132745,132747,132749,132751,132753,132755],{"class":206,"line":131},[204,132746,132456],{"class":263},[204,132748,51523],{"class":214},[204,132750,659],{"class":263},[204,132752,51578],{"class":210},[204,132754,132465],{"class":214},[204,132756,132468],{"class":273},[204,132758,132759,132761,132763,132765,132767,132769],{"class":206,"line":1281},[204,132760,132473],{"class":263},[204,132762,51523],{"class":214},[204,132764,913],{"class":263},[204,132766,51578],{"class":210},[204,132768,132482],{"class":214},[204,132770,132485],{"class":273},[204,132772,132773],{"class":206,"line":1287},[204,132774,1651],{"class":214},[68,132776,132777,132792,132801,132804],{},[71,132778,132779,132780,132782,132783,132785,132786,132788,132789,132791],{},"绝对定位的特点：",[53802,132781],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53802,132784],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53802,132787],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53802,132790],{},"  (4)固定定位",[71,132793,132794,132796,132797,132800],{},[30,132795,132530],{}," 是元素 ",[30,132798,132799],{},"固定于浏览器可视区的位置"," 。（认死理型）",[71,132802,132803],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[71,132805,132806],{},"语法:",[196,132808,132809],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132810,132811,132817,132829,132843,132857],{"__ignoreMap":125},[204,132812,132813,132815],{"class":206,"line":207},[204,132814,130484],{"class":2049},[204,132816,15659],{"class":214},[204,132818,132819,132821,132823,132825,132827],{"class":206,"line":126},[204,132820,132442],{"class":263},[204,132822,51523],{"class":214},[204,132824,54850],{"class":263},[204,132826,130499],{"class":214},[204,132828,132451],{"class":273},[204,132830,132831,132833,132835,132837,132839,132841],{"class":206,"line":131},[204,132832,132456],{"class":263},[204,132834,51523],{"class":214},[204,132836,659],{"class":263},[204,132838,51578],{"class":210},[204,132840,132465],{"class":214},[204,132842,132468],{"class":273},[204,132844,132845,132847,132849,132851,132853,132855],{"class":206,"line":1281},[204,132846,132473],{"class":263},[204,132848,51523],{"class":214},[204,132850,913],{"class":263},[204,132852,51578],{"class":210},[204,132854,132482],{"class":214},[204,132856,132485],{"class":273},[204,132858,132859],{"class":206,"line":1287},[204,132860,1651],{"class":214},[68,132862,132863,132872],{},[71,132864,132865,132866,132868,132869,132871],{},"特点:",[53802,132867],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53802,132870],{},"  ②固定定位不再占有原先的位置,完全脱标",[71,132873,132874,132875,132877,132878,132880,132881,132883],{},"固定在版心位置的方法:",[53802,132876],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53802,132879],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53802,132882],{},"  实例：",[196,132885,132886],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132887,132888,132894,132906,132920,132934],{"__ignoreMap":125},[204,132889,132890,132892],{"class":206,"line":207},[204,132891,130484],{"class":2049},[204,132893,15659],{"class":214},[204,132895,132896,132898,132900,132902,132904],{"class":206,"line":126},[204,132897,132442],{"class":263},[204,132899,51523],{"class":214},[204,132901,54850],{"class":263},[204,132903,130499],{"class":214},[204,132905,132451],{"class":273},[204,132907,132908,132910,132912,132914,132916,132918],{"class":206,"line":131},[204,132909,132456],{"class":263},[204,132911,51523],{"class":214},[204,132913,659],{"class":263},[204,132915,51578],{"class":210},[204,132917,132465],{"class":214},[204,132919,132468],{"class":273},[204,132921,132922,132924,132926,132928,132930,132932],{"class":206,"line":1281},[204,132923,132473],{"class":263},[204,132925,51523],{"class":214},[204,132927,913],{"class":263},[204,132929,51578],{"class":210},[204,132931,132482],{"class":214},[204,132933,132485],{"class":273},[204,132935,132936],{"class":206,"line":1287},[204,132937,1651],{"class":214},[23,132939],{"style":25,"src":132940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,132942,132943],{},"(5)粘性定位",[68,132945,132946,132949],{},[71,132947,132948],{},"粘性定位可以被认为是相对定位和固定定位的混合",[71,132950,5268],{},[196,132952,132953],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,132954,132955,132961,132973,132987,133001],{"__ignoreMap":125},[204,132956,132957,132959],{"class":206,"line":207},[204,132958,130484],{"class":2049},[204,132960,15659],{"class":214},[204,132962,132963,132965,132967,132969,132971],{"class":206,"line":126},[204,132964,132442],{"class":263},[204,132966,51523],{"class":214},[204,132968,54850],{"class":263},[204,132970,130499],{"class":214},[204,132972,132451],{"class":273},[204,132974,132975,132977,132979,132981,132983,132985],{"class":206,"line":131},[204,132976,132456],{"class":263},[204,132978,51523],{"class":214},[204,132980,659],{"class":263},[204,132982,51578],{"class":210},[204,132984,132465],{"class":214},[204,132986,132468],{"class":273},[204,132988,132989,132991,132993,132995,132997,132999],{"class":206,"line":1281},[204,132990,132473],{"class":263},[204,132992,51523],{"class":214},[204,132994,913],{"class":263},[204,132996,51578],{"class":210},[204,132998,132482],{"class":214},[204,133000,132485],{"class":273},[204,133002,133003],{"class":206,"line":1287},[204,133004,1651],{"class":214},[68,133006,133007],{},[71,133008,133009,133010,133012,133013,133015,133016,133018,133019,133022,133023,133025],{},"粘性定位的特点：",[53802,133011],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53802,133014],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53802,133017],{},"  ③必须添加 top 、left、right、bottom ",[30,133020,133021],{},"其中一个"," 才有效",[53802,133024],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[196,133027,133028],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,133029,133030,133036,133048,133062,133076],{"__ignoreMap":125},[204,133031,133032,133034],{"class":206,"line":207},[204,133033,130484],{"class":2049},[204,133035,15659],{"class":214},[204,133037,133038,133040,133042,133044,133046],{"class":206,"line":126},[204,133039,132442],{"class":263},[204,133041,51523],{"class":214},[204,133043,54850],{"class":263},[204,133045,130499],{"class":214},[204,133047,132451],{"class":273},[204,133049,133050,133052,133054,133056,133058,133060],{"class":206,"line":131},[204,133051,132456],{"class":263},[204,133053,51523],{"class":214},[204,133055,659],{"class":263},[204,133057,51578],{"class":210},[204,133059,132465],{"class":214},[204,133061,132468],{"class":273},[204,133063,133064,133066,133068,133070,133072,133074],{"class":206,"line":1281},[204,133065,132473],{"class":263},[204,133067,51523],{"class":214},[204,133069,913],{"class":263},[204,133071,51578],{"class":210},[204,133073,132482],{"class":214},[204,133075,132485],{"class":273},[204,133077,133078],{"class":206,"line":1287},[204,133079,1651],{"class":214},[23,133081],{"style":25,"src":133082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133084,133085],{},"(6)总结",[352,133087,133088,133103],{},[355,133089,133090],{},[358,133091,133092,133094,133097,133100],{},[361,133093,132426],{"align":23823},[361,133095,133096],{"align":23823},"是否脱标",[361,133098,133099],{"align":23823},"移动位置",[361,133101,133102],{"align":23823},"是否常用",[398,133104,133105,133118,133132,133146,133159],{},[358,133106,133107,133110,133112,133115],{},[403,133108,133109],{"align":23823},"Static 静态定位",[403,133111,104763],{"align":23823},[403,133113,133114],{"align":23823},"不能使用边偏移",[403,133116,133117],{"align":23823},"很少",[358,133119,133120,133123,133126,133129],{},[403,133121,133122],{"align":23823},"Relative 相对定位",[403,133124,133125],{"align":23823},"否(占有位置)",[403,133127,133128],{"align":23823},"相对于自身位置移动",[403,133130,133131],{"align":23823},"基本单独使用",[358,133133,133134,133137,133140,133143],{},[403,133135,133136],{"align":23823},"Absolute 绝对定位",[403,133138,133139],{"align":23823},"是(不占有位置)",[403,133141,133142],{"align":23823},"带有定位的父级",[403,133144,133145],{"align":23823},"要和定位父级元素搭配使用",[358,133147,133148,133151,133153,133156],{},[403,133149,133150],{"align":23823},"Fixed 固定定位",[403,133152,133139],{"align":23823},[403,133154,133155],{"align":23823},"浏览器可视区",[403,133157,133158],{"align":23823},"单独使用,不需要父级",[358,133160,133161,133164,133166,133168],{},[403,133162,133163],{"align":23823},"Sticky 粘性定位",[403,133165,133125],{"align":23823},[403,133167,133155],{"align":23823},[403,133169,133170],{"align":23823},"当前阶段少",[161,133172,133173],{"start":126},[71,133174,133175,133178],{},[30,133176,133177],{},"边偏移"," 则决定了该元素的最终位置",[352,133180,133181,133192],{},[355,133182,133183],{},[358,133184,133185,133188,133190],{},[361,133186,133187],{"align":23823},"边偏移属性",[361,133189,27578],{"align":23823},[361,133191,27575],{"align":23823},[398,133193,133194,133205,133216,133226],{},[358,133195,133196,133199,133202],{},[403,133197,133198],{"align":23823},"top",[403,133200,133201],{"align":23823},"top: 80px;",[403,133203,133204],{"align":23823},"顶端偏移量，定义元素相对于父元素上边线的距离",[358,133206,133207,133210,133213],{},[403,133208,133209],{"align":23823},"bottom",[403,133211,133212],{"align":23823},"bottom: 80px ;",[403,133214,133215],{"align":23823},"底部偏移量，定义元素相对于其父元素下边线的距离",[358,133217,133218,133220,133223],{},[403,133219,23823],{"align":23823},[403,133221,133222],{"align":23823},"left: 80px ;",[403,133224,133225],{"align":23823},"左侧偏移量，定义元素相对于其父元素左边线的距离",[358,133227,133228,133230,133233],{},[403,133229,72608],{"align":23823},[403,133231,133232],{"align":23823},"right: 80px ;",[403,133234,133235],{"align":23823},"右侧偏移量，定义元素相对于其父元素右边线的距离",[68,133237,133238],{},[71,133239,9112,133240,133242,133243,133245,133246,133248,133249,133252,133253,133255,133256,133258],{},[53802,133241],{},"  ① ",[30,133244,133177],{}," 需要和 ",[30,133247,132426],{}," 联合使用， ",[30,133250,133251],{},"单独使用无效"," ；",[53802,133254],{},"  ②top和bottom不要同时使用",[53802,133257],{},"  ③left和right不要同时使用",[22085,133260,133262],{"id":133261},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133264,133265],{},"子级是绝对定位的话，父级要用相对定位",[68,133267,133268,133271,133274,133277],{},[71,133269,133270],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[71,133272,133273],{},"父盒子需要加定位限制子盒子在父盒子内显示",[71,133275,133276],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[71,133278,133279,133280,133283],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[30,133281,133282],{},"子绝父绝"," 也会遇到",[22085,133285,133287],{"id":133286},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[68,133289,133290,133305],{},[71,133291,133292,133293,133296,133297,133300,133301,133304],{},"在使用 ",[30,133294,133295],{},"定位"," 布局时，可能会 ",[30,133298,133299],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[30,133302,133303],{},"z-index"," 来控制盒子的前后次序 (z轴)",[71,133306,5268],{},[196,133308,133309],{"className":126636,"code":132429,"language":126638,"meta":125,"style":125},[81,133310,133311,133317,133329,133343,133357],{"__ignoreMap":125},[204,133312,133313,133315],{"class":206,"line":207},[204,133314,130484],{"class":2049},[204,133316,15659],{"class":214},[204,133318,133319,133321,133323,133325,133327],{"class":206,"line":126},[204,133320,132442],{"class":263},[204,133322,51523],{"class":214},[204,133324,54850],{"class":263},[204,133326,130499],{"class":214},[204,133328,132451],{"class":273},[204,133330,133331,133333,133335,133337,133339,133341],{"class":206,"line":131},[204,133332,132456],{"class":263},[204,133334,51523],{"class":214},[204,133336,659],{"class":263},[204,133338,51578],{"class":210},[204,133340,132465],{"class":214},[204,133342,132468],{"class":273},[204,133344,133345,133347,133349,133351,133353,133355],{"class":206,"line":1281},[204,133346,132473],{"class":263},[204,133348,51523],{"class":214},[204,133350,913],{"class":263},[204,133352,51578],{"class":210},[204,133354,132482],{"class":214},[204,133356,132485],{"class":273},[204,133358,133359],{"class":206,"line":1287},[204,133360,1651],{"class":214},[68,133362,133363],{},[71,133364,133365,133366,133242,133368,133370,133371,127799,133374,82625,133377,133379,133380,133382,133383,133386,133387,133252,133390,133392,133393,133396,133398],{},"z-index的特性",[53802,133367],{},[30,133369,127100],{}," ： ",[30,133372,133373],{},"正整数",[30,133375,133376],{},"负整数",[30,133378,405],{}," ，默认值是 0，数值越大，盒子越靠上；",[53802,133381],{},"  ②如果 ",[30,133384,133385],{},"属性值相同"," ，则按照书写顺序， ",[30,133388,133389],{},"后来居上",[53802,133391],{},"  ③数字后面 ",[30,133394,133395],{},"不能加单位",[53802,133397],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22085,133400,133402],{"id":133401},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133404,133405],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133407,133408],{},"方法:",[68,133410,133411,133421],{},[71,133412,133413,133414,133417,133418],{},"left: 50%; 让 ",[30,133415,133416],{},"盒子的左侧"," 移动到 ",[30,133419,133420],{},"父级元素的水平中心位置",[71,133422,133423,133424,133427,133428],{},"margin-left: -100px; 让盒子 ",[30,133425,133426],{},"向左"," 移动 ",[30,133429,133430],{},"自身宽度的一半",[22085,133432,133434],{"id":133433},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[161,133436,133437,133440],{},[71,133438,133439],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[71,133441,133442],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133444,133445],{},"也就是说绝对定位和固定定位和浮动类似",[161,133447,133448],{"start":131},[71,133449,133450],{},"display 是显示模式， 可以改变显示模式有以下方式:",[68,133452,133453,133456,133459],{},[71,133454,133455],{},"可以用inline-block 转换为行内块",[71,133457,133458],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[71,133460,133461],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133463,133464],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22085,133466,133468],{"id":133467},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[161,133470,133471,133474,133477,133480],{},[71,133472,133473],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[71,133475,133476],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[71,133478,133479],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[71,133481,133482],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[196,133484,133485],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,133486,133487,133493,133503,133507,133513,133523],{"__ignoreMap":125},[204,133488,133489,133491],{"class":206,"line":207},[204,133490,131109],{"class":2049},[204,133492,15659],{"class":214},[204,133494,133495,133497,133499,133501],{"class":206,"line":126},[204,133496,131116],{"class":263},[204,133498,51523],{"class":214},[204,133500,23823],{"class":263},[204,133502,1377],{"class":214},[204,133504,133505],{"class":206,"line":131},[204,133506,1651],{"class":214},[204,133508,133509,133511],{"class":206,"line":1281},[204,133510,131131],{"class":2049},[204,133512,15659],{"class":214},[204,133514,133515,133517,133519,133521],{"class":206,"line":1287},[204,133516,131116],{"class":263},[204,133518,51523],{"class":214},[204,133520,72608],{"class":263},[204,133522,1377],{"class":214},[204,133524,133525],{"class":206,"line":1301},[204,133526,1651],{"class":214},[23,133528],{"style":25,"src":133529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22085,133531,133533],{"id":133532},"_11138-轮播图","11.1.3.8 轮播图",[23,133535],{"style":25,"src":133536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[161,133538,133539],{},[71,133540,133541],{},"制作顺序:",[68,133543,133544,133547,133550,133559],{},[71,133545,133546],{},"大盒子我们类名为： tb-promo 淘宝广告",[71,133548,133549],{},"里面先放一张图片",[71,133551,133552,133553,133555,133556,133558],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53802,133554],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53802,133557],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[71,133560,133561,133562,133564,133565,133567],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53802,133563],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53802,133566],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[161,133569,133570],{"start":126},[71,133571,133572],{},"代码模块",[196,133574,133576],{"className":126636,"code":133575,"language":126638,"meta":125,"style":125},"\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",[81,133577,133578,133583,133590,133600,133610,133620,133624,133629,133636,133646],{"__ignoreMap":125},[204,133579,133580],{"class":206,"line":207},[204,133581,133582],{"class":273},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[204,133584,133585,133588],{"class":206,"line":126},[204,133586,133587],{"class":2049},".son",[204,133589,15659],{"class":214},[204,133591,133592,133594,133596,133598],{"class":206,"line":131},[204,133593,132442],{"class":263},[204,133595,51523],{"class":214},[204,133597,54917],{"class":263},[204,133599,1377],{"class":214},[204,133601,133602,133604,133606,133608],{"class":206,"line":1281},[204,133603,132456],{"class":263},[204,133605,51523],{"class":214},[204,133607,405],{"class":263},[204,133609,1377],{"class":214},[204,133611,133612,133614,133616,133618],{"class":206,"line":1287},[204,133613,132473],{"class":263},[204,133615,51523],{"class":214},[204,133617,405],{"class":263},[204,133619,1377],{"class":214},[204,133621,133622],{"class":206,"line":1301},[204,133623,1651],{"class":214},[204,133625,133626],{"class":206,"line":1307},[204,133627,133628],{"class":273},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[204,133630,133631,133634],{"class":206,"line":1398},[204,133632,133633],{"class":2049},".father",[204,133635,15659],{"class":214},[204,133637,133638,133640,133642,133644],{"class":206,"line":1404},[204,133639,132442],{"class":263},[204,133641,51523],{"class":214},[204,133643,54850],{"class":263},[204,133645,1377],{"class":214},[204,133647,133648],{"class":206,"line":1416},[204,133649,1651],{"class":214},[19,133651,133652],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[49,133654,133656],{"id":133655},"_1114-定位数值的移动","11.1.4 定位数值的移动",[23,133658],{"style":25,"src":133659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133661,133662],{},"✨ 黄金口诀：",[19,133664,133665],{},"\"TOP正下负上，LEFT正右负左\"",[19,133667,133668],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133670,133671],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133673,133674],{},"✨ 简单记：",[19,133676,133677],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5213,133679,133680],{},"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":125,"searchDepth":126,"depth":126,"links":133682},[133683],{"id":132210,"depth":126,"text":132211,"children":133684},[133685,133686,133687,133688],{"id":132214,"depth":131,"text":132215},{"id":132229,"depth":131,"text":132230},{"id":132397,"depth":131,"text":132398},{"id":133655,"depth":131,"text":133656},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132202,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133695,"title":133696,"body":133697,"description":132,"extension":133,"meta":135120,"navigation":135,"path":135121,"seo":135122,"stem":135123,"__hash__":135124},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133698,"toc":135099},[133699,133702,133706,133714,133718,133723,133731,133743,133747,133752,133760,133771,133775,133780,133821,133829,133833,133836,133839,133842,133936,133939,134033,134036,134130,134133,134136,134171,134174,134177,134207,134210,134213,134216,134219,134222,134225,134228,134298,134301,134305,134309,134350,134354,134360,134363,134366,134370,134373,134376,134379,134460,134463,134466,134470,134474,134477,134480,134483,134486,134489,134495,134504,134508,134527,134531,134541,134544,134547,134550,134553,134556,134559,134562,134565,134574,134578,134587,134590,134595,134648,134653,134819,134822,134825,134830,134833,134836,134839,134842,134847,134995,134998,135001,135006,135009,135014,135048,135051,135054,135058,135061,135068,135071,135074,135077,135080,135083,135086,135089,135093,135096],[10,133700,133696],{"id":133701},"_12-显示隐藏与图形资源",[14,133703,133705],{"id":133704},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[68,133707,133708,133711],{},[71,133709,133710],{},"目的:让一个元素在页面中消失或者显示出来",[71,133712,133713],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[49,133715,133717],{"id":133716},"_1211-display-显示","12.1.1 display 显示",[161,133719,133720],{},[71,133721,133722],{},"display 设置或检索对象是否及如何显示",[68,133724,133725,133728],{},[71,133726,133727],{},"display: none;隐藏对象",[71,133729,133730],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[161,133732,133733,133740],{"start":126},[71,133734,133735,133736,133739],{},"特点： display 隐藏元素后， ",[30,133737,133738],{},"不再占"," 有原来的位置",[71,133741,133742],{},"在js中使用非常的广泛",[49,133744,133746],{"id":133745},"_1212-visibility可见性","12.1.2 visibility可见性",[161,133748,133749],{},[71,133750,133751],{},"visibility 属性用于指定一个元素应可见还是隐藏",[68,133753,133754,133757],{},[71,133755,133756],{},"visibility： visible；元素可见",[71,133758,133759],{},"visibility：hidden；元素隐藏",[161,133761,133762,133765,133768],{"start":126},[71,133763,133764],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[71,133766,133767],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[71,133769,133770],{},"隐藏后继续占有原有位置",[49,133772,133774],{"id":133773},"_1213-overflow溢出","12.1.3 overflow溢出",[68,133776,133777],{},[71,133778,133779],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[352,133781,133782,133790],{},[355,133783,133784],{},[358,133785,133786,133788],{},[361,133787,127100],{"align":23823},[361,133789,27575],{"align":23823},[398,133791,133792,133800,133807,133814],{},[358,133793,133794,133797],{},[403,133795,133796],{"align":23823},"visible",[403,133798,133799],{"align":23823},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[358,133801,133802,133804],{},[403,133803,61800],{"align":23823},[403,133805,133806],{"align":23823},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[358,133808,133809,133811],{},[403,133810,129056],{"align":23823},[403,133812,133813],{"align":23823},"不管超出内容否，总是显示滚动条",[358,133815,133816,133818],{},[403,133817,72749],{"align":23823},[403,133819,133820],{"align":23823},"超出自动显示滚动条，不超出不显示滚动条",[68,133822,133823,133826],{},[71,133824,133825],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[71,133827,133828],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[49,133830,133832],{"id":133831},"_1214-案例收获","12.1.4 案例收获",[23,133834],{"style":25,"src":133835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133837,133838],{},"问题：没做出来动态效果，使用hover没实现",[19,133840,133841],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[196,133843,133844],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,133845,133846,133850,133864,133868,133882,133886,133900,133904,133918,133922],{"__ignoreMap":125},[204,133847,133848],{"class":206,"line":207},[204,133849,132075],{"class":273},[204,133851,133852,133854,133856,133858,133860,133862],{"class":206,"line":126},[204,133853,132080],{"class":2049},[204,133855,79893],{"class":214},[204,133857,128996],{"class":263},[204,133859,51523],{"class":214},[204,133861,132089],{"class":263},[204,133863,129566],{"class":214},[204,133865,133866],{"class":206,"line":131},[204,133867,132096],{"class":273},[204,133869,133870,133872,133874,133876,133878,133880],{"class":206,"line":1281},[204,133871,132101],{"class":2049},[204,133873,79893],{"class":214},[204,133875,128996],{"class":263},[204,133877,51523],{"class":214},[204,133879,54850],{"class":263},[204,133881,129566],{"class":214},[204,133883,133884],{"class":206,"line":1287},[204,133885,132116],{"class":273},[204,133887,133888,133890,133892,133894,133896,133898],{"class":206,"line":1301},[204,133889,132121],{"class":2049},[204,133891,79893],{"class":214},[204,133893,128996],{"class":263},[204,133895,51523],{"class":214},[204,133897,54917],{"class":263},[204,133899,129566],{"class":214},[204,133901,133902],{"class":206,"line":1307},[204,133903,132136],{"class":273},[204,133905,133906,133908,133910,133912,133914,133916],{"class":206,"line":1398},[204,133907,132141],{"class":2049},[204,133909,79893],{"class":214},[204,133911,128996],{"class":263},[204,133913,51523],{"class":214},[204,133915,86319],{"class":263},[204,133917,129566],{"class":214},[204,133919,133920],{"class":206,"line":1404},[204,133921,132156],{"class":273},[204,133923,133924,133926,133928,133930,133932,133934],{"class":206,"line":1416},[204,133925,132161],{"class":2049},[204,133927,79893],{"class":214},[204,133929,128996],{"class":263},[204,133931,51523],{"class":214},[204,133933,132170],{"class":263},[204,133935,129566],{"class":214},[19,133937,133938],{},"完整代码：",[196,133940,133941],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,133942,133943,133947,133961,133965,133979,133983,133997,134001,134015,134019],{"__ignoreMap":125},[204,133944,133945],{"class":206,"line":207},[204,133946,132075],{"class":273},[204,133948,133949,133951,133953,133955,133957,133959],{"class":206,"line":126},[204,133950,132080],{"class":2049},[204,133952,79893],{"class":214},[204,133954,128996],{"class":263},[204,133956,51523],{"class":214},[204,133958,132089],{"class":263},[204,133960,129566],{"class":214},[204,133962,133963],{"class":206,"line":131},[204,133964,132096],{"class":273},[204,133966,133967,133969,133971,133973,133975,133977],{"class":206,"line":1281},[204,133968,132101],{"class":2049},[204,133970,79893],{"class":214},[204,133972,128996],{"class":263},[204,133974,51523],{"class":214},[204,133976,54850],{"class":263},[204,133978,129566],{"class":214},[204,133980,133981],{"class":206,"line":1287},[204,133982,132116],{"class":273},[204,133984,133985,133987,133989,133991,133993,133995],{"class":206,"line":1301},[204,133986,132121],{"class":2049},[204,133988,79893],{"class":214},[204,133990,128996],{"class":263},[204,133992,51523],{"class":214},[204,133994,54917],{"class":263},[204,133996,129566],{"class":214},[204,133998,133999],{"class":206,"line":1307},[204,134000,132136],{"class":273},[204,134002,134003,134005,134007,134009,134011,134013],{"class":206,"line":1398},[204,134004,132141],{"class":2049},[204,134006,79893],{"class":214},[204,134008,128996],{"class":263},[204,134010,51523],{"class":214},[204,134012,86319],{"class":263},[204,134014,129566],{"class":214},[204,134016,134017],{"class":206,"line":1404},[204,134018,132156],{"class":273},[204,134020,134021,134023,134025,134027,134029,134031],{"class":206,"line":1416},[204,134022,132161],{"class":2049},[204,134024,79893],{"class":214},[204,134026,128996],{"class":263},[204,134028,51523],{"class":214},[204,134030,132170],{"class":263},[204,134032,129566],{"class":214},[19,134034,134035],{},"分布思路重点详解：",[196,134037,134038],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,134039,134040,134044,134058,134062,134076,134080,134094,134098,134112,134116],{"__ignoreMap":125},[204,134041,134042],{"class":206,"line":207},[204,134043,132075],{"class":273},[204,134045,134046,134048,134050,134052,134054,134056],{"class":206,"line":126},[204,134047,132080],{"class":2049},[204,134049,79893],{"class":214},[204,134051,128996],{"class":263},[204,134053,51523],{"class":214},[204,134055,132089],{"class":263},[204,134057,129566],{"class":214},[204,134059,134060],{"class":206,"line":131},[204,134061,132096],{"class":273},[204,134063,134064,134066,134068,134070,134072,134074],{"class":206,"line":1281},[204,134065,132101],{"class":2049},[204,134067,79893],{"class":214},[204,134069,128996],{"class":263},[204,134071,51523],{"class":214},[204,134073,54850],{"class":263},[204,134075,129566],{"class":214},[204,134077,134078],{"class":206,"line":1287},[204,134079,132116],{"class":273},[204,134081,134082,134084,134086,134088,134090,134092],{"class":206,"line":1301},[204,134083,132121],{"class":2049},[204,134085,79893],{"class":214},[204,134087,128996],{"class":263},[204,134089,51523],{"class":214},[204,134091,54917],{"class":263},[204,134093,129566],{"class":214},[204,134095,134096],{"class":206,"line":1307},[204,134097,132136],{"class":273},[204,134099,134100,134102,134104,134106,134108,134110],{"class":206,"line":1398},[204,134101,132141],{"class":2049},[204,134103,79893],{"class":214},[204,134105,128996],{"class":263},[204,134107,51523],{"class":214},[204,134109,86319],{"class":263},[204,134111,129566],{"class":214},[204,134113,134114],{"class":206,"line":1404},[204,134115,132156],{"class":273},[204,134117,134118,134120,134122,134124,134126,134128],{"class":206,"line":1416},[204,134119,132161],{"class":2049},[204,134121,79893],{"class":214},[204,134123,128996],{"class":263},[204,134125,51523],{"class":214},[204,134127,132170],{"class":263},[204,134129,129566],{"class":214},[23,134131],{"style":25,"src":134132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134134,134135],{},"图片太大，盒子太小，此时需要修改图片的大小",[196,134137,134139],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[81,134140,134141],{"__ignoreMap":125},[204,134142,134143,134145,134147,134149,134151,134154,134156,134158,134161,134164,134166,134169],{"class":206,"line":207},[204,134144,1123],{"class":214},[204,134146,23],{"class":51386},[204,134148,55325],{"class":2049},[204,134150,260],{"class":214},[204,134152,134153],{"class":319},"\"images\u002Fpic.jpg\"",[204,134155,55333],{"class":2049},[204,134157,260],{"class":214},[204,134159,134160],{"class":319},"\"描述文字\"",[204,134162,134163],{"class":2049}," title",[204,134165,260],{"class":214},[204,134167,134168],{"class":319},"\"悬停提示\"",[204,134170,51393],{"class":214},[23,134172],{"style":25,"src":134173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134175,134176],{},"制造遮罩层",[196,134178,134179],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,134180,134181],{"__ignoreMap":125},[204,134182,134183,134185,134187,134189,134191,134193,134195,134197,134199,134201,134203,134205],{"class":206,"line":207},[204,134184,1123],{"class":214},[204,134186,23],{"class":51386},[204,134188,55325],{"class":2049},[204,134190,260],{"class":214},[204,134192,134153],{"class":319},[204,134194,55333],{"class":2049},[204,134196,260],{"class":214},[204,134198,134160],{"class":319},[204,134200,134163],{"class":2049},[204,134202,260],{"class":214},[204,134204,134168],{"class":319},[204,134206,51393],{"class":214},[19,134208,134209],{},"此时是这样的为标准流",[23,134211],{"style":25,"src":134212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134214,134215],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134217,134218],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134220,134221],{},"让他在中间，用center(background-position)",[19,134223,134224],{},"将需要变的尽可能放到一个盒子中",[19,134226,134227],{},"放大盒子上内部盒子发生变化",[196,134229,134231],{"className":126636,"code":134230,"language":126638,"meta":125,"style":125},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[81,134232,134233,134239,134249,134253,134260,134270,134282,134294],{"__ignoreMap":125},[204,134234,134235,134237],{"class":206,"line":207},[204,134236,127703],{"class":2049},[204,134238,15659],{"class":214},[204,134240,134241,134243,134245,134247],{"class":206,"line":126},[204,134242,132442],{"class":263},[204,134244,51523],{"class":214},[204,134246,54850],{"class":263},[204,134248,1377],{"class":214},[204,134250,134251],{"class":206,"line":131},[204,134252,1651],{"class":214},[204,134254,134255,134258],{"class":206,"line":1281},[204,134256,134257],{"class":2049},".child",[204,134259,15659],{"class":214},[204,134261,134262,134264,134266,134268],{"class":206,"line":1287},[204,134263,132442],{"class":263},[204,134265,51523],{"class":214},[204,134267,54917],{"class":263},[204,134269,1377],{"class":214},[204,134271,134272,134274,134276,134278,134280],{"class":206,"line":1301},[204,134273,132456],{"class":263},[204,134275,51523],{"class":214},[204,134277,869],{"class":263},[204,134279,541],{"class":210},[204,134281,1377],{"class":214},[204,134283,134284,134286,134288,134290,134292],{"class":206,"line":1307},[204,134285,132473],{"class":263},[204,134287,51523],{"class":214},[204,134289,869],{"class":263},[204,134291,541],{"class":210},[204,134293,1377],{"class":214},[204,134295,134296],{"class":206,"line":1398},[204,134297,1651],{"class":214},[19,134299,134300],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134302,134304],{"id":134303},"_122-精灵图","12.2 精灵图",[49,134306,134308],{"id":134307},"_1221-理解","12.2.1 理解",[161,134310,134311,134329],{},[71,134312,134313,134314,132542,134317,134320,134321,134324,134325,134328],{},"目的： ",[30,134315,134316],{},"为了有效地减少服务器接收和发送请求的次数",[30,134318,134319],{},"提高"," 页面的 ",[30,134322,134323],{},"加载速度"," ，出现了 ",[30,134326,134327],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[71,134330,134331,134332,134334,134335,134337,134338,134340,134341,134343,134344,134346,134347,134349],{},"使用精灵图核心：",[53802,134333],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53802,134336],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53802,134339],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53802,134342],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53802,134345],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53802,134348],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[49,134351,134353],{"id":134352},"_1222-扒图","12.2.2 扒图",[196,134355,134358],{"className":134356,"code":134357,"language":5274},[5272],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[81,134359,134357],{"__ignoreMap":125},[23,134361],{"style":25,"src":134362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[23,134364],{"style":25,"src":134365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[49,134367,134369],{"id":134368},"_1223-精灵图的实现","12.2.3 精灵图的实现",[23,134371],{"style":25,"src":134372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134374,134375],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[23,134377],{"style":25,"src":134378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[196,134380,134382],{"className":126636,"code":134381,"language":126638,"meta":125,"style":125},"\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",[81,134383,134384,134389,134396,134408,134420,134439,134456],{"__ignoreMap":125},[204,134385,134386],{"class":206,"line":207},[204,134387,134388],{"class":273},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[204,134390,134391,134394],{"class":206,"line":126},[204,134392,134393],{"class":2049},".icon",[204,134395,15659],{"class":214},[204,134397,134398,134400,134402,134404,134406],{"class":206,"line":131},[204,134399,70654],{"class":263},[204,134401,51523],{"class":214},[204,134403,913],{"class":263},[204,134405,51578],{"class":210},[204,134407,1377],{"class":214},[204,134409,134410,134412,134414,134416,134418],{"class":206,"line":1281},[204,134411,70874],{"class":263},[204,134413,51523],{"class":214},[204,134415,913],{"class":263},[204,134417,51578],{"class":210},[204,134419,1377],{"class":214},[204,134421,134422,134424,134426,134428,134430,134433,134435,134437],{"class":206,"line":1287},[204,134423,70697],{"class":263},[204,134425,51523],{"class":214},[204,134427,61812],{"class":263},[204,134429,215],{"class":214},[204,134431,134432],{"class":5303},"sprites.png",[204,134434,13801],{"class":214},[204,134436,61822],{"class":263},[204,134438,1377],{"class":214},[204,134440,134441,134443,134445,134447,134449,134452,134454],{"class":206,"line":1301},[204,134442,128896],{"class":263},[204,134444,51523],{"class":214},[204,134446,51849],{"class":263},[204,134448,51578],{"class":210},[204,134450,134451],{"class":263}," -20",[204,134453,51578],{"class":210},[204,134455,1377],{"class":214},[204,134457,134458],{"class":206,"line":1307},[204,134459,1651],{"class":214},[23,134461],{"style":25,"src":134462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134464,134465],{},"在前端中坐标轴的正方向是右和下",[14,134467,134469],{"id":134468},"_123-字体图标","12.3 字体图标",[49,134471,134473],{"id":134472},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134475,134476],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134478,134479],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134481,134482],{},"1.图片文件还是比较大的。",[19,134484,134485],{},"2.图片本身放大和缩小会失真。",[19,134487,134488],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134490,134491,134492,47],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[30,134493,134494],{},"字体图标 iconfont",[19,134496,134497,134500,134501,28471],{},[30,134498,134499],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[30,134502,134503],{},"展示的是图标，本质属于字体",[49,134505,134507],{"id":134506},"_1232-字体图标的优点","12.3.2 字体图标的优点",[68,134509,134510,134515,134518,134521,134524],{},[71,134511,134512,134514],{},[30,134513,25962],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[71,134516,134517],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[71,134519,134520],{},"兼容性：几乎支持所有的浏览器，请放心使用",[71,134522,134523],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[71,134525,134526],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[49,134528,134530],{"id":134529},"_1233-字体库下载网站","12.3.3 字体库下载网站",[68,134532,134533],{},[71,134534,134535,134536],{},"icomoon字体库：",[62,134537,134540],{"href":134538,"rel":134539},"http:\u002F\u002Ficomoon.io\u002F",[66],"http:\u002F\u002Ficomoon.io",[19,134542,134543],{},"进去之后点icomoon app",[23,134545],{"style":25,"src":134546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134548,134549],{},"可以对其编辑：",[23,134551],{"style":25,"src":134552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134554,134555],{},"生成字体：",[23,134557],{"style":25,"src":134558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134560,134561],{},"下载：",[23,134563],{"style":25,"src":134564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[68,134566,134567],{},[71,134568,134569,134570],{},"阿里iconfont字体库： ",[62,134571,134572],{"href":134572,"rel":134573},"http:\u002F\u002Fwww.iconfont.cn\u002F",[66],[49,134575,134577],{"id":134576},"_1234-字体图标的引入","12.3.4 字体图标的引入",[161,134579,134580],{},[71,134581,134582,134583,134586],{},"把下载包里面的 ",[30,134584,134585],{},"fonts"," 文件夹放入页面根目录下",[23,134588],{"style":25,"src":134589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[161,134591,134592],{"start":126},[71,134593,134594],{},"字体文件格式",[352,134596,134597,134606],{},[355,134598,134599],{},[358,134600,134601,134604],{},[361,134602,134603],{"align":23823},"格式",[361,134605,23827],{"align":23823},[398,134607,134608,134618,134628,134638],{},[358,134609,134610,134615],{},[403,134611,134612],{"align":23823},[30,134613,134614],{},".ttf",[403,134616,134617],{"align":23823},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[358,134619,134620,134625],{},[403,134621,134622],{"align":23823},[30,134623,134624],{},".woff",[403,134626,134627],{"align":23823},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[358,134629,134630,134635],{},[403,134631,134632],{"align":23823},[30,134633,134634],{},".eot",[403,134636,134637],{"align":23823},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[358,134639,134640,134645],{},[403,134641,134642],{"align":23823},[30,134643,134644],{},"svg",[403,134646,134647],{"align":23823},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[161,134649,134650],{"start":131},[71,134651,134652],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[196,134654,134656],{"className":126636,"code":134655,"language":126638,"meta":125,"style":125},"\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",[81,134657,134658,134663,134670,134682,134698,134723,134744,134764,134784,134788,134794,134804,134815],{"__ignoreMap":125},[204,134659,134660],{"class":206,"line":207},[204,134661,134662],{"class":273},"\u002F* 引入字体图标 *\u002F\n",[204,134664,134665,134668],{"class":206,"line":126},[204,134666,134667],{"class":210},"@font-face",[204,134669,15659],{"class":214},[204,134671,134672,134675,134677,134680],{"class":206,"line":131},[204,134673,134674],{"class":263},"  font-family",[204,134676,51523],{"class":214},[204,134678,134679],{"class":319},"'icomoon'",[204,134681,1377],{"class":214},[204,134683,134684,134687,134689,134691,134693,134696],{"class":206,"line":1281},[204,134685,134686],{"class":263},"  src",[204,134688,51523],{"class":214},[204,134690,61812],{"class":263},[204,134692,215],{"class":214},[204,134694,134695],{"class":319},"'fonts\u002Ficomoon.eot'",[204,134697,2805],{"class":214},[204,134699,134700,134702,134704,134706,134708,134711,134713,134716,134718,134721],{"class":206,"line":1287},[204,134701,134686],{"class":263},[204,134703,51523],{"class":214},[204,134705,61812],{"class":263},[204,134707,215],{"class":214},[204,134709,134710],{"class":319},"'fonts\u002Ficomoon.eot?#iefix'",[204,134712,13801],{"class":214},[204,134714,134715],{"class":263},"format",[204,134717,215],{"class":214},[204,134719,134720],{"class":319},"'embedded-opentype'",[204,134722,38133],{"class":214},[204,134724,134725,134728,134730,134733,134735,134737,134739,134742],{"class":206,"line":1301},[204,134726,134727],{"class":263},"       url",[204,134729,215],{"class":214},[204,134731,134732],{"class":319},"'fonts\u002Ficomoon.woff'",[204,134734,13801],{"class":214},[204,134736,134715],{"class":263},[204,134738,215],{"class":214},[204,134740,134741],{"class":319},"'woff'",[204,134743,38133],{"class":214},[204,134745,134746,134748,134750,134753,134755,134757,134759,134762],{"class":206,"line":1307},[204,134747,134727],{"class":263},[204,134749,215],{"class":214},[204,134751,134752],{"class":319},"'fonts\u002Ficomoon.ttf'",[204,134754,13801],{"class":214},[204,134756,134715],{"class":263},[204,134758,215],{"class":214},[204,134760,134761],{"class":319},"'truetype'",[204,134763,38133],{"class":214},[204,134765,134766,134768,134770,134773,134775,134777,134779,134782],{"class":206,"line":1398},[204,134767,134727],{"class":263},[204,134769,215],{"class":214},[204,134771,134772],{"class":319},"'fonts\u002Ficomoon.svg#icomoon'",[204,134774,13801],{"class":214},[204,134776,134715],{"class":263},[204,134778,215],{"class":214},[204,134780,134781],{"class":319},"'svg'",[204,134783,2805],{"class":214},[204,134785,134786],{"class":206,"line":1404},[204,134787,1651],{"class":214},[204,134789,134790,134792],{"class":206,"line":1416},[204,134791,134393],{"class":2049},[204,134793,15659],{"class":214},[204,134795,134796,134798,134800,134802],{"class":206,"line":1698},[204,134797,134674],{"class":263},[204,134799,51523],{"class":214},[204,134801,134679],{"class":319},[204,134803,1377],{"class":214},[204,134805,134806,134809,134811,134813],{"class":206,"line":1703},[204,134807,134808],{"class":263},"  font-style",[204,134810,51523],{"class":214},[204,134812,63927],{"class":263},[204,134814,1377],{"class":214},[204,134816,134817],{"class":206,"line":1709},[204,134818,1651],{"class":214},[19,134820,134821],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[23,134823],{"style":25,"src":134824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[161,134826,134827],{"start":1281},[71,134828,134829],{},"添加字体",[23,134831],{"style":25,"src":134832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134834,134835],{},"复制：",[23,134837],{"style":25,"src":134838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134840,134841],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[161,134843,134844],{"start":1287},[71,134845,134846],{},"代码展示：",[196,134848,134849],{"className":126636,"code":134655,"language":126638,"meta":125,"style":125},[81,134850,134851,134855,134861,134871,134885,134907,134925,134943,134961,134965,134971,134981,134991],{"__ignoreMap":125},[204,134852,134853],{"class":206,"line":207},[204,134854,134662],{"class":273},[204,134856,134857,134859],{"class":206,"line":126},[204,134858,134667],{"class":210},[204,134860,15659],{"class":214},[204,134862,134863,134865,134867,134869],{"class":206,"line":131},[204,134864,134674],{"class":263},[204,134866,51523],{"class":214},[204,134868,134679],{"class":319},[204,134870,1377],{"class":214},[204,134872,134873,134875,134877,134879,134881,134883],{"class":206,"line":1281},[204,134874,134686],{"class":263},[204,134876,51523],{"class":214},[204,134878,61812],{"class":263},[204,134880,215],{"class":214},[204,134882,134695],{"class":319},[204,134884,2805],{"class":214},[204,134886,134887,134889,134891,134893,134895,134897,134899,134901,134903,134905],{"class":206,"line":1287},[204,134888,134686],{"class":263},[204,134890,51523],{"class":214},[204,134892,61812],{"class":263},[204,134894,215],{"class":214},[204,134896,134710],{"class":319},[204,134898,13801],{"class":214},[204,134900,134715],{"class":263},[204,134902,215],{"class":214},[204,134904,134720],{"class":319},[204,134906,38133],{"class":214},[204,134908,134909,134911,134913,134915,134917,134919,134921,134923],{"class":206,"line":1301},[204,134910,134727],{"class":263},[204,134912,215],{"class":214},[204,134914,134732],{"class":319},[204,134916,13801],{"class":214},[204,134918,134715],{"class":263},[204,134920,215],{"class":214},[204,134922,134741],{"class":319},[204,134924,38133],{"class":214},[204,134926,134927,134929,134931,134933,134935,134937,134939,134941],{"class":206,"line":1307},[204,134928,134727],{"class":263},[204,134930,215],{"class":214},[204,134932,134752],{"class":319},[204,134934,13801],{"class":214},[204,134936,134715],{"class":263},[204,134938,215],{"class":214},[204,134940,134761],{"class":319},[204,134942,38133],{"class":214},[204,134944,134945,134947,134949,134951,134953,134955,134957,134959],{"class":206,"line":1398},[204,134946,134727],{"class":263},[204,134948,215],{"class":214},[204,134950,134772],{"class":319},[204,134952,13801],{"class":214},[204,134954,134715],{"class":263},[204,134956,215],{"class":214},[204,134958,134781],{"class":319},[204,134960,2805],{"class":214},[204,134962,134963],{"class":206,"line":1404},[204,134964,1651],{"class":214},[204,134966,134967,134969],{"class":206,"line":1416},[204,134968,134393],{"class":2049},[204,134970,15659],{"class":214},[204,134972,134973,134975,134977,134979],{"class":206,"line":1698},[204,134974,134674],{"class":263},[204,134976,51523],{"class":214},[204,134978,134679],{"class":319},[204,134980,1377],{"class":214},[204,134982,134983,134985,134987,134989],{"class":206,"line":1703},[204,134984,134808],{"class":263},[204,134986,51523],{"class":214},[204,134988,63927],{"class":263},[204,134990,1377],{"class":214},[204,134992,134993],{"class":206,"line":1709},[204,134994,1651],{"class":214},[23,134996],{"style":25,"src":134997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,134999,135000],{},"更加细节展示：",[161,135002,135003],{},[71,135004,135005],{},"html 标签内添加小图标",[23,135007],{"style":25,"src":135008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[161,135010,135011],{"start":126},[71,135012,135013],{},"给标签定义字体",[196,135015,135016],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,135017,135018,135022,135036,135040],{"__ignoreMap":125},[204,135019,135020],{"class":206,"line":207},[204,135021,130747],{"class":273},[204,135023,135024,135026,135028,135030,135032,135034],{"class":206,"line":126},[204,135025,1123],{"class":214},[204,135027,51697],{"class":51386},[204,135029,53572],{"class":2049},[204,135031,260],{"class":214},[204,135033,130760],{"class":319},[204,135035,51393],{"class":214},[204,135037,135038],{"class":206,"line":131},[204,135039,130767],{"class":214},[204,135041,135042,135044,135046],{"class":206,"line":1281},[204,135043,51871],{"class":214},[204,135045,51697],{"class":51386},[204,135047,51393],{"class":214},[19,135049,135050],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[23,135052],{"style":25,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[49,135055,135057],{"id":135056},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135059,135060],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135062,135063,135064,135067],{},"把压缩包里面的 ",[30,135065,135066],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135069,135070],{},"打开网站，点下方：",[23,135072],{"style":25,"src":135073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[23,135075],{"style":25,"src":135076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[23,135078],{"style":25,"src":135079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135081,135082],{},"点yes重新加载",[19,135084,135085],{},"然后重复之前的操作就可以实现了",[19,135087,135088],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[49,135090,135092],{"id":135091},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[23,135094],{"style":25,"src":135095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5213,135097,135098],{},"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":125,"searchDepth":126,"depth":126,"links":135100},[135101,135107,135112],{"id":133704,"depth":126,"text":133705,"children":135102},[135103,135104,135105,135106],{"id":133716,"depth":131,"text":133717},{"id":133745,"depth":131,"text":133746},{"id":133773,"depth":131,"text":133774},{"id":133831,"depth":131,"text":133832},{"id":134303,"depth":126,"text":134304,"children":135108},[135109,135110,135111],{"id":134307,"depth":131,"text":134308},{"id":134352,"depth":131,"text":134353},{"id":134368,"depth":131,"text":134369},{"id":134468,"depth":126,"text":134469,"children":135113},[135114,135115,135116,135117,135118,135119],{"id":134472,"depth":131,"text":134473},{"id":134506,"depth":131,"text":134507},{"id":134529,"depth":131,"text":134530},{"id":134576,"depth":131,"text":134577},{"id":135056,"depth":131,"text":135057},{"id":135091,"depth":131,"text":135092},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133696,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135126,"title":135127,"body":135128,"description":132,"extension":133,"meta":136355,"navigation":135,"path":136356,"seo":136357,"stem":136358,"__hash__":136359},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135129,"toc":136336},[135130,135133,135137,135140,135154,135222,135252,135255,135259,135263,135365,135412,135416,135419,135422,135456,135459,135462,135465,135468,135471,135474,135477,135479,135482,135485,135488,135491,135494,135497,135500,135528,135531,135535,135538,135545,135548,135551,135577,135580,135584,135587,135590,135597,135601,135604,135606,135638,135641,135644,135656,135662,135665,135668,135671,135673,135677,135680,135683,135686,135731,135735,135737,135740,135747,135789,135792,135796,135801,135815,135819,135822,135825,135828,135831,135834,135868,135871,135874,135928,135931,135934,135937,135940,135992,135995,135998,136047,136051,136053,136056,136059,136062,136065,136068,136126,136129,136135,136138,136141,136173,136176,136180,136184,136187,136219,136223,136226,136270,136274,136277,136280,136283,136286,136289,136292,136295,136297,136300,136302,136305,136308,136311,136314,136319,136322,136324,136327,136330,136333],[10,135131,135127],{"id":135132},"_13-界面样式与布局技巧",[14,135134,135136],{"id":135135},"_131-css三角","13.1 css三角",[19,135138,135139],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[68,135141,135142,135145,135148,135151],{},[71,135143,135144],{},"用css 边框可以模拟三角效果",[71,135146,135147],{},"宽度高度为0",[71,135149,135150],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[71,135152,135153],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[196,135155,135157],{"className":126636,"code":135156,"language":126638,"meta":125,"style":125},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[81,135158,135159,135164,135171,135181,135191,135207,135218],{"__ignoreMap":125},[204,135160,135161],{"class":206,"line":207},[204,135162,135163],{"class":273},"\u002F* CSS 实现三角形 *\u002F\n",[204,135165,135166,135169],{"class":206,"line":126},[204,135167,135168],{"class":2049},".triangle",[204,135170,15659],{"class":214},[204,135172,135173,135175,135177,135179],{"class":206,"line":131},[204,135174,70654],{"class":263},[204,135176,51523],{"class":214},[204,135178,405],{"class":263},[204,135180,1377],{"class":214},[204,135182,135183,135185,135187,135189],{"class":206,"line":1281},[204,135184,70874],{"class":263},[204,135186,51523],{"class":214},[204,135188,405],{"class":263},[204,135190,1377],{"class":214},[204,135192,135193,135195,135197,135199,135201,135203,135205],{"class":206,"line":1287},[204,135194,70982],{"class":263},[204,135196,51523],{"class":214},[204,135198,659],{"class":263},[204,135200,51578],{"class":210},[204,135202,51607],{"class":263},[204,135204,64077],{"class":263},[204,135206,1377],{"class":214},[204,135208,135209,135212,135214,135216],{"class":206,"line":1301},[204,135210,135211],{"class":263},"  border-bottom-color",[204,135213,51523],{"class":214},[204,135215,62455],{"class":263},[204,135217,1377],{"class":214},[204,135219,135220],{"class":206,"line":1307},[204,135221,1651],{"class":214},[196,135223,135224],{"className":126636,"code":130793,"language":126638,"meta":125,"style":125},[81,135225,135226,135232,135248],{"__ignoreMap":125},[204,135227,135228,135230],{"class":206,"line":207},[204,135229,51697],{"class":51386},[204,135231,15659],{"class":214},[204,135233,135234,135236,135238,135240,135242,135244,135246],{"class":206,"line":126},[204,135235,70982],{"class":263},[204,135237,51523],{"class":214},[204,135239,431],{"class":263},[204,135241,51578],{"class":210},[204,135243,51607],{"class":263},[204,135245,130028],{"class":263},[204,135247,1377],{"class":214},[204,135249,135250],{"class":206,"line":131},[204,135251,1651],{"class":214},[23,135253],{"style":25,"src":135254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135256,135258],{"id":135257},"_132-css用户界面样式","13.2 css用户界面样式",[49,135260,135262],{"id":135261},"_1321-鼠标样式","13.2.1 鼠标样式",[196,135264,135266],{"className":126636,"code":135265,"language":126638,"meta":125,"style":125},"\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",[81,135267,135268,135273,135292,135310,135329,135346],{"__ignoreMap":125},[204,135269,135270],{"class":206,"line":207},[204,135271,135272],{"class":273},"\u002F* 鼠标样式 *\u002F\n",[204,135274,135275,135277,135279,135282,135284,135286,135289],{"class":206,"line":126},[204,135276,51697],{"class":51386},[204,135278,79893],{"class":214},[204,135280,135281],{"class":263},"cursor",[204,135283,51523],{"class":214},[204,135285,62116],{"class":263},[204,135287,135288],{"class":214},"; }   ",[204,135290,135291],{"class":273},"\u002F* 手型 *\u002F\n",[204,135293,135294,135296,135298,135300,135302,135305,135307],{"class":206,"line":131},[204,135295,51697],{"class":51386},[204,135297,79893],{"class":214},[204,135299,135281],{"class":263},[204,135301,51523],{"class":214},[204,135303,135304],{"class":263},"default",[204,135306,135288],{"class":214},[204,135308,135309],{"class":273},"\u002F* 默认 *\u002F\n",[204,135311,135312,135314,135316,135318,135320,135323,135326],{"class":206,"line":1281},[204,135313,51697],{"class":51386},[204,135315,79893],{"class":214},[204,135317,135281],{"class":263},[204,135319,51523],{"class":214},[204,135321,135322],{"class":263},"move",[204,135324,135325],{"class":214},"; }      ",[204,135327,135328],{"class":273},"\u002F* 移动 *\u002F\n",[204,135330,135331,135333,135335,135337,135339,135341,135343],{"class":206,"line":1287},[204,135332,51697],{"class":51386},[204,135334,79893],{"class":214},[204,135336,135281],{"class":263},[204,135338,51523],{"class":214},[204,135340,5274],{"class":263},[204,135342,135325],{"class":214},[204,135344,135345],{"class":273},"\u002F* 文本 *\u002F\n",[204,135347,135348,135350,135352,135354,135356,135359,135362],{"class":206,"line":1301},[204,135349,51697],{"class":51386},[204,135351,79893],{"class":214},[204,135353,135281],{"class":263},[204,135355,51523],{"class":214},[204,135357,135358],{"class":263},"not-allowed",[204,135360,135361],{"class":214},"; } ",[204,135363,135364],{"class":273},"\u002F* 禁止 *\u002F\n",[352,135366,135367,135375],{},[355,135368,135369],{},[358,135370,135371,135373],{},[361,135372,127100],{"align":23823},[361,135374,27575],{"align":23823},[398,135376,135377,135384,135391,135398,135405],{},[358,135378,135379,135381],{},[403,135380,135304],{"align":23823},[403,135382,135383],{"align":23823},"小白 默认",[358,135385,135386,135388],{},[403,135387,62116],{"align":23823},[403,135389,135390],{"align":23823},"小手",[358,135392,135393,135395],{},[403,135394,135322],{"align":23823},[403,135396,135397],{"align":23823},"移动",[358,135399,135400,135402],{},[403,135401,5274],{"align":23823},[403,135403,135404],{"align":23823},"文本",[358,135406,135407,135409],{},[403,135408,135358],{"align":23823},[403,135410,135411],{"align":23823},"禁止",[49,135413,135415],{"id":135414},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135417,135418],{},"去除表单轮廓线",[19,135420,135421],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[196,135423,135424],{"className":126636,"code":130000,"language":126638,"meta":125,"style":125},[81,135425,135426,135430,135436,135452],{"__ignoreMap":125},[204,135427,135428],{"class":206,"line":207},[204,135429,130007],{"class":273},[204,135431,135432,135434],{"class":206,"line":126},[204,135433,51697],{"class":51386},[204,135435,15659],{"class":214},[204,135437,135438,135440,135442,135444,135446,135448,135450],{"class":206,"line":131},[204,135439,70982],{"class":263},[204,135441,51523],{"class":214},[204,135443,431],{"class":263},[204,135445,51578],{"class":210},[204,135447,51607],{"class":263},[204,135449,130028],{"class":263},[204,135451,1377],{"class":214},[204,135453,135454],{"class":206,"line":1281},[204,135455,1651],{"class":214},[19,135457,135458],{},"文本域：",[23,135460],{"style":25,"src":135461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135463,135464],{},"此时会有一个空白区域",[23,135466],{"style":25,"src":135467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135469,135470],{},"写在同一行就不会出现这个问题",[23,135472],{"style":25,"src":135473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135475,135476],{},"文本域是行内块元素，一定记住！！！",[19,135478,98319],{},[23,135480],{"style":25,"src":135481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135483,135484],{},"文本域尽量放在一行",[19,135486,135487],{},"知识回顾：cols是列，rols是行",[23,135489],{"style":25,"src":135490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135492,135493],{},"它可以进行拖动，显然这是我们不愿意看到的",[23,135495],{"style":25,"src":135496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135498,135499],{},"使用resize进行解决",[196,135501,135503],{"className":126636,"code":135502,"language":126638,"meta":125,"style":125},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[81,135504,135505,135511,135524],{"__ignoreMap":125},[204,135506,135507,135509],{"class":206,"line":207},[204,135508,53907],{"class":51386},[204,135510,15659],{"class":214},[204,135512,135513,135515,135517,135519,135521],{"class":206,"line":126},[204,135514,70884],{"class":263},[204,135516,51523],{"class":214},[204,135518,54823],{"class":263},[204,135520,130499],{"class":214},[204,135522,135523],{"class":273},"\u002F* 取消表单轮廓线 *\u002F\n",[204,135525,135526],{"class":206,"line":131},[204,135527,1651],{"class":214},[19,135529,135530],{},"此时就无法通过右下方实现拖动了",[49,135532,135534],{"id":135533},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135536,135537],{},"实现一个盒子中的文字和图片对齐",[19,135539,135540,135541,135544],{},"用于设置一个元素的 ",[30,135542,135543],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135546,135547],{},"图片和文字默认是基线对齐",[23,135549],{"style":25,"src":135550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[196,135552,135553],{"className":126636,"code":135502,"language":126638,"meta":125,"style":125},[81,135554,135555,135561,135573],{"__ignoreMap":125},[204,135556,135557,135559],{"class":206,"line":207},[204,135558,53907],{"class":51386},[204,135560,15659],{"class":214},[204,135562,135563,135565,135567,135569,135571],{"class":206,"line":126},[204,135564,70884],{"class":263},[204,135566,51523],{"class":214},[204,135568,54823],{"class":263},[204,135570,130499],{"class":214},[204,135572,135523],{"class":273},[204,135574,135575],{"class":206,"line":131},[204,135576,1651],{"class":214},[23,135578],{"style":25,"src":135579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22085,135581,135583],{"id":135582},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135585,135586],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[23,135588],{"style":25,"src":135589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135591,135592,135593,135596],{},"此时可以给图片、表单这些行内块元素的 ",[30,135594,135595],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22085,135598,135600],{"id":135599},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135602,135603],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135605,14720],{},[196,135607,135609],{"className":126636,"code":135608,"language":126638,"meta":125,"style":125},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[81,135610,135611,135616,135622,135634],{"__ignoreMap":125},[204,135612,135613],{"class":206,"line":207},[204,135614,135615],{"class":273},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[204,135617,135618,135620],{"class":206,"line":126},[204,135619,23],{"class":51386},[204,135621,15659],{"class":214},[204,135623,135624,135627,135629,135632],{"class":206,"line":131},[204,135625,135626],{"class":263},"  vertical-align",[204,135628,51523],{"class":214},[204,135630,135631],{"class":263},"middle",[204,135633,1377],{"class":214},[204,135635,135636],{"class":206,"line":1281},[204,135637,1651],{"class":214},[23,135639],{"style":25,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135642,135643],{},"主要解决方法有两种：",[161,135645,135646],{},[71,135647,135648,135651,135652,135655],{},[30,135649,135650],{},"给图片"," 添加 ",[30,135653,135654],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135657,135658,135659],{},"2.把图片转换为块级元素 ",[30,135660,135661],{},"display: block",[19,135663,135664],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135666,135667],{},"img {",[19,135669,135670],{},"vertical-align:middle;",[19,135672,1159],{},[49,135674,135676],{"id":135675},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135678,135679],{},"效果：",[23,135681],{"style":25,"src":135682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135684,135685],{},"单行文本溢出显示省略号--必须满足三个条件：",[196,135687,135689],{"className":126636,"code":135688,"language":126638,"meta":125,"style":125},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[81,135690,135691,135696,135702,135712,135717,135727],{"__ignoreMap":125},[204,135692,135693],{"class":206,"line":207},[204,135694,135695],{"class":273},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[204,135697,135698,135700],{"class":206,"line":126},[204,135699,23],{"class":51386},[204,135701,15659],{"class":214},[204,135703,135704,135706,135708,135710],{"class":206,"line":131},[204,135705,135626],{"class":263},[204,135707,51523],{"class":214},[204,135709,135631],{"class":263},[204,135711,1377],{"class":214},[204,135713,135714],{"class":206,"line":1281},[204,135715,135716],{"class":273},"  \u002F* 或 *\u002F\n",[204,135718,135719,135721,135723,135725],{"class":206,"line":1287},[204,135720,128252],{"class":263},[204,135722,51523],{"class":214},[204,135724,60955],{"class":263},[204,135726,1377],{"class":214},[204,135728,135729],{"class":206,"line":1301},[204,135730,1651],{"class":214},[49,135732,135734],{"id":135733},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135736,135679],{},[23,135738],{"style":25,"src":135739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135741,135742,135743,135746],{},"多行文本溢出显示省略号， ",[30,135744,135745],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[196,135748,135749],{"className":126636,"code":135688,"language":126638,"meta":125,"style":125},[81,135750,135751,135755,135761,135771,135775,135785],{"__ignoreMap":125},[204,135752,135753],{"class":206,"line":207},[204,135754,135695],{"class":273},[204,135756,135757,135759],{"class":206,"line":126},[204,135758,23],{"class":51386},[204,135760,15659],{"class":214},[204,135762,135763,135765,135767,135769],{"class":206,"line":131},[204,135764,135626],{"class":263},[204,135766,51523],{"class":214},[204,135768,135631],{"class":263},[204,135770,1377],{"class":214},[204,135772,135773],{"class":206,"line":1281},[204,135774,135716],{"class":273},[204,135776,135777,135779,135781,135783],{"class":206,"line":1287},[204,135778,128252],{"class":263},[204,135780,51523],{"class":214},[204,135782,60955],{"class":263},[204,135784,1377],{"class":214},[204,135786,135787],{"class":206,"line":1301},[204,135788,1651],{"class":214},[19,135790,135791],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135793,135795],{"id":135794},"_133-常见布局技巧","13.3 常见布局技巧",[19,135797,135798],{},[30,135799,135800],{},"巧妙利用一个技术更快更好的布局：",[161,135802,135803,135806,135809,135812],{},[71,135804,135805],{},"margin负值的运用",[71,135807,135808],{},"文字围绕浮动元素",[71,135810,135811],{},"行内块的巧妙运用",[71,135813,135814],{},"CSS三角强化",[49,135816,135818],{"id":135817},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135820,135821],{},"应用场景：",[23,135823],{"style":25,"src":135824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[23,135826],{"style":25,"src":135827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135829,135830],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135832,135833],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[196,135835,135836],{"className":126636,"code":130000,"language":126638,"meta":125,"style":125},[81,135837,135838,135842,135848,135864],{"__ignoreMap":125},[204,135839,135840],{"class":206,"line":207},[204,135841,130007],{"class":273},[204,135843,135844,135846],{"class":206,"line":126},[204,135845,51697],{"class":51386},[204,135847,15659],{"class":214},[204,135849,135850,135852,135854,135856,135858,135860,135862],{"class":206,"line":131},[204,135851,70982],{"class":263},[204,135853,51523],{"class":214},[204,135855,431],{"class":263},[204,135857,51578],{"class":210},[204,135859,51607],{"class":263},[204,135861,130028],{"class":263},[204,135863,1377],{"class":214},[204,135865,135866],{"class":206,"line":1281},[204,135867,1651],{"class":214},[23,135869],{"style":25,"src":135870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135872,135873],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[196,135875,135877],{"className":126636,"code":135876,"language":126638,"meta":125,"style":125},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[81,135878,135879,135884,135890,135900,135912,135924],{"__ignoreMap":125},[204,135880,135881],{"class":206,"line":207},[204,135882,135883],{"class":273},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[204,135885,135886,135888],{"class":206,"line":126},[204,135887,130484],{"class":2049},[204,135889,15659],{"class":214},[204,135891,135892,135894,135896,135898],{"class":206,"line":131},[204,135893,132442],{"class":263},[204,135895,51523],{"class":214},[204,135897,54850],{"class":263},[204,135899,1377],{"class":214},[204,135901,135902,135904,135906,135908,135910],{"class":206,"line":1281},[204,135903,132456],{"class":263},[204,135905,51523],{"class":214},[204,135907,659],{"class":263},[204,135909,51578],{"class":210},[204,135911,1377],{"class":214},[204,135913,135914,135916,135918,135920,135922],{"class":206,"line":1287},[204,135915,132473],{"class":263},[204,135917,51523],{"class":214},[204,135919,913],{"class":263},[204,135921,51578],{"class":210},[204,135923,1377],{"class":214},[204,135925,135926],{"class":206,"line":1301},[204,135927,1651],{"class":214},[19,135929,135930],{},"加上上述代码会发现：",[23,135932],{"style":25,"src":135933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135935,135936],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135938,135939],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[196,135941,135942],{"className":126636,"code":135876,"language":126638,"meta":125,"style":125},[81,135943,135944,135948,135954,135964,135976,135988],{"__ignoreMap":125},[204,135945,135946],{"class":206,"line":207},[204,135947,135883],{"class":273},[204,135949,135950,135952],{"class":206,"line":126},[204,135951,130484],{"class":2049},[204,135953,15659],{"class":214},[204,135955,135956,135958,135960,135962],{"class":206,"line":131},[204,135957,132442],{"class":263},[204,135959,51523],{"class":214},[204,135961,54850],{"class":263},[204,135963,1377],{"class":214},[204,135965,135966,135968,135970,135972,135974],{"class":206,"line":1281},[204,135967,132456],{"class":263},[204,135969,51523],{"class":214},[204,135971,659],{"class":263},[204,135973,51578],{"class":210},[204,135975,1377],{"class":214},[204,135977,135978,135980,135982,135984,135986],{"class":206,"line":1287},[204,135979,132473],{"class":263},[204,135981,51523],{"class":214},[204,135983,913],{"class":263},[204,135985,51578],{"class":210},[204,135987,1377],{"class":214},[204,135989,135990],{"class":206,"line":1301},[204,135991,1651],{"class":214},[19,135993,135994],{},"解决方式2：",[19,135996,135997],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[196,135999,136001],{"className":126636,"code":136000,"language":126638,"meta":125,"style":125},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[81,136002,136003,136009,136019,136031,136043],{"__ignoreMap":125},[204,136004,136005,136007],{"class":206,"line":207},[204,136006,51697],{"class":51386},[204,136008,15659],{"class":214},[204,136010,136011,136013,136015,136017],{"class":206,"line":126},[204,136012,132442],{"class":263},[204,136014,51523],{"class":214},[204,136016,54850],{"class":263},[204,136018,1377],{"class":214},[204,136020,136021,136023,136025,136027,136029],{"class":206,"line":131},[204,136022,132456],{"class":263},[204,136024,51523],{"class":214},[204,136026,659],{"class":263},[204,136028,51578],{"class":210},[204,136030,1377],{"class":214},[204,136032,136033,136035,136037,136039,136041],{"class":206,"line":1281},[204,136034,132473],{"class":263},[204,136036,51523],{"class":214},[204,136038,913],{"class":263},[204,136040,51578],{"class":210},[204,136042,1377],{"class":214},[204,136044,136045],{"class":206,"line":1287},[204,136046,1651],{"class":214},[49,136048,136050],{"id":136049},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136052,135821],{},[23,136054],{"style":25,"src":136055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136057,136058],{},"实现结构图：",[23,136060],{"style":25,"src":136061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136063,136064],{},"巧妙运用浮动元素不会压住文字的特性",[19,136066,136067],{},"代码显示：",[196,136069,136071],{"className":126636,"code":136070,"language":126638,"meta":125,"style":125},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[81,136072,136073,136079,136089,136093,136098,136102,136108,136122],{"__ignoreMap":125},[204,136074,136075,136077],{"class":206,"line":207},[204,136076,130484],{"class":2049},[204,136078,15659],{"class":214},[204,136080,136081,136083,136085,136087],{"class":206,"line":126},[204,136082,131116],{"class":263},[204,136084,51523],{"class":214},[204,136086,23823],{"class":263},[204,136088,1377],{"class":214},[204,136090,136091],{"class":206,"line":131},[204,136092,1651],{"class":214},[204,136094,136095],{"class":206,"line":1281},[204,136096,136097],{"class":214},"```Css\n",[204,136099,136100],{"class":206,"line":1287},[204,136101,130479],{"class":273},[204,136103,136104,136106],{"class":206,"line":1301},[204,136105,130484],{"class":2049},[204,136107,15659],{"class":214},[204,136109,136110,136112,136114,136116,136118,136120],{"class":206,"line":1307},[204,136111,70556],{"class":263},[204,136113,51523],{"class":214},[204,136115,405],{"class":263},[204,136117,51642],{"class":263},[204,136119,130499],{"class":214},[204,136121,130502],{"class":273},[204,136123,136124],{"class":206,"line":1398},[204,136125,1651],{"class":214},[19,136127,136128],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[196,136130,136133],{"className":136131,"code":136132,"language":5274},[5272],"\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",[81,136134,136132],{"__ignoreMap":125},[23,136136],{"style":25,"src":136137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136139,136140],{},"最终展示结果：",[196,136142,136143],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,136144,136145,136149,136155,136169],{"__ignoreMap":125},[204,136146,136147],{"class":206,"line":207},[204,136148,130479],{"class":273},[204,136150,136151,136153],{"class":206,"line":126},[204,136152,130484],{"class":2049},[204,136154,15659],{"class":214},[204,136156,136157,136159,136161,136163,136165,136167],{"class":206,"line":131},[204,136158,70556],{"class":263},[204,136160,51523],{"class":214},[204,136162,405],{"class":263},[204,136164,51642],{"class":263},[204,136166,130499],{"class":214},[204,136168,130502],{"class":273},[204,136170,136171],{"class":206,"line":1281},[204,136172,1651],{"class":214},[23,136174],{"style":25,"src":136175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136177,136179],{"id":136178},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[49,136181,136183],{"id":136182},"_1341-原理","13.4.1 原理",[23,136185],{"style":25,"src":136186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[196,136188,136189],{"className":126636,"code":130472,"language":126638,"meta":125,"style":125},[81,136190,136191,136195,136201,136215],{"__ignoreMap":125},[204,136192,136193],{"class":206,"line":207},[204,136194,130479],{"class":273},[204,136196,136197,136199],{"class":206,"line":126},[204,136198,130484],{"class":2049},[204,136200,15659],{"class":214},[204,136202,136203,136205,136207,136209,136211,136213],{"class":206,"line":131},[204,136204,70556],{"class":263},[204,136206,51523],{"class":214},[204,136208,405],{"class":263},[204,136210,51642],{"class":263},[204,136212,130499],{"class":214},[204,136214,130502],{"class":273},[204,136216,136217],{"class":206,"line":1281},[204,136218,1651],{"class":214},[49,136220,136222],{"id":136221},"_1342-实例","13.4.2 实例",[23,136224],{"style":25,"src":136225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[196,136227,136228],{"className":126636,"code":131102,"language":126638,"meta":125,"style":125},[81,136229,136230,136236,136246,136250,136256,136266],{"__ignoreMap":125},[204,136231,136232,136234],{"class":206,"line":207},[204,136233,131109],{"class":2049},[204,136235,15659],{"class":214},[204,136237,136238,136240,136242,136244],{"class":206,"line":126},[204,136239,131116],{"class":263},[204,136241,51523],{"class":214},[204,136243,23823],{"class":263},[204,136245,1377],{"class":214},[204,136247,136248],{"class":206,"line":131},[204,136249,1651],{"class":214},[204,136251,136252,136254],{"class":206,"line":1281},[204,136253,131131],{"class":2049},[204,136255,15659],{"class":214},[204,136257,136258,136260,136262,136264],{"class":206,"line":1287},[204,136259,131116],{"class":263},[204,136261,51523],{"class":214},[204,136263,72608],{"class":263},[204,136265,1377],{"class":214},[204,136267,136268],{"class":206,"line":1301},[204,136269,1651],{"class":214},[14,136271,136273],{"id":136272},"_135-css的初始化","13.5 css的初始化",[19,136275,136276],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136278,136279],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136281,136282],{},"每个网页都必须首先进行 CSS初始化。",[19,136284,136285],{},"这里我们以 京东CSS初始化代码为例。",[19,136287,136288],{},"在网页右键查看网页源代码",[19,136290,136291],{},"找到css的link引入语句",[19,136293,136294],{},"然后ctrl+f 输入body",[19,136296,77312],{},[23,136298],{"style":25,"src":136299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136301,77335],{},[23,136303],{"style":25,"src":136304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136306,136307],{},"③打开了网页上传压缩的代码",[23,136309],{"style":25,"src":136310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136312,136313],{},"④从body前可以查看这个网页的初始化代码",[19,136315,136316],{},[30,136317,136318],{},"Unicode编码字体：",[19,136320,136321],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136323,83293],{},[19,136325,136326],{},"黑体 \\9ED1\\4F53",[19,136328,136329],{},"宋体 \\5B8B\\4F53",[19,136331,136332],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5213,136334,136335],{},"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":125,"searchDepth":126,"depth":126,"links":136337},[136338,136339,136346,136350,136354],{"id":135135,"depth":126,"text":135136},{"id":135257,"depth":126,"text":135258,"children":136340},[136341,136342,136343,136344,136345],{"id":135261,"depth":131,"text":135262},{"id":135414,"depth":131,"text":135415},{"id":135533,"depth":131,"text":135534},{"id":135675,"depth":131,"text":135676},{"id":135733,"depth":131,"text":135734},{"id":135794,"depth":126,"text":135795,"children":136347},[136348,136349],{"id":135817,"depth":131,"text":135818},{"id":136049,"depth":131,"text":136050},{"id":136178,"depth":126,"text":136179,"children":136351},[136352,136353],{"id":136182,"depth":131,"text":136183},{"id":136221,"depth":131,"text":136222},{"id":136272,"depth":126,"text":136273},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135127,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136361,"title":136362,"body":136363,"description":132,"extension":133,"meta":138049,"navigation":135,"path":138050,"seo":138051,"stem":138052,"__hash__":138053},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136364,"toc":138038},[136365,136368,136372,136376,136379,136386,136389,136392,136430,136433,136435,136449,136453,136462,136466,136471,136474,136477,136480,136515,136520,136523,136553,136556,136561,136564,136567,136597,136600,136654,136657,136661,136666,136678,136681,136685,136715,136718,136723,136726,136756,136759,136763,136780,136784,136788,136791,136824,136827,136831,136834,136837,136840,136843,136846,136957,136960,136963,136966,137068,137071,137075,137079,137083,137086,137126,137129,137131,137147,137151,137154,137159,137240,137243,137246,137372,137377,137380,137388,137391,137396,137481,137484,137488,137491,137494,137498,137518,137523,137607,137610,137615,137618,137621,137699,137702,137705,137708,137711,137714,137719,137722,137725,137797,137800,137805,137808,137905,137908,137914,137917,137920,137923,137926,137929,137932,137935,137938,137942,137947,137950,137983,137988,137991,138032,138035],[10,136366,136362],{"id":136367},"_14-html5与css3新特性",[14,136369,136371],{"id":136370},"_141-html5的新特性","14.1 HTML5的新特性",[49,136373,136375],{"id":136374},"_1411-基本标签","14.1.1 基本标签",[19,136377,136378],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136380,136381,136382,136385],{},"这些新特性都有兼容性问题，基本是 ",[30,136383,136384],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136387,136388],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136390,136391],{},"现在使用的是新特性：",[68,136393,136394,136400,136406,136412,136418,136424],{},[71,136395,136396,136399],{},[81,136397,136398],{},"\u003Cheader>"," 头部标签",[71,136401,136402,136405],{},[81,136403,136404],{},"\u003Cnav>"," 导航标签",[71,136407,136408,136411],{},[81,136409,136410],{},"\u003Carticle>"," 内容标签",[71,136413,136414,136417],{},[81,136415,136416],{},"\u003Csection>"," 定义文档某个区域",[71,136419,136420,136423],{},[81,136421,136422],{},"\u003Caside>"," 侧边栏标签",[71,136425,136426,136429],{},[81,136427,136428],{},"\u003Cfooter>"," 尾部标签",[23,136431],{"style":25,"src":136432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136434,244],{},[68,136436,136437,136440,136443,136446],{},[71,136438,136439],{},"这种语义化标准主要是针对搜索引擎的",[71,136441,136442],{},"这些标签页面中可以经常使用",[71,136444,136445],{},"在IE9中，需要把这些元素转换为块级元素",[71,136447,136448],{},"移动端更喜欢使用这些标签",[49,136450,136452],{"id":136451},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136454,136455,136456,136458,136459,136461],{},"音频 ",[30,136457,28260],{}," 和视频 ",[30,136460,28269],{}," 两个标签",[22085,136463,136465],{"id":136464},"_14121-视频标签-video","14.1.2.1 视频标签- video",[161,136467,136468],{},[71,136469,136470],{},"支持格式：",[23,136472],{"style":25,"src":136473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136475,136476],{},"尽量使用MP4，兼容性好",[19,136478,136479],{},"用MP4就可以",[196,136481,136483],{"className":127383,"code":136482,"language":127385,"meta":125,"style":125},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[81,136484,136485],{"__ignoreMap":125},[204,136486,136487,136489,136491,136493,136495,136498,136500,136503,136506,136509,136511,136513],{"class":206,"line":207},[204,136488,1123],{"class":214},[204,136490,28269],{"class":51386},[204,136492,55325],{"class":2049},[204,136494,260],{"class":214},[204,136496,136497],{"class":319},"\"movie.mp4\"",[204,136499,92509],{"class":2049},[204,136501,136502],{"class":2049}," autoplay",[204,136504,136505],{"class":2049}," muted",[204,136507,136508],{"class":2049}," loop",[204,136510,55400],{"class":214},[204,136512,28269],{"class":51386},[204,136514,51393],{"class":214},[161,136516,136517],{"start":126},[71,136518,136519],{},"兼容写法",[19,136521,136522],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[196,136524,136525],{"className":127383,"code":136482,"language":127385,"meta":125,"style":125},[81,136526,136527],{"__ignoreMap":125},[204,136528,136529,136531,136533,136535,136537,136539,136541,136543,136545,136547,136549,136551],{"class":206,"line":207},[204,136530,1123],{"class":214},[204,136532,28269],{"class":51386},[204,136534,55325],{"class":2049},[204,136536,260],{"class":214},[204,136538,136497],{"class":319},[204,136540,92509],{"class":2049},[204,136542,136502],{"class":2049},[204,136544,136505],{"class":2049},[204,136546,136508],{"class":2049},[204,136548,55400],{"class":214},[204,136550,28269],{"class":51386},[204,136552,51393],{"class":214},[19,136554,136555],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[161,136557,136558],{"start":131},[71,136559,136560],{},"video常用属性",[23,136562],{"style":25,"src":136563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136565,136566],{},"poster属性后面是跟的等待加载图片的地址",[196,136568,136569],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,136570,136571],{"__ignoreMap":125},[204,136572,136573,136575,136577,136579,136581,136583,136585,136587,136589,136591,136593,136595],{"class":206,"line":207},[204,136574,1123],{"class":214},[204,136576,23],{"class":51386},[204,136578,55325],{"class":2049},[204,136580,260],{"class":214},[204,136582,134153],{"class":319},[204,136584,55333],{"class":2049},[204,136586,260],{"class":214},[204,136588,134160],{"class":319},[204,136590,134163],{"class":2049},[204,136592,260],{"class":214},[204,136594,134168],{"class":319},[204,136596,51393],{"class":214},[19,136598,136599],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[196,136601,136603],{"className":126636,"code":136602,"language":126638,"meta":125,"style":125},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[81,136604,136605,136610,136616,136640,136645,136650],{"__ignoreMap":125},[204,136606,136607],{"class":206,"line":207},[204,136608,136609],{"class":273},"\u002F* 2D 位移 *\u002F\n",[204,136611,136612,136614],{"class":206,"line":126},[204,136613,51697],{"class":51386},[204,136615,15659],{"class":214},[204,136617,136618,136621,136623,136626,136628,136630,136632,136634,136636,136638],{"class":206,"line":131},[204,136619,136620],{"class":263},"  transform",[204,136622,51523],{"class":214},[204,136624,136625],{"class":263},"translate",[204,136627,215],{"class":214},[204,136629,524],{"class":263},[204,136631,51578],{"class":210},[204,136633,12522],{"class":214},[204,136635,869],{"class":263},[204,136637,51578],{"class":210},[204,136639,2805],{"class":214},[204,136641,136642],{"class":206,"line":1281},[204,136643,136644],{"class":273},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[204,136646,136647],{"class":206,"line":1287},[204,136648,136649],{"class":273},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[204,136651,136652],{"class":206,"line":1301},[204,136653,1651],{"class":214},[19,136655,136656],{},"muted:自动静音属性",[22085,136658,136660],{"id":136659},"_14122-音频标签audio","14.1.2.2 音频标签audio",[161,136662,136663],{},[71,136664,136665],{},"基本使用",[19,136667,136668,136669,136674,136675],{},"当前 ",[30,136670,136671],{},[81,136672,136673],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[30,136676,136677],{},"mp3格式",[23,136679],{"style":25,"src":136680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[161,136682,136683],{"start":126},[71,136684,136519],{},[196,136686,136687],{"className":127383,"code":136482,"language":127385,"meta":125,"style":125},[81,136688,136689],{"__ignoreMap":125},[204,136690,136691,136693,136695,136697,136699,136701,136703,136705,136707,136709,136711,136713],{"class":206,"line":207},[204,136692,1123],{"class":214},[204,136694,28269],{"class":51386},[204,136696,55325],{"class":2049},[204,136698,260],{"class":214},[204,136700,136497],{"class":319},[204,136702,92509],{"class":2049},[204,136704,136502],{"class":2049},[204,136706,136505],{"class":2049},[204,136708,136508],{"class":2049},[204,136710,55400],{"class":214},[204,136712,28269],{"class":51386},[204,136714,51393],{"class":214},[19,136716,136717],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[161,136719,136720],{"start":131},[71,136721,136722],{},"常用属性",[23,136724],{"style":25,"src":136725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[196,136727,136728],{"className":127383,"code":136482,"language":127385,"meta":125,"style":125},[81,136729,136730],{"__ignoreMap":125},[204,136731,136732,136734,136736,136738,136740,136742,136744,136746,136748,136750,136752,136754],{"class":206,"line":207},[204,136733,1123],{"class":214},[204,136735,28269],{"class":51386},[204,136737,55325],{"class":2049},[204,136739,260],{"class":214},[204,136741,136497],{"class":319},[204,136743,92509],{"class":2049},[204,136745,136502],{"class":2049},[204,136747,136505],{"class":2049},[204,136749,136508],{"class":2049},[204,136751,55400],{"class":214},[204,136753,28269],{"class":51386},[204,136755,51393],{"class":214},[19,136757,136758],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22085,136760,136762],{"id":136761},"_14123-总结","14.1.2.3 总结",[68,136764,136765,136768,136771,136774,136777],{},[71,136766,136767],{},"音频标签和视频标签使用方式基本一致",[71,136769,136770],{},"浏览器支持情况不同",[71,136772,136773],{},"谷歌浏览器把音频和视频自动播放禁止了",[71,136775,136776],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[71,136778,136779],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[49,136781,136783],{"id":136782},"_1413-表单元素","14.1.3 表单元素",[22085,136785,136787],{"id":136786},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[23,136789],{"style":25,"src":136790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[196,136792,136794],{"className":127383,"code":136793,"language":127385,"meta":125,"style":125},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[81,136795,136796],{"__ignoreMap":125},[204,136797,136798,136800,136802,136804,136806,136808,136810,136812,136815,136817,136819,136822],{"class":206,"line":207},[204,136799,1123],{"class":214},[204,136801,53907],{"class":51386},[204,136803,53910],{"class":2049},[204,136805,260],{"class":214},[204,136807,62785],{"class":319},[204,136809,15007],{"class":2049},[204,136811,260],{"class":214},[204,136813,136814],{"class":319},"\"username\"",[204,136816,61106],{"class":2049},[204,136818,260],{"class":214},[204,136820,136821],{"class":319},"\"请输入用户名\"",[204,136823,51393],{"class":214},[23,136825],{"style":25,"src":136826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22085,136828,136830],{"id":136829},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[23,136832],{"style":25,"src":136833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136835,136836],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136838,136839],{},"快捷操作：",[23,136841],{"style":25,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136844,136845],{},"例子1：",[196,136847,136849],{"className":127383,"code":136848,"language":127385,"meta":125,"style":125},"\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",[81,136850,136851,136874,136901,136930,136949],{"__ignoreMap":125},[204,136852,136853,136855,136857,136859,136861,136864,136867,136869,136872],{"class":206,"line":207},[204,136854,1123],{"class":214},[204,136856,66711],{"class":51386},[204,136858,66714],{"class":2049},[204,136860,260],{"class":214},[204,136862,136863],{"class":319},"\"\u002Fsubmit\"",[204,136865,136866],{"class":2049}," method",[204,136868,260],{"class":214},[204,136870,136871],{"class":319},"\"post\"",[204,136873,51393],{"class":214},[204,136875,136876,136878,136880,136882,136884,136886,136888,136890,136892,136894,136896,136899],{"class":206,"line":126},[204,136877,52230],{"class":214},[204,136879,53907],{"class":51386},[204,136881,53910],{"class":2049},[204,136883,260],{"class":214},[204,136885,62785],{"class":319},[204,136887,15007],{"class":2049},[204,136889,260],{"class":214},[204,136891,136814],{"class":319},[204,136893,61106],{"class":2049},[204,136895,260],{"class":214},[204,136897,136898],{"class":319},"\"用户名\"",[204,136900,51393],{"class":214},[204,136902,136903,136905,136907,136909,136911,136914,136916,136918,136921,136923,136925,136928],{"class":206,"line":131},[204,136904,52230],{"class":214},[204,136906,53907],{"class":51386},[204,136908,53910],{"class":2049},[204,136910,260],{"class":214},[204,136912,136913],{"class":319},"\"password\"",[204,136915,15007],{"class":2049},[204,136917,260],{"class":214},[204,136919,136920],{"class":319},"\"pwd\"",[204,136922,61106],{"class":2049},[204,136924,260],{"class":214},[204,136926,136927],{"class":319},"\"密码\"",[204,136929,51393],{"class":214},[204,136931,136932,136934,136936,136938,136940,136942,136945,136947],{"class":206,"line":1281},[204,136933,52230],{"class":214},[204,136935,53973],{"class":51386},[204,136937,53910],{"class":2049},[204,136939,260],{"class":214},[204,136941,66734],{"class":319},[204,136943,136944],{"class":214},">提交\u003C\u002F",[204,136946,53973],{"class":51386},[204,136948,51393],{"class":214},[204,136950,136951,136953,136955],{"class":206,"line":1287},[204,136952,51871],{"class":214},[204,136954,66711],{"class":51386},[204,136956,51393],{"class":214},[23,136958],{"style":25,"src":136959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,136961,136962],{},"value是表单域的内容",[19,136964,136965],{},"例子2：",[196,136967,136968],{"className":127383,"code":136848,"language":127385,"meta":125,"style":125},[81,136969,136970,136990,137016,137042,137060],{"__ignoreMap":125},[204,136971,136972,136974,136976,136978,136980,136982,136984,136986,136988],{"class":206,"line":207},[204,136973,1123],{"class":214},[204,136975,66711],{"class":51386},[204,136977,66714],{"class":2049},[204,136979,260],{"class":214},[204,136981,136863],{"class":319},[204,136983,136866],{"class":2049},[204,136985,260],{"class":214},[204,136987,136871],{"class":319},[204,136989,51393],{"class":214},[204,136991,136992,136994,136996,136998,137000,137002,137004,137006,137008,137010,137012,137014],{"class":206,"line":126},[204,136993,52230],{"class":214},[204,136995,53907],{"class":51386},[204,136997,53910],{"class":2049},[204,136999,260],{"class":214},[204,137001,62785],{"class":319},[204,137003,15007],{"class":2049},[204,137005,260],{"class":214},[204,137007,136814],{"class":319},[204,137009,61106],{"class":2049},[204,137011,260],{"class":214},[204,137013,136898],{"class":319},[204,137015,51393],{"class":214},[204,137017,137018,137020,137022,137024,137026,137028,137030,137032,137034,137036,137038,137040],{"class":206,"line":131},[204,137019,52230],{"class":214},[204,137021,53907],{"class":51386},[204,137023,53910],{"class":2049},[204,137025,260],{"class":214},[204,137027,136913],{"class":319},[204,137029,15007],{"class":2049},[204,137031,260],{"class":214},[204,137033,136920],{"class":319},[204,137035,61106],{"class":2049},[204,137037,260],{"class":214},[204,137039,136927],{"class":319},[204,137041,51393],{"class":214},[204,137043,137044,137046,137048,137050,137052,137054,137056,137058],{"class":206,"line":1281},[204,137045,52230],{"class":214},[204,137047,53973],{"class":51386},[204,137049,53910],{"class":2049},[204,137051,260],{"class":214},[204,137053,66734],{"class":319},[204,137055,136944],{"class":214},[204,137057,53973],{"class":51386},[204,137059,51393],{"class":214},[204,137061,137062,137064,137066],{"class":206,"line":1287},[204,137063,51871],{"class":214},[204,137065,66711],{"class":51386},[204,137067,51393],{"class":214},[23,137069],{"style":25,"src":137070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137072,137074],{"id":137073},"_142-css新特性","14.2 CSS新特性",[49,137076,137078],{"id":137077},"_1421-新增选择器","14.2.1 新增选择器",[22085,137080,137082],{"id":137081},"_14211-属性选择器","14.2.1.1 属性选择器",[23,137084],{"style":25,"src":137085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[196,137087,137089],{"className":126636,"code":137088,"language":126638,"meta":125,"style":125},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[81,137090,137091,137106,137122],{"__ignoreMap":125},[204,137092,137093,137095,137097,137099,137101,137103],{"class":206,"line":207},[204,137094,53907],{"class":51386},[204,137096,1103],{"class":214},[204,137098,103192],{"class":2049},[204,137100,260],{"class":210},[204,137102,62785],{"class":319},[204,137104,137105],{"class":214},"] {\n",[204,137107,137108,137110,137112,137114,137116,137118,137120],{"class":206,"line":126},[204,137109,70982],{"class":263},[204,137111,51523],{"class":214},[204,137113,431],{"class":263},[204,137115,51578],{"class":210},[204,137117,51607],{"class":263},[204,137119,130216],{"class":263},[204,137121,1377],{"class":214},[204,137123,137124],{"class":206,"line":131},[204,137125,1651],{"class":214},[23,137127],{"style":25,"src":137128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137130,244],{},[68,137132,137133,137136,137139,137142],{},[71,137134,137135],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[71,137137,137138],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[71,137140,137141],{},"属性选择器也可以选择出来自定义的属性",[71,137143,137144,137146],{},[30,137145,9112],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22085,137148,137150],{"id":137149},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[23,137152],{"style":25,"src":137153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[161,137155,137156],{},[71,137157,137158],{},"fist-child",[196,137160,137162],{"className":126636,"code":137161,"language":126638,"meta":125,"style":125},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[81,137163,137164,137169,137184,137204,137222],{"__ignoreMap":125},[204,137165,137166],{"class":206,"line":207},[204,137167,137168],{"class":273},"\u002F* 属性选择器 *\u002F\n",[204,137170,137171,137173,137175,137177,137179,137181],{"class":206,"line":126},[204,137172,53907],{"class":51386},[204,137174,1103],{"class":214},[204,137176,103192],{"class":2049},[204,137178,260],{"class":210},[204,137180,62785],{"class":319},[204,137182,137183],{"class":214},"] { }\n",[204,137185,137186,137188,137190,137192,137195,137198,137201],{"class":206,"line":131},[204,137187,53907],{"class":51386},[204,137189,1103],{"class":214},[204,137191,14781],{"class":2049},[204,137193,137194],{"class":210},"^=",[204,137196,137197],{"class":319},"\"icon\"",[204,137199,137200],{"class":214},"] { }  ",[204,137202,137203],{"class":273},"\u002F* 以 icon 开头 *\u002F\n",[204,137205,137206,137208,137210,137212,137215,137217,137219],{"class":206,"line":1281},[204,137207,53907],{"class":51386},[204,137209,1103],{"class":214},[204,137211,14781],{"class":2049},[204,137213,137214],{"class":210},"$=",[204,137216,137197],{"class":319},[204,137218,137200],{"class":214},[204,137220,137221],{"class":273},"\u002F* 以 icon 结尾 *\u002F\n",[204,137223,137224,137226,137228,137230,137233,137235,137237],{"class":206,"line":1287},[204,137225,53907],{"class":51386},[204,137227,1103],{"class":214},[204,137229,14781],{"class":2049},[204,137231,137232],{"class":210},"*=",[204,137234,137197],{"class":319},[204,137236,137200],{"class":214},[204,137238,137239],{"class":273},"\u002F* 包含 icon *\u002F\n",[19,137241,137242],{},"ul的第一个儿子文本为红色",[19,137244,137245],{},"一定要在冒号前加空格，不然就是选中所有的了",[196,137247,137249],{"className":126636,"code":137248,"language":126638,"meta":125,"style":125},".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",[81,137250,137251,137257,137267,137271,137275,137280,137293,137306,137322,137339,137356],{"__ignoreMap":125},[204,137252,137253,137255],{"class":206,"line":207},[204,137254,126927],{"class":2049},[204,137256,15659],{"class":214},[204,137258,137259,137261,137263,137265],{"class":206,"line":126},[204,137260,70991],{"class":263},[204,137262,51523],{"class":214},[204,137264,57507],{"class":263},[204,137266,1377],{"class":214},[204,137268,137269],{"class":206,"line":131},[204,137270,1651],{"class":214},[204,137272,137273],{"class":206,"line":1281},[204,137274,136097],{"class":214},[204,137276,137277],{"class":206,"line":1287},[204,137278,137279],{"class":273},"\u002F* 结构伪类选择器 *\u002F\n",[204,137281,137282,137284,137287,137290],{"class":206,"line":1301},[204,137283,71],{"class":51386},[204,137285,137286],{"class":2049},":first-child",[204,137288,137289],{"class":214}," { }           ",[204,137291,137292],{"class":273},"\u002F* 第一个 *\u002F\n",[204,137294,137295,137297,137300,137303],{"class":206,"line":1307},[204,137296,71],{"class":51386},[204,137298,137299],{"class":2049},":last-child",[204,137301,137302],{"class":214}," { }            ",[204,137304,137305],{"class":273},"\u002F* 最后一个 *\u002F\n",[204,137307,137308,137310,137312,137314,137316,137319],{"class":206,"line":1398},[204,137309,71],{"class":51386},[204,137311,129550],{"class":2049},[204,137313,215],{"class":214},[204,137315,292],{"class":263},[204,137317,137318],{"class":214},") { }          ",[204,137320,137321],{"class":273},"\u002F* 第2个 *\u002F\n",[204,137323,137324,137326,137328,137330,137333,137336],{"class":206,"line":1404},[204,137325,71],{"class":51386},[204,137327,129550],{"class":2049},[204,137329,215],{"class":214},[204,137331,137332],{"class":263},"2n",[204,137334,137335],{"class":214},") { }         ",[204,137337,137338],{"class":273},"\u002F* 偶数 *\u002F\n",[204,137340,137341,137343,137345,137347,137350,137353],{"class":206,"line":1416},[204,137342,71],{"class":51386},[204,137344,129550],{"class":2049},[204,137346,215],{"class":214},[204,137348,137349],{"class":263},"2n+1",[204,137351,137352],{"class":214},") { }       ",[204,137354,137355],{"class":273},"\u002F* 奇数 *\u002F\n",[204,137357,137358,137360,137362,137364,137367,137369],{"class":206,"line":1698},[204,137359,71],{"class":51386},[204,137361,129550],{"class":2049},[204,137363,215],{"class":214},[204,137365,137366],{"class":263},"-n+3",[204,137368,137352],{"class":214},[204,137370,137371],{"class":273},"\u002F* 前3个 *\u002F\n",[51697,137373,137376],{"className":137374},[137375],"example","\n  示例内容\n",[19,137378,137379],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[68,137381,137382],{},[71,137383,137384,137387],{},[81,137385,137386],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137389,137390],{},"也就是说它选择的是熊大",[161,137392,137393],{"start":1301},[71,137394,137395],{},"权重",[196,137397,137399],{"className":126636,"code":137398,"language":126638,"meta":125,"style":125},"\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",[81,137400,137401,137405,137415,137425,137439,137453,137467],{"__ignoreMap":125},[204,137402,137403],{"class":206,"line":207},[204,137404,137279],{"class":273},[204,137406,137407,137409,137411,137413],{"class":206,"line":126},[204,137408,71],{"class":51386},[204,137410,137286],{"class":2049},[204,137412,137289],{"class":214},[204,137414,137292],{"class":273},[204,137416,137417,137419,137421,137423],{"class":206,"line":131},[204,137418,71],{"class":51386},[204,137420,137299],{"class":2049},[204,137422,137302],{"class":214},[204,137424,137305],{"class":273},[204,137426,137427,137429,137431,137433,137435,137437],{"class":206,"line":1281},[204,137428,71],{"class":51386},[204,137430,129550],{"class":2049},[204,137432,215],{"class":214},[204,137434,292],{"class":263},[204,137436,137318],{"class":214},[204,137438,137321],{"class":273},[204,137440,137441,137443,137445,137447,137449,137451],{"class":206,"line":1287},[204,137442,71],{"class":51386},[204,137444,129550],{"class":2049},[204,137446,215],{"class":214},[204,137448,137332],{"class":263},[204,137450,137335],{"class":214},[204,137452,137338],{"class":273},[204,137454,137455,137457,137459,137461,137463,137465],{"class":206,"line":1301},[204,137456,71],{"class":51386},[204,137458,129550],{"class":2049},[204,137460,215],{"class":214},[204,137462,137349],{"class":263},[204,137464,137352],{"class":214},[204,137466,137355],{"class":273},[204,137468,137469,137471,137473,137475,137477,137479],{"class":206,"line":1307},[204,137470,71],{"class":51386},[204,137472,129550],{"class":2049},[204,137474,215],{"class":214},[204,137476,137366],{"class":263},[204,137478,137352],{"class":214},[204,137480,137371],{"class":273},[19,137482,137483],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22085,137485,137487],{"id":137486},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137489,137490],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[23,137492],{"style":25,"src":137493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[161,137495,137496],{},[71,137497,244],{},[68,137499,137500,137503,137506,137509,137512,137515],{},[71,137501,137502],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[71,137504,137505],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[71,137507,137508],{},"语法： element::before {}",[71,137510,137511],{},"before 和 after 必须有 content 属性",[71,137513,137514],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[71,137516,137517],{},"伪元素选择器和标签选择器一样，权重为 1",[161,137519,137520],{"start":126},[71,137521,137522],{},"实例",[196,137524,137525],{"className":126636,"code":137398,"language":126638,"meta":125,"style":125},[81,137526,137527,137531,137541,137551,137565,137579,137593],{"__ignoreMap":125},[204,137528,137529],{"class":206,"line":207},[204,137530,137279],{"class":273},[204,137532,137533,137535,137537,137539],{"class":206,"line":126},[204,137534,71],{"class":51386},[204,137536,137286],{"class":2049},[204,137538,137289],{"class":214},[204,137540,137292],{"class":273},[204,137542,137543,137545,137547,137549],{"class":206,"line":131},[204,137544,71],{"class":51386},[204,137546,137299],{"class":2049},[204,137548,137302],{"class":214},[204,137550,137305],{"class":273},[204,137552,137553,137555,137557,137559,137561,137563],{"class":206,"line":1281},[204,137554,71],{"class":51386},[204,137556,129550],{"class":2049},[204,137558,215],{"class":214},[204,137560,292],{"class":263},[204,137562,137318],{"class":214},[204,137564,137321],{"class":273},[204,137566,137567,137569,137571,137573,137575,137577],{"class":206,"line":1287},[204,137568,71],{"class":51386},[204,137570,129550],{"class":2049},[204,137572,215],{"class":214},[204,137574,137332],{"class":263},[204,137576,137335],{"class":214},[204,137578,137338],{"class":273},[204,137580,137581,137583,137585,137587,137589,137591],{"class":206,"line":1301},[204,137582,71],{"class":51386},[204,137584,129550],{"class":2049},[204,137586,215],{"class":214},[204,137588,137349],{"class":263},[204,137590,137352],{"class":214},[204,137592,137355],{"class":273},[204,137594,137595,137597,137599,137601,137603,137605],{"class":206,"line":1307},[204,137596,71],{"class":51386},[204,137598,129550],{"class":2049},[204,137600,215],{"class":214},[204,137602,137366],{"class":263},[204,137604,137352],{"class":214},[204,137606,137371],{"class":273},[23,137608],{"style":25,"src":137609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[161,137611,137612],{"start":131},[71,137613,137614],{},"使用场景1",[23,137616],{"style":25,"src":137617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137619,137620],{},"不需要再加盒子来整红色那部分了",[196,137622,137624],{"className":126636,"code":137623,"language":126638,"meta":125,"style":125},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[81,137625,137626,137631,137640,137651,137661,137665,137674,137685,137695],{"__ignoreMap":125},[204,137627,137628],{"class":206,"line":207},[204,137629,137630],{"class":273},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[204,137632,137633,137635,137638],{"class":206,"line":126},[204,137634,51697],{"class":51386},[204,137636,137637],{"class":2049},"::before",[204,137639,15659],{"class":214},[204,137641,137642,137645,137647,137649],{"class":206,"line":131},[204,137643,137644],{"class":263},"  content",[204,137646,51523],{"class":214},[204,137648,7739],{"class":319},[204,137650,1377],{"class":214},[204,137652,137653,137655,137657,137659],{"class":206,"line":1281},[204,137654,128252],{"class":263},[204,137656,51523],{"class":214},[204,137658,60955],{"class":263},[204,137660,1377],{"class":214},[204,137662,137663],{"class":206,"line":1287},[204,137664,1651],{"class":214},[204,137666,137667,137669,137672],{"class":206,"line":1301},[204,137668,51697],{"class":51386},[204,137670,137671],{"class":2049},"::after",[204,137673,15659],{"class":214},[204,137675,137676,137678,137680,137683],{"class":206,"line":1307},[204,137677,137644],{"class":263},[204,137679,51523],{"class":214},[204,137681,137682],{"class":319},"\"→\"",[204,137684,1377],{"class":214},[204,137686,137687,137689,137691,137693],{"class":206,"line":1398},[204,137688,70991],{"class":263},[204,137690,51523],{"class":214},[204,137692,62156],{"class":263},[204,137694,1377],{"class":214},[204,137696,137697],{"class":206,"line":1404},[204,137698,1651],{"class":214},[23,137700],{"style":25,"src":137701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137703,137704],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[23,137706],{"style":25,"src":137707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137709,137710],{},"但是在引用时需要先转义一下",[19,137712,137713],{},"content='\\e930'",[161,137715,137716],{"start":1281},[71,137717,137718],{},"使用场景2",[19,137720,137721],{},"仿土豆效果",[19,137723,137724],{},"通过使用伪元素选择器可以减少body中盒子的数量",[196,137726,137727],{"className":126636,"code":137623,"language":126638,"meta":125,"style":125},[81,137728,137729,137733,137741,137751,137761,137765,137773,137783,137793],{"__ignoreMap":125},[204,137730,137731],{"class":206,"line":207},[204,137732,137630],{"class":273},[204,137734,137735,137737,137739],{"class":206,"line":126},[204,137736,51697],{"class":51386},[204,137738,137637],{"class":2049},[204,137740,15659],{"class":214},[204,137742,137743,137745,137747,137749],{"class":206,"line":131},[204,137744,137644],{"class":263},[204,137746,51523],{"class":214},[204,137748,7739],{"class":319},[204,137750,1377],{"class":214},[204,137752,137753,137755,137757,137759],{"class":206,"line":1281},[204,137754,128252],{"class":263},[204,137756,51523],{"class":214},[204,137758,60955],{"class":263},[204,137760,1377],{"class":214},[204,137762,137763],{"class":206,"line":1287},[204,137764,1651],{"class":214},[204,137766,137767,137769,137771],{"class":206,"line":1301},[204,137768,51697],{"class":51386},[204,137770,137671],{"class":2049},[204,137772,15659],{"class":214},[204,137774,137775,137777,137779,137781],{"class":206,"line":1307},[204,137776,137644],{"class":263},[204,137778,51523],{"class":214},[204,137780,137682],{"class":319},[204,137782,1377],{"class":214},[204,137784,137785,137787,137789,137791],{"class":206,"line":1398},[204,137786,70991],{"class":263},[204,137788,51523],{"class":214},[204,137790,62156],{"class":263},[204,137792,1377],{"class":214},[204,137794,137795],{"class":206,"line":1404},[204,137796,1651],{"class":214},[23,137798],{"style":25,"src":137799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[161,137801,137802],{"start":1287},[71,137803,137804],{},"使用场景3",[19,137806,137807],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[196,137809,137811],{"className":126636,"code":137810,"language":126638,"meta":125,"style":125},".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",[81,137812,137813,137819,137829,137833,137837,137841,137849,137859,137869,137873,137881,137891,137901],{"__ignoreMap":125},[204,137814,137815,137817],{"class":206,"line":207},[204,137816,130484],{"class":2049},[204,137818,15659],{"class":214},[204,137820,137821,137823,137825,137827],{"class":206,"line":126},[204,137822,131116],{"class":263},[204,137824,51523],{"class":214},[204,137826,23823],{"class":263},[204,137828,1377],{"class":214},[204,137830,137831],{"class":206,"line":131},[204,137832,1651],{"class":214},[204,137834,137835],{"class":206,"line":1281},[204,137836,136097],{"class":214},[204,137838,137839],{"class":206,"line":1287},[204,137840,137630],{"class":273},[204,137842,137843,137845,137847],{"class":206,"line":1301},[204,137844,51697],{"class":51386},[204,137846,137637],{"class":2049},[204,137848,15659],{"class":214},[204,137850,137851,137853,137855,137857],{"class":206,"line":1307},[204,137852,137644],{"class":263},[204,137854,51523],{"class":214},[204,137856,7739],{"class":319},[204,137858,1377],{"class":214},[204,137860,137861,137863,137865,137867],{"class":206,"line":1398},[204,137862,128252],{"class":263},[204,137864,51523],{"class":214},[204,137866,60955],{"class":263},[204,137868,1377],{"class":214},[204,137870,137871],{"class":206,"line":1404},[204,137872,1651],{"class":214},[204,137874,137875,137877,137879],{"class":206,"line":1416},[204,137876,51697],{"class":51386},[204,137878,137671],{"class":2049},[204,137880,15659],{"class":214},[204,137882,137883,137885,137887,137889],{"class":206,"line":1698},[204,137884,137644],{"class":263},[204,137886,51523],{"class":214},[204,137888,137682],{"class":319},[204,137890,1377],{"class":214},[204,137892,137893,137895,137897,137899],{"class":206,"line":1703},[204,137894,70991],{"class":263},[204,137896,51523],{"class":214},[204,137898,62156],{"class":263},[204,137900,1377],{"class":214},[204,137902,137903],{"class":206,"line":1709},[204,137904,1651],{"class":214},[19,137906,137907],{},"div {\nmargin: 0 auto;\n}",[196,137909,137912],{"className":137910,"code":137911,"language":5274},[5272],"\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",[81,137913,137911],{"__ignoreMap":125},[19,137915,137916],{},"如果想让多个元素都发生变化",[19,137918,137919],{},"不能如下操作：",[19,137921,137922],{},"transition: width 2s ease 0.5s;",[19,137924,137925],{},"transition: height 2s ease 0.5s;不对！！！",[19,137927,137928],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137930,137931],{},"使用如下：加逗号隔开",[19,137933,137934],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137936,137937],{},"transition all 2s ease;",[49,137939,137941],{"id":137940},"_1426-过渡练习","14.2.6 过渡练习",[161,137943,137944],{},[71,137945,137946],{},"进度条",[23,137948],{"style":25,"src":137949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[196,137951,137953],{"className":126636,"code":137952,"language":126638,"meta":125,"style":125},"div {\n  transition: all 0.3s ease;\n}\n",[81,137954,137955,137961,137979],{"__ignoreMap":125},[204,137956,137957,137959],{"class":206,"line":207},[204,137958,51697],{"class":51386},[204,137960,15659],{"class":214},[204,137962,137963,137966,137968,137970,137973,137975,137977],{"class":206,"line":126},[204,137964,137965],{"class":263},"  transition",[204,137967,51523],{"class":214},[204,137969,28207],{"class":263},[204,137971,137972],{"class":263}," 0.3",[204,137974,908],{"class":210},[204,137976,78766],{"class":263},[204,137978,1377],{"class":214},[204,137980,137981],{"class":206,"line":131},[204,137982,1651],{"class":214},[161,137984,137985],{"start":126},[71,137986,137987],{},"小米logo",[19,137989,137990],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[196,137992,137994],{"className":126636,"code":137993,"language":126638,"meta":125,"style":125},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[81,137995,137996,138001,138007,138023,138028],{"__ignoreMap":125},[204,137997,137998],{"class":206,"line":207},[204,137999,138000],{"class":273},"\u002F* CSS3 过渡 *\u002F\n",[204,138002,138003,138005],{"class":206,"line":126},[204,138004,51697],{"class":51386},[204,138006,15659],{"class":214},[204,138008,138009,138011,138013,138015,138017,138019,138021],{"class":206,"line":131},[204,138010,137965],{"class":263},[204,138012,51523],{"class":214},[204,138014,28207],{"class":263},[204,138016,137972],{"class":263},[204,138018,908],{"class":210},[204,138020,78766],{"class":263},[204,138022,1377],{"class":214},[204,138024,138025],{"class":206,"line":1281},[204,138026,138027],{"class":273},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[204,138029,138030],{"class":206,"line":1287},[204,138031,1651],{"class":214},[19,138033,138034],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5213,138036,138037],{},"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":125,"searchDepth":126,"depth":126,"links":138039},[138040,138045],{"id":136370,"depth":126,"text":136371,"children":138041},[138042,138043,138044],{"id":136374,"depth":131,"text":136375},{"id":136451,"depth":131,"text":136452},{"id":136782,"depth":131,"text":136783},{"id":137073,"depth":126,"text":137074,"children":138046},[138047,138048],{"id":137077,"depth":131,"text":137078},{"id":137940,"depth":131,"text":137941},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136362,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138055,"title":138056,"body":138057,"description":132,"extension":133,"meta":139801,"navigation":135,"path":139802,"seo":139803,"stem":139804,"__hash__":139805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138058,"toc":139782},[138059,138062,138066,138069,138075,138081,138085,138087,138090,138093,138096,138099,138102,138105,138108,138112,138116,138119,138122,138125,138129,138132,138135,138140,138143,138146,138149,138153,138156,138165,138168,138171,138175,138178,138181,138186,138193,138207,138215,138222,138227,138230,138233,138236,138243,138247,138253,138259,138262,138265,138270,138276,138278,138286,138291,138294,138300,138302,138307,138312,138315,138317,138322,138325,138330,138335,138369,138373,138377,138380,138384,138387,138473,138476,138513,138516,138552,138556,138561,138574,138628,138630,138658,138660,138688,138694,138708,138710,138754,138756,138800,138803,138810,138821,138823,138850,138852,138878,138885,138901,138903,138997,138999,139093,139100,139103,139108,139114,139188,139191,139193,139229,139231,139267,139270,139277,139296,139299,139302,139304,139329,139331,139355,139358,139361,139391,139395,139398,139461,139463,139529,139531,139595,139598,139630,139632,139658,139660,139686,139689,139720,139722,139748,139750,139776,139779],[10,138060,138056],{"id":138061},"_15-品优购项目上篇-搭建与公共模块",[14,138063,138065],{"id":138064},"_151-项目规划","15.1 项目规划",[23,138067],{"style":25,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138070,138071,138074],{},[30,138072,138073],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138076,138077,138080],{},[30,138078,138079],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138082,138084],{"id":138083},"_152-项目介绍","15.2 项目介绍",[19,138086,138073],{},[23,138088],{"style":25,"src":138089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138091,138092],{},"主页：",[23,138094],{"style":25,"src":138095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138097,138098],{},"列表页：",[23,138100],{"style":25,"src":138101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138103,138104],{},"注册页：",[23,138106],{"style":25,"src":138107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138109,138111],{"id":138110},"_153-项目搭建工作","15.3 项目搭建工作",[49,138113,138115],{"id":138114},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[23,138117],{"style":25,"src":138118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138120,138121],{},"经常更换的图片要放到upload文件夹中",[19,138123,138124],{},"不经常换的放到images文件夹中",[49,138126,138128],{"id":138127},"_1532-创建文件如下","15.3.2 创建文件如下",[23,138130],{"style":25,"src":138131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[23,138133],{"style":25,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138136,138137],{},[30,138138,138139],{},"初始化样式：",[19,138141,138142],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138144,138145],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138147,138148],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[49,138150,138152],{"id":138151},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138154,138155],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138157,138158,138159,138164],{},"这里最典型的应用就是 ",[30,138160,138161],{},[81,138162,138163],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[23,138166],{"style":25,"src":138167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138169,138170],{},"通过link方法来引入",[49,138172,138174],{"id":138173},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[23,138176],{"style":25,"src":138177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138179,138180],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[161,138182,138183],{},[71,138184,138185],{},"制作favicon图标",[19,138187,138188,138189,138192],{},"①把品优购图标切成 ",[81,138190,138191],{},"png"," 图片",[19,138194,138195,138196,138198,138199,138202,138203],{},"②把 ",[81,138197,138191],{}," 图片转换为 ",[81,138200,138201],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[62,138204,138205],{"href":138205,"rel":138206},"http:\u002F\u002Fwww.bitbug.net\u002F",[66],[161,138208,138209,138212],{"start":126},[71,138210,138211],{},"favicon图标放到网站根目录下",[71,138213,138214],{},"HTML页面引入favicon",[19,138216,138217,138218,138221],{},"在html 页面里面的 ",[81,138219,138220],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138223,138224],{},[81,138225,138226],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138228,138229],{},"复制这行代码或者在生成这个的网站进行复制",[23,138231],{"style":25,"src":138232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138234,138235],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138237,138238,138239],{},"例如:",[62,138240,138241],{"href":138241,"rel":138242},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[66],[49,138244,138246],{"id":138245},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138248,138249,138252],{},[30,138250,138251],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138254,138255,138258],{},[30,138256,138257],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138260,138261],{},"页面必须有三个标签用来符合 SEO 优化",[23,138263],{"style":25,"src":138264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[161,138266,138267],{},[71,138268,138269],{},"title网站标题",[19,138271,138272,138275],{},[30,138273,138274],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138277,68876],{},[68,138279,138280,138283],{},[71,138281,138282],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[71,138284,138285],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[161,138287,138288],{"start":126},[71,138289,138290],{},"description网站描述",[19,138292,138293],{},"简要说明我们网站主要是做什么的",[19,138295,138296,138299],{},[30,138297,138298],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138301,68876],{},[19,138303,138304],{},[81,138305,138306],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[161,138308,138309],{"start":131},[71,138310,138311],{},"keywords关键词",[19,138313,138314],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138316,68876],{},[19,138318,138319],{},[81,138320,138321],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138323,138324],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138326,138327],{},[30,138328,138329],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[161,138331,138332],{"start":1281},[71,138333,138334],{},"代码总结",[196,138336,138337],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,138338,138339,138343,138357,138361],{"__ignoreMap":125},[204,138340,138341],{"class":206,"line":207},[204,138342,130747],{"class":273},[204,138344,138345,138347,138349,138351,138353,138355],{"class":206,"line":126},[204,138346,1123],{"class":214},[204,138348,51697],{"class":51386},[204,138350,53572],{"class":2049},[204,138352,260],{"class":214},[204,138354,130760],{"class":319},[204,138356,51393],{"class":214},[204,138358,138359],{"class":206,"line":131},[204,138360,130767],{"class":214},[204,138362,138363,138365,138367],{"class":206,"line":1281},[204,138364,51871],{"class":214},[204,138366,51697],{"class":51386},[204,138368,51393],{"class":214},[14,138370,138372],{"id":138371},"_154-项目公共部分制作","15.4 项目公共部分制作",[49,138374,138376],{"id":138375},"_1541-常用模块类命名","15.4.1 常用模块类命名",[23,138378],{"style":25,"src":138379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[49,138381,138383],{"id":138382},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138385,138386],{},"布局思路：",[68,138388,138389,138392,138395,138417,138450],{},[71,138390,138391],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[71,138393,138394],{},"里面包含版心的盒子",[71,138396,138397,138398],{},"版心盒子里面包含 1 号左侧盒子左浮动",[68,138399,138400,138408,138414],{},[71,138401,138402,138403,21587,138405,138407],{},"1 号盒子 里面包含一个",[81,138404,68],{},[81,138406,68],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[71,138409,138410,138411,138413],{},"里面的内容是水平排列，所以需要给",[81,138412,71],{},"设置浮动",[71,138415,138416],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[71,138418,138419,138420],{},"版心盒子里面包含 2 号右侧盒子右浮动",[68,138421,138422,138436,138441],{},[71,138423,138424,138425,21587,138427,138429,138430,138432,138433,138435],{},"2 号盒子 里面包含一个",[81,138426,68],{},[81,138428,68],{},"包裹",[81,138431,71],{},"，中间的",[81,138434,1134],{},"可以用样式去设置，也可以用字符 |",[71,138437,138438,138439,138413],{},"里面内容水平排列，给",[81,138440,71],{},[71,138442,138443,138444,138446,138447,138449],{},"找到里面所有偶数的 ",[81,138445,71],{}," 设置样式（偶数的 ",[81,138448,71],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[71,138451,138452,138453],{},"需要用到字体图标",[68,138454,138455,138461,138464,138467,138470],{},[71,138456,138457,138458],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[81,138459,138460],{},"arrow-icon",[71,138462,138463],{},"先要引入字体图片的资源",[71,138465,138466],{},"在样式里面利用 font-face 来进行声明",[71,138468,138469],{},"在伪元素的 content属性设置 图标的编码",[71,138471,138472],{},"给伪元素设置font-family属性",[19,138474,138475],{},"结构实例代码：",[196,138477,138479],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},"div::before {\n  content: \"\";\n  display: block;\n}\n",[81,138480,138481,138489,138499,138509],{"__ignoreMap":125},[204,138482,138483,138485,138487],{"class":206,"line":207},[204,138484,51697],{"class":51386},[204,138486,137637],{"class":2049},[204,138488,15659],{"class":214},[204,138490,138491,138493,138495,138497],{"class":206,"line":126},[204,138492,137644],{"class":263},[204,138494,51523],{"class":214},[204,138496,7739],{"class":319},[204,138498,1377],{"class":214},[204,138500,138501,138503,138505,138507],{"class":206,"line":131},[204,138502,128252],{"class":263},[204,138504,51523],{"class":214},[204,138506,60955],{"class":263},[204,138508,1377],{"class":214},[204,138510,138511],{"class":206,"line":1281},[204,138512,1651],{"class":214},[19,138514,138515],{},"样式实例代码：",[196,138517,138518],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,138519,138520,138528,138538,138548],{"__ignoreMap":125},[204,138521,138522,138524,138526],{"class":206,"line":207},[204,138523,51697],{"class":51386},[204,138525,137637],{"class":2049},[204,138527,15659],{"class":214},[204,138529,138530,138532,138534,138536],{"class":206,"line":126},[204,138531,137644],{"class":263},[204,138533,51523],{"class":214},[204,138535,7739],{"class":319},[204,138537,1377],{"class":214},[204,138539,138540,138542,138544,138546],{"class":206,"line":131},[204,138541,128252],{"class":263},[204,138543,51523],{"class":214},[204,138545,60955],{"class":263},[204,138547,1377],{"class":214},[204,138549,138550],{"class":206,"line":1281},[204,138551,1651],{"class":214},[49,138553,138555],{"id":138554},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[68,138557,138558],{},[71,138559,138560],{},"header 盒子必须要有高度",[19,138562,138563,138564,138566,138567],{},"1 号盒子是 ",[81,138565,131648],{}," 标志定位，在正常开发过程中， ",[30,138568,138569,138570,138573],{},"logo的布局其实是有讲究的，需要进行 ",[81,138571,138572],{},"logoSEO","的优化 （★★★）",[68,138575,138576,138584,138592,138619],{},[71,138577,138578,138580,138581,138583],{},[81,138579,131648],{}," 里面首先放一个 ",[81,138582,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[71,138585,138586,138588,138589,138591],{},[81,138587,10],{}," 里面再放一个链接，可以返回首页的，把 ",[81,138590,131648],{}," 的背景图片给链接即可",[71,138593,138594,138595],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[68,138596,138597,138612],{},[71,138598,138599,138600,138603,138604,138607,138608,138611],{},"方法1：",[81,138601,138602],{},"text-indent"," 移到盒子外面（",[81,138605,138606],{},"text-indent: -9999px",") ，然后 ",[81,138609,138610],{},"overflow:hidden"," ，淘宝的做法",[71,138613,138614,138615,138618],{},"方法2：直接给 ",[81,138616,138617],{},"font-size: 0;"," 就看不到文字了，京东的做法",[71,138620,138621,138622,138624,138625,138627],{},"最后给链接一个 ",[81,138623,51493],{}," 属性，这样鼠标放到 ",[81,138626,131648],{}," 上就可以看到提示文字了",[19,138629,138475],{},[196,138631,138632],{"className":127383,"code":131869,"language":127385,"meta":125,"style":125},[81,138633,138634],{"__ignoreMap":125},[204,138635,138636,138638,138640,138642,138644,138646,138648,138650,138652,138654,138656],{"class":206,"line":207},[204,138637,1123],{"class":214},[204,138639,62],{"class":51386},[204,138641,61143],{"class":2049},[204,138643,260],{"class":214},[204,138645,131884],{"class":319},[204,138647,131887],{"class":2049},[204,138649,260],{"class":214},[204,138651,131892],{"class":319},[204,138653,131895],{"class":214},[204,138655,62],{"class":51386},[204,138657,51393],{"class":214},[19,138659,138515],{},[196,138661,138662],{"className":127383,"code":131869,"language":127385,"meta":125,"style":125},[81,138663,138664],{"__ignoreMap":125},[204,138665,138666,138668,138670,138672,138674,138676,138678,138680,138682,138684,138686],{"class":206,"line":207},[204,138667,1123],{"class":214},[204,138669,62],{"class":51386},[204,138671,61143],{"class":2049},[204,138673,260],{"class":214},[204,138675,131884],{"class":319},[204,138677,131887],{"class":2049},[204,138679,260],{"class":214},[204,138681,131892],{"class":319},[204,138683,131895],{"class":214},[204,138685,62],{"class":51386},[204,138687,51393],{"class":214},[19,138689,138690,138691,138693],{},"2 号盒子是 ",[81,138692,131661],{}," 搜索模块定位",[68,138695,138696,138699,138702,138705],{},[71,138697,138698],{},"search盒子利用定位的方式放在对应的位置",[71,138700,138701],{},"search盒子设置绝对定位，header盒子设置相对定位",[71,138703,138704],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[71,138706,138707],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138709,138475],{},[196,138711,138712],{"className":126636,"code":131956,"language":126638,"meta":125,"style":125},[81,138713,138714,138736,138740,138750],{"__ignoreMap":125},[204,138715,138716,138718,138720,138722,138724,138726,138728,138730,138732,138734],{"class":206,"line":207},[204,138717,51697],{"class":51386},[204,138719,12522],{"class":214},[204,138721,19],{"class":51386},[204,138723,12522],{"class":214},[204,138725,10],{"class":51386},[204,138727,12522],{"class":214},[204,138729,68],{"class":51386},[204,138731,12522],{"class":214},[204,138733,71],{"class":51386},[204,138735,15659],{"class":214},[204,138737,138738],{"class":206,"line":126},[204,138739,131985],{"class":273},[204,138741,138742,138744,138746,138748],{"class":206,"line":131},[204,138743,128252],{"class":263},[204,138745,51523],{"class":214},[204,138747,60955],{"class":263},[204,138749,1377],{"class":214},[204,138751,138752],{"class":206,"line":1281},[204,138753,1651],{"class":214},[19,138755,138515],{},[196,138757,138758],{"className":126636,"code":131956,"language":126638,"meta":125,"style":125},[81,138759,138760,138782,138786,138796],{"__ignoreMap":125},[204,138761,138762,138764,138766,138768,138770,138772,138774,138776,138778,138780],{"class":206,"line":207},[204,138763,51697],{"class":51386},[204,138765,12522],{"class":214},[204,138767,19],{"class":51386},[204,138769,12522],{"class":214},[204,138771,10],{"class":51386},[204,138773,12522],{"class":214},[204,138775,68],{"class":51386},[204,138777,12522],{"class":214},[204,138779,71],{"class":51386},[204,138781,15659],{"class":214},[204,138783,138784],{"class":206,"line":126},[204,138785,131985],{"class":273},[204,138787,138788,138790,138792,138794],{"class":206,"line":131},[204,138789,128252],{"class":263},[204,138791,51523],{"class":214},[204,138793,60955],{"class":263},[204,138795,1377],{"class":214},[204,138797,138798],{"class":206,"line":1281},[204,138799,1651],{"class":214},[19,138801,138802],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138804,138805,138806,138809],{},"3 号盒子是 ",[81,138807,138808],{},"hotwords"," 热词模块定位",[68,138811,138812,138815,138818],{},[71,138813,138814],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[71,138816,138817],{},"给里面所有的a标签设置 左右10px的外边距",[71,138819,138820],{},"给第一个a标签设置文字变红色（#c81623）",[19,138822,138475],{},[196,138824,138826],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},"div {\n  margin: 0 auto;\n}\n",[81,138827,138828,138834,138846],{"__ignoreMap":125},[204,138829,138830,138832],{"class":206,"line":207},[204,138831,51697],{"class":51386},[204,138833,15659],{"class":214},[204,138835,138836,138838,138840,138842,138844],{"class":206,"line":126},[204,138837,70556],{"class":263},[204,138839,51523],{"class":214},[204,138841,405],{"class":263},[204,138843,51642],{"class":263},[204,138845,1377],{"class":214},[204,138847,138848],{"class":206,"line":131},[204,138849,1651],{"class":214},[19,138851,138515],{},[196,138853,138854],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,138855,138856,138862,138874],{"__ignoreMap":125},[204,138857,138858,138860],{"class":206,"line":207},[204,138859,51697],{"class":51386},[204,138861,15659],{"class":214},[204,138863,138864,138866,138868,138870,138872],{"class":206,"line":126},[204,138865,70556],{"class":263},[204,138867,51523],{"class":214},[204,138869,405],{"class":263},[204,138871,51642],{"class":263},[204,138873,1377],{"class":214},[204,138875,138876],{"class":206,"line":131},[204,138877,1651],{"class":214},[19,138879,138880,138881,138884],{},"4 号盒子是 ",[81,138882,138883],{},"shopcar"," 购物车模块",[68,138886,138887,138892,138895,138898],{},[71,138888,123420,138889,138891],{},[81,138890,138883],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[71,138893,138894],{},"count 统计部分用绝对定位做",[71,138896,138897],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[71,138899,138900],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138902,138475],{},[196,138904,138905],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,138906,138907,138911,138925,138929,138943,138947,138961,138965,138979,138983],{"__ignoreMap":125},[204,138908,138909],{"class":206,"line":207},[204,138910,132075],{"class":273},[204,138912,138913,138915,138917,138919,138921,138923],{"class":206,"line":126},[204,138914,132080],{"class":2049},[204,138916,79893],{"class":214},[204,138918,128996],{"class":263},[204,138920,51523],{"class":214},[204,138922,132089],{"class":263},[204,138924,129566],{"class":214},[204,138926,138927],{"class":206,"line":131},[204,138928,132096],{"class":273},[204,138930,138931,138933,138935,138937,138939,138941],{"class":206,"line":1281},[204,138932,132101],{"class":2049},[204,138934,79893],{"class":214},[204,138936,128996],{"class":263},[204,138938,51523],{"class":214},[204,138940,54850],{"class":263},[204,138942,129566],{"class":214},[204,138944,138945],{"class":206,"line":1287},[204,138946,132116],{"class":273},[204,138948,138949,138951,138953,138955,138957,138959],{"class":206,"line":1301},[204,138950,132121],{"class":2049},[204,138952,79893],{"class":214},[204,138954,128996],{"class":263},[204,138956,51523],{"class":214},[204,138958,54917],{"class":263},[204,138960,129566],{"class":214},[204,138962,138963],{"class":206,"line":1307},[204,138964,132136],{"class":273},[204,138966,138967,138969,138971,138973,138975,138977],{"class":206,"line":1398},[204,138968,132141],{"class":2049},[204,138970,79893],{"class":214},[204,138972,128996],{"class":263},[204,138974,51523],{"class":214},[204,138976,86319],{"class":263},[204,138978,129566],{"class":214},[204,138980,138981],{"class":206,"line":1404},[204,138982,132156],{"class":273},[204,138984,138985,138987,138989,138991,138993,138995],{"class":206,"line":1416},[204,138986,132161],{"class":2049},[204,138988,79893],{"class":214},[204,138990,128996],{"class":263},[204,138992,51523],{"class":214},[204,138994,132170],{"class":263},[204,138996,129566],{"class":214},[19,138998,138515],{},[196,139000,139001],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,139002,139003,139007,139021,139025,139039,139043,139057,139061,139075,139079],{"__ignoreMap":125},[204,139004,139005],{"class":206,"line":207},[204,139006,132075],{"class":273},[204,139008,139009,139011,139013,139015,139017,139019],{"class":206,"line":126},[204,139010,132080],{"class":2049},[204,139012,79893],{"class":214},[204,139014,128996],{"class":263},[204,139016,51523],{"class":214},[204,139018,132089],{"class":263},[204,139020,129566],{"class":214},[204,139022,139023],{"class":206,"line":131},[204,139024,132096],{"class":273},[204,139026,139027,139029,139031,139033,139035,139037],{"class":206,"line":1281},[204,139028,132101],{"class":2049},[204,139030,79893],{"class":214},[204,139032,128996],{"class":263},[204,139034,51523],{"class":214},[204,139036,54850],{"class":263},[204,139038,129566],{"class":214},[204,139040,139041],{"class":206,"line":1287},[204,139042,132116],{"class":273},[204,139044,139045,139047,139049,139051,139053,139055],{"class":206,"line":1301},[204,139046,132121],{"class":2049},[204,139048,79893],{"class":214},[204,139050,128996],{"class":263},[204,139052,51523],{"class":214},[204,139054,54917],{"class":263},[204,139056,129566],{"class":214},[204,139058,139059],{"class":206,"line":1307},[204,139060,132136],{"class":273},[204,139062,139063,139065,139067,139069,139071,139073],{"class":206,"line":1398},[204,139064,132141],{"class":2049},[204,139066,79893],{"class":214},[204,139068,128996],{"class":263},[204,139070,51523],{"class":214},[204,139072,86319],{"class":263},[204,139074,129566],{"class":214},[204,139076,139077],{"class":206,"line":1404},[204,139078,132156],{"class":273},[204,139080,139081,139083,139085,139087,139089,139091],{"class":206,"line":1416},[204,139082,132161],{"class":2049},[204,139084,79893],{"class":214},[204,139086,128996],{"class":263},[204,139088,51523],{"class":214},[204,139090,132170],{"class":263},[204,139092,129566],{"class":214},[49,139094,139096,139097,139099],{"id":139095},"_1544-nav导航模块制作","15.4.4 ",[81,139098,53799],{},"导航模块制作",[23,139101],{"style":25,"src":139102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139104,139105,139107],{},[81,139106,53799],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139109,139110,139111],{},"1 号盒子左侧浮动，",[81,139112,139113],{},"dropdown",[68,139115,139116,139126,139134,139140,139148,139158,139166,139177],{},[71,139117,139118,139119,43,139122,139125],{},"1号盒子有讲究，根据相关性 里面包含 ",[81,139120,139121],{},".dt",[81,139123,139124],{},".dd"," 两个盒子",[71,139127,139128,139130,139131,139133],{},[81,139129,139121],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[81,139132,139124],{}," 挤到下面去了",[71,139135,139136,139137,139139],{},"给 ",[81,139138,139124],{}," 盒子设置宽度 和 高度，以及背景颜色",[71,139141,139136,139142,139144,139145,120322],{},[81,139143,139124],{}," 盒子里面定义 无序列表 （",[81,139146,139147],{},"ul > li > a",[71,139149,139150,139151,139153,139154,139157],{},"每个 ",[81,139152,71],{}," 都有一个高度（",[81,139155,139156],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[71,139159,139136,139160,139162,139163,120322],{},[81,139161,71],{}," 里面的a设置文字大小（",[81,139164,139165],{},"14px",[71,139167,139136,139168,139170,139171,139173,139174,139176],{},[81,139169,71],{}," 设置 ",[81,139172,127797],{},"，当鼠标移入的时候，让",[81,139175,71],{},"的背景变成白色，让里面的文字变成红色",[71,139178,139179,139181,139182,139184,139185,139187],{},[81,139180,71],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[81,139183,71],{},"的右侧，那么给",[81,139186,71],{},"设置相对定位",[19,139189,139190],{},"一定要注意相关性",[19,139192,138475],{},[196,139194,139195],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,139196,139197,139205,139215,139225],{"__ignoreMap":125},[204,139198,139199,139201,139203],{"class":206,"line":207},[204,139200,51697],{"class":51386},[204,139202,137637],{"class":2049},[204,139204,15659],{"class":214},[204,139206,139207,139209,139211,139213],{"class":206,"line":126},[204,139208,137644],{"class":263},[204,139210,51523],{"class":214},[204,139212,7739],{"class":319},[204,139214,1377],{"class":214},[204,139216,139217,139219,139221,139223],{"class":206,"line":131},[204,139218,128252],{"class":263},[204,139220,51523],{"class":214},[204,139222,60955],{"class":263},[204,139224,1377],{"class":214},[204,139226,139227],{"class":206,"line":1281},[204,139228,1651],{"class":214},[19,139230,138515],{},[196,139232,139233],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,139234,139235,139243,139253,139263],{"__ignoreMap":125},[204,139236,139237,139239,139241],{"class":206,"line":207},[204,139238,51697],{"class":51386},[204,139240,137637],{"class":2049},[204,139242,15659],{"class":214},[204,139244,139245,139247,139249,139251],{"class":206,"line":126},[204,139246,137644],{"class":263},[204,139248,51523],{"class":214},[204,139250,7739],{"class":319},[204,139252,1377],{"class":214},[204,139254,139255,139257,139259,139261],{"class":206,"line":131},[204,139256,128252],{"class":263},[204,139258,51523],{"class":214},[204,139260,60955],{"class":263},[204,139262,1377],{"class":214},[204,139264,139265],{"class":206,"line":1281},[204,139266,1651],{"class":214},[19,139268,139269],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139271,139272,139273,139276],{},"2 号盒子左侧浮动，",[81,139274,139275],{},"navitems"," 导航栏组",[68,139278,139279,139284,139293],{},[71,139280,139281,139282],{},"里面结构是 ",[81,139283,139147],{},[71,139285,139286,139287,139289,139290,139292],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[81,139288,62],{},"左右的",[81,139291,30969],{},"把两侧撑开",[71,139294,139295],{},"让文字垂直居中（行高等于高度）",[23,139297],{"style":25,"src":139298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139300,139301],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139303,138475],{},[196,139305,139307],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},".box {\n  float: left;\n}\n",[81,139308,139309,139315,139325],{"__ignoreMap":125},[204,139310,139311,139313],{"class":206,"line":207},[204,139312,130484],{"class":2049},[204,139314,15659],{"class":214},[204,139316,139317,139319,139321,139323],{"class":206,"line":126},[204,139318,131116],{"class":263},[204,139320,51523],{"class":214},[204,139322,23823],{"class":263},[204,139324,1377],{"class":214},[204,139326,139327],{"class":206,"line":131},[204,139328,1651],{"class":214},[19,139330,138515],{},[196,139332,139333],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,139334,139335,139341,139351],{"__ignoreMap":125},[204,139336,139337,139339],{"class":206,"line":207},[204,139338,130484],{"class":2049},[204,139340,15659],{"class":214},[204,139342,139343,139345,139347,139349],{"class":206,"line":126},[204,139344,131116],{"class":263},[204,139346,51523],{"class":214},[204,139348,23823],{"class":263},[204,139350,1377],{"class":214},[204,139352,139353],{"class":206,"line":131},[204,139354,1651],{"class":214},[19,139356,139357],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[23,139359],{"style":25,"src":139360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[196,139362,139363],{"className":126636,"code":130793,"language":126638,"meta":125,"style":125},[81,139364,139365,139371,139387],{"__ignoreMap":125},[204,139366,139367,139369],{"class":206,"line":207},[204,139368,51697],{"class":51386},[204,139370,15659],{"class":214},[204,139372,139373,139375,139377,139379,139381,139383,139385],{"class":206,"line":126},[204,139374,70982],{"class":263},[204,139376,51523],{"class":214},[204,139378,431],{"class":263},[204,139380,51578],{"class":210},[204,139382,51607],{"class":263},[204,139384,130028],{"class":263},[204,139386,1377],{"class":214},[204,139388,139389],{"class":206,"line":131},[204,139390,1651],{"class":214},[49,139392,139394],{"id":139393},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[23,139396],{"style":25,"src":139397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[68,139399,139400,139405,139410],{},[71,139401,139402,139404],{},[81,139403,131839],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[71,139406,139407,139409],{},[81,139408,131839],{}," 里面有一个大的版心",[71,139411,139412,139413,139416,139417],{},"版心里面包含 1 号盒子，",[81,139414,139415],{},"mod_service"," 是服务模块，mod 是模块的意思",[68,139418,139419,139424,139437,139453,139458],{},[71,139420,139136,139421,139423],{},[81,139422,139415],{}," 设置高度（80px）和下边框",[71,139425,139426,139427,139430,139431,139433,139434,139436],{},"在里面定义 ",[81,139428,139429],{},"ul > li"," ,每个",[81,139432,71],{}," 宽度是300px 高度是 50px，给每个",[81,139435,71],{},"设置35px的左内边距",[71,139438,139439,139440,139442,139443,139445,139446,139448,139449,18497,139451,120322],{},"在每个",[81,139441,71],{},"里面，放一个 ",[81,139444,22997],{},"（里面放图标），一个",[81,139447,51697],{},"（里面放",[81,139450,51697],{},[81,139452,19],{},[71,139454,139136,139455,139457],{},[81,139456,22997],{},"设置浮动，让h5与这个div左右排列",[71,139459,139460],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139462,138475],{},[196,139464,139466],{"className":126636,"code":139465,"language":126638,"meta":125,"style":125},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[81,139467,139468,139474,139486,139498,139525],{"__ignoreMap":125},[204,139469,139470,139472],{"class":206,"line":207},[204,139471,134393],{"class":2049},[204,139473,15659],{"class":214},[204,139475,139476,139478,139480,139482,139484],{"class":206,"line":126},[204,139477,70654],{"class":263},[204,139479,51523],{"class":214},[204,139481,913],{"class":263},[204,139483,51578],{"class":210},[204,139485,1377],{"class":214},[204,139487,139488,139490,139492,139494,139496],{"class":206,"line":131},[204,139489,70874],{"class":263},[204,139491,51523],{"class":214},[204,139493,913],{"class":263},[204,139495,51578],{"class":210},[204,139497,1377],{"class":214},[204,139499,139500,139502,139504,139506,139508,139510,139512,139514,139517,139519,139521,139523],{"class":206,"line":1281},[204,139501,70697],{"class":263},[204,139503,51523],{"class":214},[204,139505,61812],{"class":263},[204,139507,215],{"class":214},[204,139509,134432],{"class":5303},[204,139511,13801],{"class":214},[204,139513,61822],{"class":263},[204,139515,139516],{"class":263}," -10",[204,139518,51578],{"class":210},[204,139520,134451],{"class":263},[204,139522,51578],{"class":210},[204,139524,1377],{"class":214},[204,139526,139527],{"class":206,"line":1287},[204,139528,1651],{"class":214},[19,139530,138515],{},[196,139532,139533],{"className":126636,"code":139465,"language":126638,"meta":125,"style":125},[81,139534,139535,139541,139553,139565,139591],{"__ignoreMap":125},[204,139536,139537,139539],{"class":206,"line":207},[204,139538,134393],{"class":2049},[204,139540,15659],{"class":214},[204,139542,139543,139545,139547,139549,139551],{"class":206,"line":126},[204,139544,70654],{"class":263},[204,139546,51523],{"class":214},[204,139548,913],{"class":263},[204,139550,51578],{"class":210},[204,139552,1377],{"class":214},[204,139554,139555,139557,139559,139561,139563],{"class":206,"line":131},[204,139556,70874],{"class":263},[204,139558,51523],{"class":214},[204,139560,913],{"class":263},[204,139562,51578],{"class":210},[204,139564,1377],{"class":214},[204,139566,139567,139569,139571,139573,139575,139577,139579,139581,139583,139585,139587,139589],{"class":206,"line":1281},[204,139568,70697],{"class":263},[204,139570,51523],{"class":214},[204,139572,61812],{"class":263},[204,139574,215],{"class":214},[204,139576,134432],{"class":5303},[204,139578,13801],{"class":214},[204,139580,61822],{"class":263},[204,139582,139516],{"class":263},[204,139584,51578],{"class":210},[204,139586,134451],{"class":263},[204,139588,51578],{"class":210},[204,139590,1377],{"class":214},[204,139592,139593],{"class":206,"line":1287},[204,139594,1651],{"class":214},[19,139596,139597],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[68,139599,139600,139603,139609,139615,139627],{},[71,139601,139602],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[71,139604,139605,139606,120322],{},"里面的布局利用 自定义列表来实现（",[81,139607,139608],{},"dl > dt + dd",[71,139610,139136,139611,139614],{},[81,139612,139613],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[71,139616,139136,139617,139620,139621,18497,139623,139626],{},[81,139618,139619],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[81,139622,139619],{},[81,139624,139625],{},"dd","之间有些距离",[71,139628,139629],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139631,138475],{},[196,139633,139634],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,139635,139636,139642,139654],{"__ignoreMap":125},[204,139637,139638,139640],{"class":206,"line":207},[204,139639,51697],{"class":51386},[204,139641,15659],{"class":214},[204,139643,139644,139646,139648,139650,139652],{"class":206,"line":126},[204,139645,70556],{"class":263},[204,139647,51523],{"class":214},[204,139649,405],{"class":263},[204,139651,51642],{"class":263},[204,139653,1377],{"class":214},[204,139655,139656],{"class":206,"line":131},[204,139657,1651],{"class":214},[19,139659,138515],{},[196,139661,139662],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,139663,139664,139670,139682],{"__ignoreMap":125},[204,139665,139666,139668],{"class":206,"line":207},[204,139667,51697],{"class":51386},[204,139669,15659],{"class":214},[204,139671,139672,139674,139676,139678,139680],{"class":206,"line":126},[204,139673,70556],{"class":263},[204,139675,51523],{"class":214},[204,139677,405],{"class":263},[204,139679,51642],{"class":263},[204,139681,1377],{"class":214},[204,139683,139684],{"class":206,"line":131},[204,139685,1651],{"class":214},[19,139687,139688],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[68,139690,139691,139700,139703,139714],{},[71,139692,139693,139694,139696,139697,139699],{},"分为上下两块，上面是 ",[81,139695,131856],{}," 友情链接，下面是 ",[81,139698,131849],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[71,139701,139702],{},"把内容分别复制到相应模块中",[71,139704,139136,139705,139707,139708,139710,139711,139713],{},[81,139706,131856],{}," 设置 15px 的下外边距，给",[81,139709,131856],{}," 里面 的 ",[81,139712,62],{}," 标签设置 左右 3px 的外边距",[71,139715,139716,139717,139719],{},"给",[81,139718,131849],{}," 设置 20px 的行高",[19,139721,138475],{},[196,139723,139724],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,139725,139726,139732,139744],{"__ignoreMap":125},[204,139727,139728,139730],{"class":206,"line":207},[204,139729,51697],{"class":51386},[204,139731,15659],{"class":214},[204,139733,139734,139736,139738,139740,139742],{"class":206,"line":126},[204,139735,70556],{"class":263},[204,139737,51523],{"class":214},[204,139739,405],{"class":263},[204,139741,51642],{"class":263},[204,139743,1377],{"class":214},[204,139745,139746],{"class":206,"line":131},[204,139747,1651],{"class":214},[19,139749,138515],{},[196,139751,139752],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,139753,139754,139760,139772],{"__ignoreMap":125},[204,139755,139756,139758],{"class":206,"line":207},[204,139757,51697],{"class":51386},[204,139759,15659],{"class":214},[204,139761,139762,139764,139766,139768,139770],{"class":206,"line":126},[204,139763,70556],{"class":263},[204,139765,51523],{"class":214},[204,139767,405],{"class":263},[204,139769,51642],{"class":263},[204,139771,1377],{"class":214},[204,139773,139774],{"class":206,"line":131},[204,139775,1651],{"class":214},[19,139777,139778],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5213,139780,139781],{},"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":125,"searchDepth":126,"depth":126,"links":139783},[139784,139785,139786,139793],{"id":138064,"depth":126,"text":138065},{"id":138083,"depth":126,"text":138084},{"id":138110,"depth":126,"text":138111,"children":139787},[139788,139789,139790,139791,139792],{"id":138114,"depth":131,"text":138115},{"id":138127,"depth":131,"text":138128},{"id":138151,"depth":131,"text":138152},{"id":138173,"depth":131,"text":138174},{"id":138245,"depth":131,"text":138246},{"id":138371,"depth":126,"text":138372,"children":139794},[139795,139796,139797,139798,139800],{"id":138375,"depth":131,"text":138376},{"id":138382,"depth":131,"text":138383},{"id":138554,"depth":131,"text":138555},{"id":139095,"depth":131,"text":139799},"15.4.4 nav导航模块制作",{"id":139393,"depth":131,"text":139394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138056,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139807,"title":139808,"body":139809,"description":132,"extension":133,"meta":142211,"navigation":135,"path":142212,"seo":142213,"stem":142214,"__hash__":142215},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139810,"toc":142188},[139811,139814,139818,139822,139834,139837,139840,139843,139854,139856,139880,139882,139906,139911,139914,139916,139952,139954,139990,139993,139998,140001,140004,140007,140037,140044,140047,140057,140059,140093,140096,140130,140136,140153,140155,140191,140193,140229,140234,140259,140261,140287,140289,140313,140320,140323,140387,140389,140431,140433,140473,140480,140485,140487,140517,140519,140549,140553,140556,140563,140575,140577,140603,140605,140629,140632,140634,140658,140664,140674,140676,140706,140708,140738,140745,140786,140788,140824,140826,140862,140866,140869,140872,140875,140881,140886,140889,140912,140915,140939,140942,140966,140971,140974,140977,140980,140983,140986,141060,141062,141092,141094,141124,141127,141130,141162,141166,141170,141184,141193,141196,141201,141203,141297,141299,141393,141416,141418,141442,141444,141468,141475,141478,141488,141490,141514,141519,141527,141529,141559,141564,141604,141606,141632,141634,141660,141664,141667,141672,141675,141679,141687,141694,141702,141704,141734,141736,141766,141774,141777,141780,141782,141812,141814,141844,141847,141852,141854,141878,141880,141904,141907,141992,141994,142018,142020,142044,142048,142050,142074,142076,142110,142114,142128,142131,142136,142139,142144,142147,142177,142185],[10,139812,139808],{"id":139813},"_16-品优购项目下篇-主体与页面开发",[14,139815,139817],{"id":139816},"_161-项目主体模块制作","16.1 项目主体模块制作",[49,139819,139821],{"id":139820},"_1611-首页制作","16.1.1 首页制作",[19,139823,139824,139826,139827,139829,139830,139833],{},[30,139825,102143],{}," 主体模块是 ",[30,139828,74144],{}," 里面专有的，注意需要新的样式文件 ",[30,139831,139832],{},"index.css，"," 就不要写在common.css中了",[23,139835],{"style":25,"src":139836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[23,139838],{"style":25,"src":139839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139841,139842],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[68,139844,139845,139848,139851],{},[71,139846,139847],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[71,139849,139850],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[71,139852,139853],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139855,138475],{},[196,139857,139858],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,139859,139860,139866,139876],{"__ignoreMap":125},[204,139861,139862,139864],{"class":206,"line":207},[204,139863,130484],{"class":2049},[204,139865,15659],{"class":214},[204,139867,139868,139870,139872,139874],{"class":206,"line":126},[204,139869,131116],{"class":263},[204,139871,51523],{"class":214},[204,139873,23823],{"class":263},[204,139875,1377],{"class":214},[204,139877,139878],{"class":206,"line":131},[204,139879,1651],{"class":214},[19,139881,138515],{},[196,139883,139884],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,139885,139886,139892,139902],{"__ignoreMap":125},[204,139887,139888,139890],{"class":206,"line":207},[204,139889,130484],{"class":2049},[204,139891,15659],{"class":214},[204,139893,139894,139896,139898,139900],{"class":206,"line":126},[204,139895,131116],{"class":263},[204,139897,51523],{"class":214},[204,139899,23823],{"class":263},[204,139901,1377],{"class":214},[204,139903,139904],{"class":206,"line":131},[204,139905,1651],{"class":214},[161,139907,139908],{},[71,139909,139910],{},"左侧focus模块制作",[23,139912],{"style":25,"src":139913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139915,138475],{},[196,139917,139918],{"className":126636,"code":127959,"language":126638,"meta":125,"style":125},[81,139919,139920,139928,139938,139948],{"__ignoreMap":125},[204,139921,139922,139924,139926],{"class":206,"line":207},[204,139923,53907],{"class":51386},[204,139925,61986],{"class":2049},[204,139927,15659],{"class":214},[204,139929,139930,139932,139934,139936],{"class":206,"line":126},[204,139931,127974],{"class":263},[204,139933,51523],{"class":214},[204,139935,54975],{"class":263},[204,139937,1377],{"class":214},[204,139939,139940,139942,139944,139946],{"class":206,"line":131},[204,139941,70884],{"class":263},[204,139943,51523],{"class":214},[204,139945,54823],{"class":263},[204,139947,1377],{"class":214},[204,139949,139950],{"class":206,"line":1281},[204,139951,1651],{"class":214},[19,139953,138515],{},[196,139955,139956],{"className":126636,"code":127959,"language":126638,"meta":125,"style":125},[81,139957,139958,139966,139976,139986],{"__ignoreMap":125},[204,139959,139960,139962,139964],{"class":206,"line":207},[204,139961,53907],{"class":51386},[204,139963,61986],{"class":2049},[204,139965,15659],{"class":214},[204,139967,139968,139970,139972,139974],{"class":206,"line":126},[204,139969,127974],{"class":263},[204,139971,51523],{"class":214},[204,139973,54975],{"class":263},[204,139975,1377],{"class":214},[204,139977,139978,139980,139982,139984],{"class":206,"line":131},[204,139979,70884],{"class":263},[204,139981,51523],{"class":214},[204,139983,54823],{"class":263},[204,139985,1377],{"class":214},[204,139987,139988],{"class":206,"line":1281},[204,139989,1651],{"class":214},[19,139991,139992],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[161,139994,139995],{"start":126},[71,139996,139997],{},"右侧newsflash模块制作",[23,139999],{"style":25,"src":140000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140002,140003],{},"右侧的模块 分为上中下三个盒子",[19,140005,140006],{},"结构代码：",[196,140008,140009],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,140010,140011],{"__ignoreMap":125},[204,140012,140013,140015,140017,140019,140021,140023,140025,140027,140029,140031,140033,140035],{"class":206,"line":207},[204,140014,1123],{"class":214},[204,140016,23],{"class":51386},[204,140018,55325],{"class":2049},[204,140020,260],{"class":214},[204,140022,134153],{"class":319},[204,140024,55333],{"class":2049},[204,140026,260],{"class":214},[204,140028,134160],{"class":319},[204,140030,134163],{"class":2049},[204,140032,260],{"class":214},[204,140034,134168],{"class":319},[204,140036,51393],{"class":214},[19,140038,140039,140040,140043],{},"1 号盒子为 ",[81,140041,140042],{},"news"," 新闻模块 高度为 165px",[23,140045],{"style":25,"src":140046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140048,140049,140050,140053,140054],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[81,140051,140052],{},"news-hd","，下面是 ",[81,140055,140056],{},"news-bd",[19,140058,140006],{},[196,140060,140061],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,140062,140063,140067,140081,140085],{"__ignoreMap":125},[204,140064,140065],{"class":206,"line":207},[204,140066,130747],{"class":273},[204,140068,140069,140071,140073,140075,140077,140079],{"class":206,"line":126},[204,140070,1123],{"class":214},[204,140072,51697],{"class":51386},[204,140074,53572],{"class":2049},[204,140076,260],{"class":214},[204,140078,130760],{"class":319},[204,140080,51393],{"class":214},[204,140082,140083],{"class":206,"line":131},[204,140084,130767],{"class":214},[204,140086,140087,140089,140091],{"class":206,"line":1281},[204,140088,51871],{"class":214},[204,140090,51697],{"class":51386},[204,140092,51393],{"class":214},[19,140094,140095],{},"样式代码：",[196,140097,140098],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,140099,140100,140104,140118,140122],{"__ignoreMap":125},[204,140101,140102],{"class":206,"line":207},[204,140103,130747],{"class":273},[204,140105,140106,140108,140110,140112,140114,140116],{"class":206,"line":126},[204,140107,1123],{"class":214},[204,140109,51697],{"class":51386},[204,140111,53572],{"class":2049},[204,140113,260],{"class":214},[204,140115,130760],{"class":319},[204,140117,51393],{"class":214},[204,140119,140120],{"class":206,"line":131},[204,140121,130767],{"class":214},[204,140123,140124,140126,140128],{"class":206,"line":1281},[204,140125,51871],{"class":214},[204,140127,51697],{"class":51386},[204,140129,51393],{"class":214},[19,140131,140132,140133,140135],{},"上面是",[81,140134,140052],{},"，设置高度是 33px，设置下边框",[68,140137,140138,140144],{},[71,140139,140140,140141,140143],{},"里面放一个",[81,140142,22997],{}," 标题",[71,140145,140146,140147,140149,140150,140152],{},"放一个a",[81,140148,102778],{},"，内容是 更多，然后让 ",[81,140151,62],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140154,140006],{},[196,140156,140157],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,140158,140159,140167,140177,140187],{"__ignoreMap":125},[204,140160,140161,140163,140165],{"class":206,"line":207},[204,140162,51697],{"class":51386},[204,140164,137637],{"class":2049},[204,140166,15659],{"class":214},[204,140168,140169,140171,140173,140175],{"class":206,"line":126},[204,140170,137644],{"class":263},[204,140172,51523],{"class":214},[204,140174,7739],{"class":319},[204,140176,1377],{"class":214},[204,140178,140179,140181,140183,140185],{"class":206,"line":131},[204,140180,128252],{"class":263},[204,140182,51523],{"class":214},[204,140184,60955],{"class":263},[204,140186,1377],{"class":214},[204,140188,140189],{"class":206,"line":1281},[204,140190,1651],{"class":214},[19,140192,140095],{},[196,140194,140195],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,140196,140197,140205,140215,140225],{"__ignoreMap":125},[204,140198,140199,140201,140203],{"class":206,"line":207},[204,140200,51697],{"class":51386},[204,140202,137637],{"class":2049},[204,140204,15659],{"class":214},[204,140206,140207,140209,140211,140213],{"class":206,"line":126},[204,140208,137644],{"class":263},[204,140210,51523],{"class":214},[204,140212,7739],{"class":319},[204,140214,1377],{"class":214},[204,140216,140217,140219,140221,140223],{"class":206,"line":131},[204,140218,128252],{"class":263},[204,140220,51523],{"class":214},[204,140222,60955],{"class":263},[204,140224,1377],{"class":214},[204,140226,140227],{"class":206,"line":1281},[204,140228,1651],{"class":214},[19,140230,140231,140232],{},"下面是",[81,140233,140056],{},[68,140235,140236,140244],{},[71,140237,140238,140239,43,140241,140243],{},"里面包含 ",[81,140240,68],{},[81,140242,71],{}," 还有链接",[71,140245,139716,140246,140248,140249,140251,140252,140255,140256],{},[81,140247,71],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[81,140250,131302],{}," 2.设置 ",[81,140253,140254],{},"white-space: nowrap;"," 3. 设置 ",[81,140257,140258],{},"text-overflow: ellipsis;",[19,140260,140006],{},[196,140262,140264],{"className":126636,"code":140263,"language":126638,"meta":125,"style":125},"div {\n  overflow: hidden;\n}\n",[81,140265,140266,140272,140283],{"__ignoreMap":125},[204,140267,140268,140270],{"class":206,"line":207},[204,140269,51697],{"class":51386},[204,140271,15659],{"class":214},[204,140273,140274,140277,140279,140281],{"class":206,"line":126},[204,140275,140276],{"class":263},"  overflow",[204,140278,51523],{"class":214},[204,140280,61800],{"class":263},[204,140282,1377],{"class":214},[204,140284,140285],{"class":206,"line":131},[204,140286,1651],{"class":214},[19,140288,140095],{},[196,140290,140291],{"className":126636,"code":140263,"language":126638,"meta":125,"style":125},[81,140292,140293,140299,140309],{"__ignoreMap":125},[204,140294,140295,140297],{"class":206,"line":207},[204,140296,51697],{"class":51386},[204,140298,15659],{"class":214},[204,140300,140301,140303,140305,140307],{"class":206,"line":126},[204,140302,140276],{"class":263},[204,140304,51523],{"class":214},[204,140306,61800],{"class":263},[204,140308,1377],{"class":214},[204,140310,140311],{"class":206,"line":131},[204,140312,1651],{"class":214},[19,140314,140315,140316,140319],{},"2 号盒子为 ",[81,140317,140318],{},"lifeservice"," 生活服务模块 高度为 209px",[23,140321],{"style":25,"src":140322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[68,140324,140325,140328,140338,140362,140373],{},[71,140326,140327],{},"设置边框（左右下边框）",[71,140329,140330,140331,140334,140335,140337],{},"里面的内容 是 ",[81,140332,140333],{},"ul > 12*li","，给",[81,140336,71],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[71,140339,140340,140341],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[68,140342,140343,140348,140357],{},[71,140344,140345,140347],{},[81,140346,140318],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[71,140349,140350,140351,140353,140354,140356],{},"可以让 ",[81,140352,140318],{}," 里面的 ",[81,140355,68],{}," 宽度为 252，就可以装的下 4 个 小 li",[71,140358,140359,140361],{},[81,140360,140318],{}," 盒子 overflow 隐藏多余的部分就可以了",[71,140363,116552,140364,140366,140367,140369,140370,140372],{},[81,140365,71],{}," 里面放一个 ",[81,140368,654],{},"（里面放图标），下面的文本用 ",[81,140371,19],{}," 标签包裹",[71,140374,139136,140375,140377,140378,140380,140381,139170,140383,140386],{},[81,140376,654],{}," 设置 24px宽和28px的高（注意 ",[81,140379,654],{}," 是行内元素， 转成行内块），给 ",[81,140382,71],{},[81,140384,140385],{},"text-align:center"," 让里面内容居中显示",[19,140388,140006],{},[196,140390,140392],{"className":126636,"code":140391,"language":126638,"meta":125,"style":125},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[81,140393,140394,140412,140417,140427],{"__ignoreMap":125},[204,140395,140396,140398,140400,140402,140404,140406,140408,140410],{"class":206,"line":207},[204,140397,204],{"class":51386},[204,140399,12522],{"class":214},[204,140401,62],{"class":51386},[204,140403,12522],{"class":214},[204,140405,23640],{"class":51386},[204,140407,12522],{"class":214},[204,140409,30],{"class":51386},[204,140411,15659],{"class":214},[204,140413,140414],{"class":206,"line":126},[204,140415,140416],{"class":273},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[204,140418,140419,140421,140423,140425],{"class":206,"line":131},[204,140420,128252],{"class":263},[204,140422,51523],{"class":214},[204,140424,128314],{"class":263},[204,140426,1377],{"class":214},[204,140428,140429],{"class":206,"line":1281},[204,140430,1651],{"class":214},[19,140432,140095],{},[196,140434,140435],{"className":126636,"code":140391,"language":126638,"meta":125,"style":125},[81,140436,140437,140455,140459,140469],{"__ignoreMap":125},[204,140438,140439,140441,140443,140445,140447,140449,140451,140453],{"class":206,"line":207},[204,140440,204],{"class":51386},[204,140442,12522],{"class":214},[204,140444,62],{"class":51386},[204,140446,12522],{"class":214},[204,140448,23640],{"class":51386},[204,140450,12522],{"class":214},[204,140452,30],{"class":51386},[204,140454,15659],{"class":214},[204,140456,140457],{"class":206,"line":126},[204,140458,140416],{"class":273},[204,140460,140461,140463,140465,140467],{"class":206,"line":131},[204,140462,128252],{"class":263},[204,140464,51523],{"class":214},[204,140466,128314],{"class":263},[204,140468,1377],{"class":214},[204,140470,140471],{"class":206,"line":1281},[204,140472,1651],{"class":214},[19,140474,140475,140476,140479],{},"3 号盒子为 ",[81,140477,140478],{},"bargain"," 特价商品",[68,140481,140482],{},[71,140483,140484],{},"这个比较简单，直接插入一张图片即可",[19,140486,140006],{},[196,140488,140489],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,140490,140491],{"__ignoreMap":125},[204,140492,140493,140495,140497,140499,140501,140503,140505,140507,140509,140511,140513,140515],{"class":206,"line":207},[204,140494,1123],{"class":214},[204,140496,23],{"class":51386},[204,140498,55325],{"class":2049},[204,140500,260],{"class":214},[204,140502,134153],{"class":319},[204,140504,55333],{"class":2049},[204,140506,260],{"class":214},[204,140508,134160],{"class":319},[204,140510,134163],{"class":2049},[204,140512,260],{"class":214},[204,140514,134168],{"class":319},[204,140516,51393],{"class":214},[19,140518,140095],{},[196,140520,140521],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,140522,140523],{"__ignoreMap":125},[204,140524,140525,140527,140529,140531,140533,140535,140537,140539,140541,140543,140545,140547],{"class":206,"line":207},[204,140526,1123],{"class":214},[204,140528,23],{"class":51386},[204,140530,55325],{"class":2049},[204,140532,260],{"class":214},[204,140534,134153],{"class":319},[204,140536,55333],{"class":2049},[204,140538,260],{"class":214},[204,140540,134160],{"class":319},[204,140542,134163],{"class":2049},[204,140544,260],{"class":214},[204,140546,134168],{"class":319},[204,140548,51393],{"class":214},[49,140550,140552],{"id":140551},"_1612-推荐模块制作","16.1.2 推荐模块制作",[23,140554],{"style":25,"src":140555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140557,140558,140559,140562],{},"大盒子 ",[81,140560,140561],{},"recom"," 推荐模块 recommend",[68,140564,140565],{},[71,140566,140567,140568,140570,140571,140574],{},"给这个 ",[81,140569,140561],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[81,140572,140573],{},"#ebebeb","），设置距离上边 12px",[19,140576,140006],{},[196,140578,140580],{"className":126636,"code":140579,"language":126638,"meta":125,"style":125},"div {\n  background-color: #f0f0f0;\n}\n",[81,140581,140582,140588,140599],{"__ignoreMap":125},[204,140583,140584,140586],{"class":206,"line":207},[204,140585,51697],{"class":51386},[204,140587,15659],{"class":214},[204,140589,140590,140592,140594,140597],{"class":206,"line":126},[204,140591,70964],{"class":263},[204,140593,51523],{"class":214},[204,140595,140596],{"class":263},"#f0f0f0",[204,140598,1377],{"class":214},[204,140600,140601],{"class":206,"line":131},[204,140602,1651],{"class":214},[19,140604,140095],{},[196,140606,140607],{"className":126636,"code":140579,"language":126638,"meta":125,"style":125},[81,140608,140609,140615,140625],{"__ignoreMap":125},[204,140610,140611,140613],{"class":206,"line":207},[204,140612,51697],{"class":51386},[204,140614,15659],{"class":214},[204,140616,140617,140619,140621,140623],{"class":206,"line":126},[204,140618,70964],{"class":263},[204,140620,51523],{"class":214},[204,140622,140596],{"class":263},[204,140624,1377],{"class":214},[204,140626,140627],{"class":206,"line":131},[204,140628,1651],{"class":214},[19,140630,140631],{},"里面包含 2 个盒子， 浮动即可",[19,140633,140006],{},[196,140635,140636],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,140637,140638,140644,140654],{"__ignoreMap":125},[204,140639,140640,140642],{"class":206,"line":207},[204,140641,130484],{"class":2049},[204,140643,15659],{"class":214},[204,140645,140646,140648,140650,140652],{"class":206,"line":126},[204,140647,131116],{"class":263},[204,140649,51523],{"class":214},[204,140651,23823],{"class":263},[204,140653,1377],{"class":214},[204,140655,140656],{"class":206,"line":131},[204,140657,1651],{"class":214},[19,140659,140660,140661],{},"1 号盒子 ",[81,140662,140663],{},"recom_hd",[68,140665,140666,140669],{},[71,140667,140668],{},"设置宽度205px，高度163px",[71,140670,140140,140671,140673],{},[81,140672,23],{},"标签，插入图片即可",[19,140675,140006],{},[196,140677,140678],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,140679,140680],{"__ignoreMap":125},[204,140681,140682,140684,140686,140688,140690,140692,140694,140696,140698,140700,140702,140704],{"class":206,"line":207},[204,140683,1123],{"class":214},[204,140685,23],{"class":51386},[204,140687,55325],{"class":2049},[204,140689,260],{"class":214},[204,140691,134153],{"class":319},[204,140693,55333],{"class":2049},[204,140695,260],{"class":214},[204,140697,134160],{"class":319},[204,140699,134163],{"class":2049},[204,140701,260],{"class":214},[204,140703,134168],{"class":319},[204,140705,51393],{"class":214},[19,140707,140095],{},[196,140709,140710],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,140711,140712],{"__ignoreMap":125},[204,140713,140714,140716,140718,140720,140722,140724,140726,140728,140730,140732,140734,140736],{"class":206,"line":207},[204,140715,1123],{"class":214},[204,140717,23],{"class":51386},[204,140719,55325],{"class":2049},[204,140721,260],{"class":214},[204,140723,134153],{"class":319},[204,140725,55333],{"class":2049},[204,140727,260],{"class":214},[204,140729,134160],{"class":319},[204,140731,134163],{"class":2049},[204,140733,260],{"class":214},[204,140735,134168],{"class":319},[204,140737,51393],{"class":214},[19,140739,140740,140741,140744],{},"2 号盒子 ",[81,140742,140743],{},"recom_bd"," ，注意里面的小竖线",[68,140746,140747,140758,140761,140766,140771],{},[71,140748,140749,140750,140752,140753,140755,140756],{},"右侧结构里面放 ",[81,140751,68],{}," 包含 4个 ",[81,140754,71],{},"，每个li里面包含一个",[81,140757,23],{},[71,140759,140760],{},"直接利用切片工具把里面的内容当成一张图片",[71,140762,139136,140763,140765],{},[81,140764,71],{}," 设置浮动",[71,140767,139136,140768,140770],{},[81,140769,23],{}," 设置宽高，宽度 248px，高度 163px",[71,140772,140773,140774,140334,140777,140779,140780,140782,140783],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[81,140775,140776],{},"top 10px",[81,140778,71],{},"设置相对定位（注意，最后一个",[81,140781,71],{},"不用设置伪元素），可以利用 ",[81,140784,140785],{},"nth-child(-n+3){...}",[19,140787,140006],{},[196,140789,140790],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,140791,140792,140800,140810,140820],{"__ignoreMap":125},[204,140793,140794,140796,140798],{"class":206,"line":207},[204,140795,51697],{"class":51386},[204,140797,137637],{"class":2049},[204,140799,15659],{"class":214},[204,140801,140802,140804,140806,140808],{"class":206,"line":126},[204,140803,137644],{"class":263},[204,140805,51523],{"class":214},[204,140807,7739],{"class":319},[204,140809,1377],{"class":214},[204,140811,140812,140814,140816,140818],{"class":206,"line":131},[204,140813,128252],{"class":263},[204,140815,51523],{"class":214},[204,140817,60955],{"class":263},[204,140819,1377],{"class":214},[204,140821,140822],{"class":206,"line":1281},[204,140823,1651],{"class":214},[19,140825,140095],{},[196,140827,140828],{"className":126636,"code":138478,"language":126638,"meta":125,"style":125},[81,140829,140830,140838,140848,140858],{"__ignoreMap":125},[204,140831,140832,140834,140836],{"class":206,"line":207},[204,140833,51697],{"class":51386},[204,140835,137637],{"class":2049},[204,140837,15659],{"class":214},[204,140839,140840,140842,140844,140846],{"class":206,"line":126},[204,140841,137644],{"class":263},[204,140843,51523],{"class":214},[204,140845,7739],{"class":319},[204,140847,1377],{"class":214},[204,140849,140850,140852,140854,140856],{"class":206,"line":131},[204,140851,128252],{"class":263},[204,140853,51523],{"class":214},[204,140855,60955],{"class":263},[204,140857,1377],{"class":214},[204,140859,140860],{"class":206,"line":1281},[204,140861,1651],{"class":214},[49,140863,140865],{"id":140864},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[23,140867],{"style":25,"src":140868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140870,140871],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140873,140874],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140876,140877,140880],{},[81,140878,140879],{},"box_hd"," 制作",[19,140882,140660,140883,140885],{},[81,140884,140879],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[23,140887],{"style":25,"src":140888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[68,140890,140891,140896,140901,140904],{},[71,140892,140893,140895],{},[81,140894,140879],{}," 给 30px 的高度，2个像素的下边框",[71,140897,140898,140899],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[81,140900,139147],{},[71,140902,140903],{},"左侧盒左浮动，右侧盒子右浮动",[71,140905,140906,140908,140909,140911],{},[81,140907,62],{},"标签之间的距离用左右的",[81,140910,30969],{},"撑开即可",[19,140913,140914],{},"结构代码",[196,140916,140917],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,140918,140919,140925,140935],{"__ignoreMap":125},[204,140920,140921,140923],{"class":206,"line":207},[204,140922,130484],{"class":2049},[204,140924,15659],{"class":214},[204,140926,140927,140929,140931,140933],{"class":206,"line":126},[204,140928,131116],{"class":263},[204,140930,51523],{"class":214},[204,140932,23823],{"class":263},[204,140934,1377],{"class":214},[204,140936,140937],{"class":206,"line":131},[204,140938,1651],{"class":214},[19,140940,140941],{},"样式代码",[196,140943,140944],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,140945,140946,140952,140962],{"__ignoreMap":125},[204,140947,140948,140950],{"class":206,"line":207},[204,140949,130484],{"class":2049},[204,140951,15659],{"class":214},[204,140953,140954,140956,140958,140960],{"class":206,"line":126},[204,140955,131116],{"class":263},[204,140957,51523],{"class":214},[204,140959,23823],{"class":263},[204,140961,1377],{"class":214},[204,140963,140964],{"class":206,"line":131},[204,140965,1651],{"class":214},[19,140967,140968,140880],{},[81,140969,140970],{},"box_bd",[19,140972,140973],{},"2 号盒子 box_bd，不要给高度",[23,140975],{"style":25,"src":140976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,140978,140979],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,140981,140982],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,140984,140985],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[68,140987,140988,141000,141016],{},[71,140989,140990,140992,140993,140996,140997,140999],{},[81,140991,140970],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[81,140994,140995],{},"tab_content","，在",[81,140998,140995],{}," 里面包裹tab选项卡对应的内容",[71,141001,141002,141003,141006,141007,141009,141010,141012,141013,141015],{},"内容被一个大盒子包裹（",[81,141004,141005],{},"tab_list_item","），里面是 ",[81,141008,68],{}," 包裹 5个 ",[81,141011,71],{},"，每个",[81,141014,71],{},"设置对应的宽度，然后设置浮动",[71,141017,141018,141019,141021,141022,141024,141025],{},"而这5个",[81,141020,71],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[81,141023,71],{},"设置",[68,141026,141027,141045,141048],{},[71,141028,141029,141030,141032,141033,141035,141036,141038,141039,141041,141042,141044],{},"第一个小 ",[81,141031,71],{}," 分为上下结构，上面是 ",[81,141034,68],{}," 包裹 ",[81,141037,71],{}," ，",[81,141040,71],{},"里面包裹 ",[81,141043,62],{},"，下面插入一张图片",[71,141046,141047],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[71,141049,141050,141051,141053,141054,141056,141057,141059],{},"后面的小 ",[81,141052,71],{}," 里面先放一个",[81,141055,62],{},"标签，然后在",[81,141058,62],{},"标签里面插入图片即可",[19,141061,140914],{},[196,141063,141064],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,141065,141066],{"__ignoreMap":125},[204,141067,141068,141070,141072,141074,141076,141078,141080,141082,141084,141086,141088,141090],{"class":206,"line":207},[204,141069,1123],{"class":214},[204,141071,23],{"class":51386},[204,141073,55325],{"class":2049},[204,141075,260],{"class":214},[204,141077,134153],{"class":319},[204,141079,55333],{"class":2049},[204,141081,260],{"class":214},[204,141083,134160],{"class":319},[204,141085,134163],{"class":2049},[204,141087,260],{"class":214},[204,141089,134168],{"class":319},[204,141091,51393],{"class":214},[19,141093,140941],{},[196,141095,141096],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,141097,141098],{"__ignoreMap":125},[204,141099,141100,141102,141104,141106,141108,141110,141112,141114,141116,141118,141120,141122],{"class":206,"line":207},[204,141101,1123],{"class":214},[204,141103,23],{"class":51386},[204,141105,55325],{"class":2049},[204,141107,260],{"class":214},[204,141109,134153],{"class":319},[204,141111,55333],{"class":2049},[204,141113,260],{"class":214},[204,141115,134160],{"class":319},[204,141117,134163],{"class":2049},[204,141119,260],{"class":214},[204,141121,134168],{"class":319},[204,141123,51393],{"class":214},[19,141125,141126],{},"tab栏切换需求！！！！！！介绍：",[23,141128],{"style":25,"src":141129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[68,141131,141132,141140,141146,141149],{},[71,141133,141134,141137,141138],{},[81,141135,141136],{},"tab","栏的布局是 ",[81,141139,139147],{},[71,141141,141142,141143,141145],{},"有多少个",[81,141144,141136],{},"选项卡，那么对应就有多少个内容",[71,141147,141148],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[71,141150,141151,141152,141155,141156,141158,141159,141161],{},"等后面我们学习了",[81,141153,141154],{},"js","之后，我们就会配合",[81,141157,141154],{},"来实现，",[81,141160,141136],{},"栏的切换",[14,141163,141165],{"id":141164},"_162-列表制作","16.2 列表制作",[49,141167,141169],{"id":141168},"_1621-准备工作","16.2.1 准备工作",[68,141171,141172,141175,141178,141181],{},[71,141173,141174],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[71,141176,141177],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[71,141179,141180],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[71,141182,141183],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[49,141185,141187,141188,43,141190,141192],{"id":141186},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[81,141189,131641],{},[81,141191,53799],{}," 修改",[23,141194],{"style":25,"src":141195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[68,141197,141198],{},[71,141199,141200],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141202,140006],{},[196,141204,141205],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,141206,141207,141211,141225,141229,141243,141247,141261,141265,141279,141283],{"__ignoreMap":125},[204,141208,141209],{"class":206,"line":207},[204,141210,132075],{"class":273},[204,141212,141213,141215,141217,141219,141221,141223],{"class":206,"line":126},[204,141214,132080],{"class":2049},[204,141216,79893],{"class":214},[204,141218,128996],{"class":263},[204,141220,51523],{"class":214},[204,141222,132089],{"class":263},[204,141224,129566],{"class":214},[204,141226,141227],{"class":206,"line":131},[204,141228,132096],{"class":273},[204,141230,141231,141233,141235,141237,141239,141241],{"class":206,"line":1281},[204,141232,132101],{"class":2049},[204,141234,79893],{"class":214},[204,141236,128996],{"class":263},[204,141238,51523],{"class":214},[204,141240,54850],{"class":263},[204,141242,129566],{"class":214},[204,141244,141245],{"class":206,"line":1287},[204,141246,132116],{"class":273},[204,141248,141249,141251,141253,141255,141257,141259],{"class":206,"line":1301},[204,141250,132121],{"class":2049},[204,141252,79893],{"class":214},[204,141254,128996],{"class":263},[204,141256,51523],{"class":214},[204,141258,54917],{"class":263},[204,141260,129566],{"class":214},[204,141262,141263],{"class":206,"line":1307},[204,141264,132136],{"class":273},[204,141266,141267,141269,141271,141273,141275,141277],{"class":206,"line":1398},[204,141268,132141],{"class":2049},[204,141270,79893],{"class":214},[204,141272,128996],{"class":263},[204,141274,51523],{"class":214},[204,141276,86319],{"class":263},[204,141278,129566],{"class":214},[204,141280,141281],{"class":206,"line":1404},[204,141282,132156],{"class":273},[204,141284,141285,141287,141289,141291,141293,141295],{"class":206,"line":1416},[204,141286,132161],{"class":2049},[204,141288,79893],{"class":214},[204,141290,128996],{"class":263},[204,141292,51523],{"class":214},[204,141294,132170],{"class":263},[204,141296,129566],{"class":214},[19,141298,140095],{},[196,141300,141301],{"className":126636,"code":132068,"language":126638,"meta":125,"style":125},[81,141302,141303,141307,141321,141325,141339,141343,141357,141361,141375,141379],{"__ignoreMap":125},[204,141304,141305],{"class":206,"line":207},[204,141306,132075],{"class":273},[204,141308,141309,141311,141313,141315,141317,141319],{"class":206,"line":126},[204,141310,132080],{"class":2049},[204,141312,79893],{"class":214},[204,141314,128996],{"class":263},[204,141316,51523],{"class":214},[204,141318,132089],{"class":263},[204,141320,129566],{"class":214},[204,141322,141323],{"class":206,"line":131},[204,141324,132096],{"class":273},[204,141326,141327,141329,141331,141333,141335,141337],{"class":206,"line":1281},[204,141328,132101],{"class":2049},[204,141330,79893],{"class":214},[204,141332,128996],{"class":263},[204,141334,51523],{"class":214},[204,141336,54850],{"class":263},[204,141338,129566],{"class":214},[204,141340,141341],{"class":206,"line":1287},[204,141342,132116],{"class":273},[204,141344,141345,141347,141349,141351,141353,141355],{"class":206,"line":1301},[204,141346,132121],{"class":2049},[204,141348,79893],{"class":214},[204,141350,128996],{"class":263},[204,141352,51523],{"class":214},[204,141354,54917],{"class":263},[204,141356,129566],{"class":214},[204,141358,141359],{"class":206,"line":1307},[204,141360,132136],{"class":273},[204,141362,141363,141365,141367,141369,141371,141373],{"class":206,"line":1398},[204,141364,132141],{"class":2049},[204,141366,79893],{"class":214},[204,141368,128996],{"class":263},[204,141370,51523],{"class":214},[204,141372,86319],{"class":263},[204,141374,129566],{"class":214},[204,141376,141377],{"class":206,"line":1404},[204,141378,132156],{"class":273},[204,141380,141381,141383,141385,141387,141389,141391],{"class":206,"line":1416},[204,141382,132161],{"class":2049},[204,141384,79893],{"class":214},[204,141386,128996],{"class":263},[204,141388,51523],{"class":214},[204,141390,132170],{"class":263},[204,141392,129566],{"class":214},[68,141394,141395,141406],{},[71,141396,141397,141398,141401,141402,43,141404],{},"1 号盒子左侧浮动 ",[81,141399,141400],{},"sk_list"," 里面包含 ",[81,141403,68],{},[81,141405,71],{},[71,141407,141408,141409,141401,141412,43,141414],{},"2 号盒子左侧浮动 ",[81,141410,141411],{},"sk_con",[81,141413,68],{},[81,141415,71],{},[19,141417,140006],{},[196,141419,141420],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,141421,141422,141428,141438],{"__ignoreMap":125},[204,141423,141424,141426],{"class":206,"line":207},[204,141425,130484],{"class":2049},[204,141427,15659],{"class":214},[204,141429,141430,141432,141434,141436],{"class":206,"line":126},[204,141431,131116],{"class":263},[204,141433,51523],{"class":214},[204,141435,23823],{"class":263},[204,141437,1377],{"class":214},[204,141439,141440],{"class":206,"line":131},[204,141441,1651],{"class":214},[19,141443,140095],{},[196,141445,141446],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,141447,141448,141454,141464],{"__ignoreMap":125},[204,141449,141450,141452],{"class":206,"line":207},[204,141451,130484],{"class":2049},[204,141453,15659],{"class":214},[204,141455,141456,141458,141460,141462],{"class":206,"line":126},[204,141457,131116],{"class":263},[204,141459,51523],{"class":214},[204,141461,23823],{"class":263},[204,141463,1377],{"class":214},[204,141465,141466],{"class":206,"line":131},[204,141467,1651],{"class":214},[49,141469,141471,141472],{"id":141470},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[81,141473,141474],{},"sk_container",[23,141476],{"style":25,"src":141477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[68,141479,141480,141485],{},[71,141481,140660,141482,141484],{},[81,141483,141474],{}," 给宽度 1200，不要给高度",[71,141486,141487],{},"一定不要忘记清除浮动",[19,141489,140006],{},[196,141491,141492],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,141493,141494,141500,141510],{"__ignoreMap":125},[204,141495,141496,141498],{"class":206,"line":207},[204,141497,130484],{"class":2049},[204,141499,15659],{"class":214},[204,141501,141502,141504,141506,141508],{"class":206,"line":126},[204,141503,131116],{"class":263},[204,141505,51523],{"class":214},[204,141507,23823],{"class":263},[204,141509,1377],{"class":214},[204,141511,141512],{"class":206,"line":131},[204,141513,1651],{"class":214},[161,141515,141516],{},[71,141517,141518],{},"sk_hd制作",[68,141520,141521],{},[71,141522,140740,141523,141526],{},[81,141524,141525],{},"sk_hd"," ，插入图片即可",[19,141528,140006],{},[196,141530,141531],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,141532,141533],{"__ignoreMap":125},[204,141534,141535,141537,141539,141541,141543,141545,141547,141549,141551,141553,141555,141557],{"class":206,"line":207},[204,141536,1123],{"class":214},[204,141538,23],{"class":51386},[204,141540,55325],{"class":2049},[204,141542,260],{"class":214},[204,141544,134153],{"class":319},[204,141546,55333],{"class":2049},[204,141548,260],{"class":214},[204,141550,134160],{"class":319},[204,141552,134163],{"class":2049},[204,141554,260],{"class":214},[204,141556,134168],{"class":319},[204,141558,51393],{"class":214},[161,141560,141561],{"start":126},[71,141562,141563],{},"sk_bd制作",[68,141565,141566],{},[71,141567,141568,141569,141572,141573,43,141575,141577],{},"3 号盒子 ",[81,141570,141571],{},"sk_bd"," ，里面包含很多的 ",[81,141574,68],{},[81,141576,71],{},[68,141578,141579,141588],{},[71,141580,141581,141582,141584,141585,141587],{},"当鼠标移入到 ",[81,141583,71],{}," 上面的时候显示红色的边框，在这里先给 ",[81,141586,71],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[71,141589,141590,141591,141593,141594,141596,141597,141600,141601,141603],{},"由于给每个 ",[81,141592,71],{}," 都设置了外边距，导致一行的最后一个 ",[81,141595,71],{}," 掉了下来，在这里我们利用 ",[81,141598,141599],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[81,141602,71],{},"，去掉外边距就好了",[19,141605,140006],{},[196,141607,141608],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,141609,141610,141616,141628],{"__ignoreMap":125},[204,141611,141612,141614],{"class":206,"line":207},[204,141613,51697],{"class":51386},[204,141615,15659],{"class":214},[204,141617,141618,141620,141622,141624,141626],{"class":206,"line":126},[204,141619,70556],{"class":263},[204,141621,51523],{"class":214},[204,141623,405],{"class":263},[204,141625,51642],{"class":263},[204,141627,1377],{"class":214},[204,141629,141630],{"class":206,"line":131},[204,141631,1651],{"class":214},[19,141633,140095],{},[196,141635,141636],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,141637,141638,141644,141656],{"__ignoreMap":125},[204,141639,141640,141642],{"class":206,"line":207},[204,141641,51697],{"class":51386},[204,141643,15659],{"class":214},[204,141645,141646,141648,141650,141652,141654],{"class":206,"line":126},[204,141647,70556],{"class":263},[204,141649,51523],{"class":214},[204,141651,405],{"class":263},[204,141653,51642],{"class":263},[204,141655,1377],{"class":214},[204,141657,141658],{"class":206,"line":131},[204,141659,1651],{"class":214},[14,141661,141663],{"id":141662},"_163-注册页面制作","16.3 注册页面制作",[23,141665],{"style":25,"src":141666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141668,141669,141671],{},[30,141670,9112],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[23,141673],{"style":25,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[49,141676,141678],{"id":141677},"_1631-准备工作","16.3.1 准备工作",[68,141680,141681,141684],{},[71,141682,141683],{},"创建register.html，引入 base.css，引入favicon图标",[71,141685,141686],{},"创建register.css ，在html页面进行引入",[49,141688,141690,141691,141693],{"id":141689},"_1632-header-头部实现","16.3.2 ",[81,141692,131641],{}," 头部实现",[68,141695,141696,141699],{},[71,141697,141698],{},"整个内容用 版心 进行包裹",[71,141700,141701],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141703,140006],{},[196,141705,141706],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,141707,141708],{"__ignoreMap":125},[204,141709,141710,141712,141714,141716,141718,141720,141722,141724,141726,141728,141730,141732],{"class":206,"line":207},[204,141711,1123],{"class":214},[204,141713,23],{"class":51386},[204,141715,55325],{"class":2049},[204,141717,260],{"class":214},[204,141719,134153],{"class":319},[204,141721,55333],{"class":2049},[204,141723,260],{"class":214},[204,141725,134160],{"class":319},[204,141727,134163],{"class":2049},[204,141729,260],{"class":214},[204,141731,134168],{"class":319},[204,141733,51393],{"class":214},[19,141735,140095],{},[196,141737,141738],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,141739,141740],{"__ignoreMap":125},[204,141741,141742,141744,141746,141748,141750,141752,141754,141756,141758,141760,141762,141764],{"class":206,"line":207},[204,141743,1123],{"class":214},[204,141745,23],{"class":51386},[204,141747,55325],{"class":2049},[204,141749,260],{"class":214},[204,141751,134153],{"class":319},[204,141753,55333],{"class":2049},[204,141755,260],{"class":214},[204,141757,134160],{"class":319},[204,141759,134163],{"class":2049},[204,141761,260],{"class":214},[204,141763,134168],{"class":319},[204,141765,51393],{"class":214},[49,141767,141769,141770,141773],{"id":141768},"_1633-registerarea-主体模块实现","16.3.3 ",[81,141771,141772],{},"registerarea"," 主体模块实现",[23,141775],{"style":25,"src":141776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141778,141779],{},"整个大盒子 高度为 522px，设置4个边框",[19,141781,140006],{},[196,141783,141784],{"className":126636,"code":130793,"language":126638,"meta":125,"style":125},[81,141785,141786,141792,141808],{"__ignoreMap":125},[204,141787,141788,141790],{"class":206,"line":207},[204,141789,51697],{"class":51386},[204,141791,15659],{"class":214},[204,141793,141794,141796,141798,141800,141802,141804,141806],{"class":206,"line":126},[204,141795,70982],{"class":263},[204,141797,51523],{"class":214},[204,141799,431],{"class":263},[204,141801,51578],{"class":210},[204,141803,51607],{"class":263},[204,141805,130028],{"class":263},[204,141807,1377],{"class":214},[204,141809,141810],{"class":206,"line":131},[204,141811,1651],{"class":214},[19,141813,140095],{},[196,141815,141816],{"className":126636,"code":130793,"language":126638,"meta":125,"style":125},[81,141817,141818,141824,141840],{"__ignoreMap":125},[204,141819,141820,141822],{"class":206,"line":207},[204,141821,51697],{"class":51386},[204,141823,15659],{"class":214},[204,141825,141826,141828,141830,141832,141834,141836,141838],{"class":206,"line":126},[204,141827,70982],{"class":263},[204,141829,51523],{"class":214},[204,141831,431],{"class":263},[204,141833,51578],{"class":210},[204,141835,51607],{"class":263},[204,141837,130028],{"class":263},[204,141839,1377],{"class":214},[204,141841,141842],{"class":206,"line":131},[204,141843,1651],{"class":214},[19,141845,141846],{},"1号盒子 是一个 h3 标签，放标题",[68,141848,141849],{},[71,141850,141851],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141853,140006],{},[196,141855,141856],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,141857,141858,141864,141874],{"__ignoreMap":125},[204,141859,141860,141862],{"class":206,"line":207},[204,141861,130484],{"class":2049},[204,141863,15659],{"class":214},[204,141865,141866,141868,141870,141872],{"class":206,"line":126},[204,141867,131116],{"class":263},[204,141869,51523],{"class":214},[204,141871,23823],{"class":263},[204,141873,1377],{"class":214},[204,141875,141876],{"class":206,"line":131},[204,141877,1651],{"class":214},[19,141879,140095],{},[196,141881,141882],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,141883,141884,141890,141900],{"__ignoreMap":125},[204,141885,141886,141888],{"class":206,"line":207},[204,141887,130484],{"class":2049},[204,141889,15659],{"class":214},[204,141891,141892,141894,141896,141898],{"class":206,"line":126},[204,141893,131116],{"class":263},[204,141895,51523],{"class":214},[204,141897,23823],{"class":263},[204,141899,1377],{"class":214},[204,141901,141902],{"class":206,"line":131},[204,141903,1651],{"class":214},[19,141905,141906],{},"2号盒子 里面放注册的内容",[68,141908,141909,141912,141921,141935,141948,141951,141954,141972,141986],{},[71,141910,141911],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[71,141913,141914,141915,141917,141918,141920],{},"里面的内容利用 ",[81,141916,68],{}," 包含 ",[81,141919,71],{}," 来实现的（不需要用表格）",[71,141922,139150,141923,141925,141926,141928,141929,141931,141932,141934],{},[81,141924,71],{}," 里面，左侧放 ",[81,141927,33694],{}," 标签， 中间放",[81,141930,53907],{}," 标签， 右侧放 ",[81,141933,204],{}," 提示信息",[71,141936,141937,141938,141940,141941,141943,141944,141947],{},"左侧 ",[81,141939,33694],{},"里面的文字都是右对齐，我们可以给",[81,141942,33694],{},"设置一个宽度（88px），然后利用",[81,141945,141946],{},"text-align"," 来设置右对齐",[71,141949,141950],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[71,141952,141953],{},"右侧 span修饰一下文字颜色",[71,141955,141956,141957],{},"提示信息的样式优化",[68,141958,141959,141962,141965],{},[71,141960,141961],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[71,141963,141964],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[71,141966,141967,141968,141971],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[81,141969,141970],{},"vertical-algin"," 来设置 图片与文字对齐方式",[71,141973,141974,141975],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[68,141976,141977,141983],{},[71,141978,141979,141980,141982],{},"设置 ",[81,141981,23640],{}," 的 左右 12px 的内边距，设置一下文字颜色",[71,141984,141985],{},"分别设置 背景颜色",[71,141987,141988,141989,141991],{},"同意协议 和 完成注册 都是用 ",[81,141990,71],{}," 进行包裹",[19,141993,140006],{},[196,141995,141996],{"className":126636,"code":140579,"language":126638,"meta":125,"style":125},[81,141997,141998,142004,142014],{"__ignoreMap":125},[204,141999,142000,142002],{"class":206,"line":207},[204,142001,51697],{"class":51386},[204,142003,15659],{"class":214},[204,142005,142006,142008,142010,142012],{"class":206,"line":126},[204,142007,70964],{"class":263},[204,142009,51523],{"class":214},[204,142011,140596],{"class":263},[204,142013,1377],{"class":214},[204,142015,142016],{"class":206,"line":131},[204,142017,1651],{"class":214},[19,142019,140095],{},[196,142021,142022],{"className":126636,"code":140579,"language":126638,"meta":125,"style":125},[81,142023,142024,142030,142040],{"__ignoreMap":125},[204,142025,142026,142028],{"class":206,"line":207},[204,142027,51697],{"class":51386},[204,142029,15659],{"class":214},[204,142031,142032,142034,142036,142038],{"class":206,"line":126},[204,142033,70964],{"class":263},[204,142035,51523],{"class":214},[204,142037,140596],{"class":263},[204,142039,1377],{"class":214},[204,142041,142042],{"class":206,"line":131},[204,142043,1651],{"class":214},[49,142045,142047],{"id":142046},"_1634-底部实现","16.3.4 底部实现",[19,142049,140006],{},[196,142051,142052],{"className":126636,"code":140579,"language":126638,"meta":125,"style":125},[81,142053,142054,142060,142070],{"__ignoreMap":125},[204,142055,142056,142058],{"class":206,"line":207},[204,142057,51697],{"class":51386},[204,142059,15659],{"class":214},[204,142061,142062,142064,142066,142068],{"class":206,"line":126},[204,142063,70964],{"class":263},[204,142065,51523],{"class":214},[204,142067,140596],{"class":263},[204,142069,1377],{"class":214},[204,142071,142072],{"class":206,"line":131},[204,142073,1651],{"class":214},[19,142075,140095],{},[196,142077,142078],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,142079,142080,142084,142098,142102],{"__ignoreMap":125},[204,142081,142082],{"class":206,"line":207},[204,142083,130747],{"class":273},[204,142085,142086,142088,142090,142092,142094,142096],{"class":206,"line":126},[204,142087,1123],{"class":214},[204,142089,51697],{"class":51386},[204,142091,53572],{"class":2049},[204,142093,260],{"class":214},[204,142095,130760],{"class":319},[204,142097,51393],{"class":214},[204,142099,142100],{"class":206,"line":131},[204,142101,130767],{"class":214},[204,142103,142104,142106,142108],{"class":206,"line":1281},[204,142105,51871],{"class":214},[204,142107,51697],{"class":51386},[204,142109,51393],{"class":214},[14,142111,142113],{"id":142112},"_164-项目总结","16.4 项目总结",[161,142115,142116,142119,142122,142125],{},[71,142117,142118],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[71,142120,142121],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[71,142123,142124],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[71,142126,142127],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[23,142129],{"style":25,"src":142130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[161,142132,142133],{"start":1287},[71,142134,142135],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[23,142137],{"style":25,"src":142138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[161,142140,142141],{"start":1301},[71,142142,142143],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[23,142145],{"style":25,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[196,142148,142149],{"className":127383,"code":136793,"language":127385,"meta":125,"style":125},[81,142150,142151],{"__ignoreMap":125},[204,142152,142153,142155,142157,142159,142161,142163,142165,142167,142169,142171,142173,142175],{"class":206,"line":207},[204,142154,1123],{"class":214},[204,142156,53907],{"class":51386},[204,142158,53910],{"class":2049},[204,142160,260],{"class":214},[204,142162,62785],{"class":319},[204,142164,15007],{"class":2049},[204,142166,260],{"class":214},[204,142168,136814],{"class":319},[204,142170,61106],{"class":2049},[204,142172,260],{"class":214},[204,142174,136821],{"class":319},[204,142176,51393],{"class":214},[161,142178,142179,142182],{"start":1307},[71,142180,142181],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[71,142183,142184],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5213,142186,142187],{},"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":125,"searchDepth":126,"depth":126,"links":142189},[142190,142195,142202,142210],{"id":139816,"depth":126,"text":139817,"children":142191},[142192,142193,142194],{"id":139820,"depth":131,"text":139821},{"id":140551,"depth":131,"text":140552},{"id":140864,"depth":131,"text":140865},{"id":141164,"depth":126,"text":141165,"children":142196},[142197,142198,142200],{"id":141168,"depth":131,"text":141169},{"id":141186,"depth":131,"text":142199},"16.2.2 列表页 header 和 nav 修改",{"id":141470,"depth":131,"text":142201},"16.2.3 列表页主体 sk_container",{"id":141662,"depth":126,"text":141663,"children":142203},[142204,142205,142207,142209],{"id":141677,"depth":131,"text":141678},{"id":141689,"depth":131,"text":142206},"16.3.2 header 头部实现",{"id":141768,"depth":131,"text":142208},"16.3.3 registerarea 主体模块实现",{"id":142046,"depth":131,"text":142047},{"id":142112,"depth":126,"text":142113},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139808,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":4,"title":5,"body":142217,"description":132,"extension":133,"meta":142291,"navigation":135,"path":136,"seo":142292,"stem":138,"__hash__":139},{"type":7,"value":142218,"toc":142286},[142219,142221,142223,142225,142227,142233,142239,142241,142245,142250,142262,142264,142266,142268,142270,142272,142274,142276,142278,142280,142282,142284],[10,142220,5],{"id":12},[14,142222,17],{"id":16},[19,142224,21],{},[23,142226],{"style":25,"src":26},[19,142228,142229,33,142231],{},[30,142230,32],{},[30,142232,36],{},[19,142234,39,142235,43,142237,47],{},[30,142236,42],{},[30,142238,46],{},[49,142240,52],{"id":51},[19,142242,142243],{},[30,142244,57],{},[19,142246,60,142247],{},[62,142248,64],{"href":64,"rel":142249},[66],[68,142251,142252,142254,142256,142260],{},[71,142253,73],{},[71,142255,76],{},[71,142257,79,142258,84],{},[81,142259,83],{},[71,142261,87],{},[19,142263,90],{},[23,142265],{"style":25,"src":93},[23,142267],{"style":25,"src":96},[19,142269,99],{},[23,142271],{"style":25,"src":102},[23,142273],{"style":25,"src":105},[23,142275],{"style":25,"src":108},[23,142277],{"style":25,"src":111},[19,142279,114],{},[23,142281],{"style":25,"src":117},[19,142283,120],{},[19,142285,123],{},{"title":125,"searchDepth":126,"depth":126,"links":142287},[142288],{"id":16,"depth":126,"text":17,"children":142289},[142290],{"id":51,"depth":131,"text":52},{},{"title":5,"description":132},{"id":142294,"title":142295,"body":142296,"description":132,"extension":133,"meta":143223,"navigation":135,"path":143224,"seo":143225,"stem":143226,"__hash__":143227},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142297,"toc":143206},[142298,142301,142305,142308,142311,142322,142325,142329,142333,142338,142341,142344,142347,142350,142354,142380,142384,142388,142391,142394,142398,142431,142435,142438,142441,142505,142509,142513,142516,142519,142522,142526,142571,142575,142578,142608,142612,142616,142619,142622,142626,142629,142698,142701,142809,142811,142817,142821,142824,142827,142923,142926,142930,142954,142958,142961,142965,142968,142972,142975,142978,142981,142984,142988,142991,142994,142998,143002,143005,143008,143011,143014,143018,143021,143025,143028,143031,143076,143080,143084,143087,143090,143093,143125,143129,143132,143166,143170,143173,143203],[10,142299,142295],{"id":142300},"_18-2d动画与3d转换",[14,142302,142304],{"id":142303},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142306,142307],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142309,142310],{},"转换（transform）你可以简单理解为变形",[68,142312,142313,142316,142319],{},[71,142314,142315],{},"移动：translate",[71,142317,142318],{},"旋转：rotate",[71,142320,142321],{},"缩放：scale",[23,142323],{"style":25,"src":142324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[49,142326,142328],{"id":142327},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22085,142330,142332],{"id":142331},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142334,142335,142336],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[30,142337,133295],{},[23,142339],{"style":25,"src":142340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142342,142343],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142345,142346],{},"对于行内元素无效",[19,142348,142349],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22085,142351,142353],{"id":142352},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[196,142355,142356],{"className":126636,"code":138825,"language":126638,"meta":125,"style":125},[81,142357,142358,142364,142376],{"__ignoreMap":125},[204,142359,142360,142362],{"class":206,"line":207},[204,142361,51697],{"class":51386},[204,142363,15659],{"class":214},[204,142365,142366,142368,142370,142372,142374],{"class":206,"line":126},[204,142367,70556],{"class":263},[204,142369,51523],{"class":214},[204,142371,405],{"class":263},[204,142373,51642],{"class":263},[204,142375,1377],{"class":214},[204,142377,142378],{"class":206,"line":131},[204,142379,1651],{"class":214},[49,142381,142383],{"id":142382},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22085,142385,142387],{"id":142386},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142389,142390],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[23,142392],{"style":25,"src":142393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22085,142395,142397],{"id":142396},"_18122-旋转效果","18.1.2.2 旋转效果",[196,142399,142401],{"className":126636,"code":142400,"language":126638,"meta":125,"style":125},"div {\n  transform: rotate(45deg);\n}\n",[81,142402,142403,142409,142427],{"__ignoreMap":125},[204,142404,142405,142407],{"class":206,"line":207},[204,142406,51697],{"class":51386},[204,142408,15659],{"class":214},[204,142410,142411,142413,142415,142418,142420,142422,142425],{"class":206,"line":126},[204,142412,136620],{"class":263},[204,142414,51523],{"class":214},[204,142416,142417],{"class":263},"rotate",[204,142419,215],{"class":214},[204,142421,742],{"class":263},[204,142423,142424],{"class":210},"deg",[204,142426,2805],{"class":214},[204,142428,142429],{"class":206,"line":131},[204,142430,1651],{"class":214},[22085,142432,142434],{"id":142433},"_18123-三角做法","18.1.2.3 三角做法",[19,142436,142437],{},"该下标当经过最外层大盒子时会实现向上反转",[23,142439],{"style":25,"src":142440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[196,142442,142443],{"className":126636,"code":135156,"language":126638,"meta":125,"style":125},[81,142444,142445,142449,142455,142465,142475,142491,142501],{"__ignoreMap":125},[204,142446,142447],{"class":206,"line":207},[204,142448,135163],{"class":273},[204,142450,142451,142453],{"class":206,"line":126},[204,142452,135168],{"class":2049},[204,142454,15659],{"class":214},[204,142456,142457,142459,142461,142463],{"class":206,"line":131},[204,142458,70654],{"class":263},[204,142460,51523],{"class":214},[204,142462,405],{"class":263},[204,142464,1377],{"class":214},[204,142466,142467,142469,142471,142473],{"class":206,"line":1281},[204,142468,70874],{"class":263},[204,142470,51523],{"class":214},[204,142472,405],{"class":263},[204,142474,1377],{"class":214},[204,142476,142477,142479,142481,142483,142485,142487,142489],{"class":206,"line":1287},[204,142478,70982],{"class":263},[204,142480,51523],{"class":214},[204,142482,659],{"class":263},[204,142484,51578],{"class":210},[204,142486,51607],{"class":263},[204,142488,64077],{"class":263},[204,142490,1377],{"class":214},[204,142492,142493,142495,142497,142499],{"class":206,"line":1301},[204,142494,135211],{"class":263},[204,142496,51523],{"class":214},[204,142498,62455],{"class":263},[204,142500,1377],{"class":214},[204,142502,142503],{"class":206,"line":1307},[204,142504,1651],{"class":214},[49,142506,142508],{"id":142507},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22085,142510,142512],{"id":142511},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142514,142515],{},"设置中心点",[23,142517],{"style":25,"src":142518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142520,142521],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22085,142523,142525],{"id":142524},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[196,142527,142529],{"className":126636,"code":142528,"language":126638,"meta":125,"style":125},"\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",[81,142530,142531,142536,142542,142557,142562,142567],{"__ignoreMap":125},[204,142532,142533],{"class":206,"line":207},[204,142534,142535],{"class":273},"\u002F* 转换中心点 *\u002F\n",[204,142537,142538,142540],{"class":206,"line":126},[204,142539,51697],{"class":51386},[204,142541,15659],{"class":214},[204,142543,142544,142547,142549,142551,142553,142555],{"class":206,"line":131},[204,142545,142546],{"class":263},"  transform-origin",[204,142548,51523],{"class":214},[204,142550,51678],{"class":263},[204,142552,17231],{"class":263},[204,142554,130499],{"class":214},[204,142556,135309],{"class":273},[204,142558,142559],{"class":206,"line":1281},[204,142560,142561],{"class":273},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[204,142563,142564],{"class":206,"line":1287},[204,142565,142566],{"class":273},"  \u002F* transform-origin: left top; *\u002F\n",[204,142568,142569],{"class":206,"line":1301},[204,142570,1651],{"class":214},[22085,142572,142574],{"id":142573},"_18133-旋转案例","18.1.3.3 旋转案例",[23,142576],{"style":25,"src":142577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[196,142579,142580],{"className":126636,"code":142400,"language":126638,"meta":125,"style":125},[81,142581,142582,142588,142604],{"__ignoreMap":125},[204,142583,142584,142586],{"class":206,"line":207},[204,142585,51697],{"class":51386},[204,142587,15659],{"class":214},[204,142589,142590,142592,142594,142596,142598,142600,142602],{"class":206,"line":126},[204,142591,136620],{"class":263},[204,142593,51523],{"class":214},[204,142595,142417],{"class":263},[204,142597,215],{"class":214},[204,142599,742],{"class":263},[204,142601,142424],{"class":210},[204,142603,2805],{"class":214},[204,142605,142606],{"class":206,"line":131},[204,142607,1651],{"class":214},[49,142609,142611],{"id":142610},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22085,142613,142615],{"id":142614},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142617,142618],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[23,142620],{"style":25,"src":142621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22085,142623,142625],{"id":142624},"_18142-分页按钮","18.1.4.2 分页按钮",[23,142627],{"style":25,"src":142628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[196,142630,142632],{"className":126636,"code":142631,"language":126638,"meta":125,"style":125},"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",[81,142633,142634,142640,142656,142660,142664,142669,142675,142689,142694],{"__ignoreMap":125},[204,142635,142636,142638],{"class":206,"line":207},[204,142637,51697],{"class":51386},[204,142639,15659],{"class":214},[204,142641,142642,142644,142646,142649,142651,142654],{"class":206,"line":126},[204,142643,136620],{"class":263},[204,142645,51523],{"class":214},[204,142647,142648],{"class":263},"scale",[204,142650,215],{"class":214},[204,142652,142653],{"class":263},"1.2",[204,142655,2805],{"class":214},[204,142657,142658],{"class":206,"line":131},[204,142659,1651],{"class":214},[204,142661,142662],{"class":206,"line":1281},[204,142663,136097],{"class":214},[204,142665,142666],{"class":206,"line":1287},[204,142667,142668],{"class":273},"\u002F* 2D 缩放 *\u002F\n",[204,142670,142671,142673],{"class":206,"line":1301},[204,142672,51697],{"class":51386},[204,142674,15659],{"class":214},[204,142676,142677,142679,142681,142683,142685,142687],{"class":206,"line":1307},[204,142678,136620],{"class":263},[204,142680,51523],{"class":214},[204,142682,142648],{"class":263},[204,142684,215],{"class":214},[204,142686,142653],{"class":263},[204,142688,2805],{"class":214},[204,142690,142691],{"class":206,"line":1398},[204,142692,142693],{"class":273},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[204,142695,142696],{"class":206,"line":1404},[204,142697,1651],{"class":214},[19,142699,142700],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[196,142702,142704],{"className":126636,"code":142703,"language":126638,"meta":125,"style":125},"\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",[81,142705,142706,142711,142721,142742,142763,142767,142772,142778,142805],{"__ignoreMap":125},[204,142707,142708],{"class":206,"line":207},[204,142709,142710],{"class":273},"\u002F* 定义动画 *\u002F\n",[204,142712,142713,142716,142719],{"class":206,"line":126},[204,142714,142715],{"class":210},"@keyframes",[204,142717,142718],{"class":5303}," move",[204,142720,15659],{"class":214},[204,142722,142723,142726,142728,142730,142732,142735,142737,142739],{"class":206,"line":131},[204,142724,142725],{"class":2049},"  0%",[204,142727,79893],{"class":214},[204,142729,48220],{"class":263},[204,142731,51523],{"class":214},[204,142733,142734],{"class":263},"translateX",[204,142736,215],{"class":214},[204,142738,405],{"class":263},[204,142740,142741],{"class":214},"); }\n",[204,142743,142744,142747,142749,142751,142753,142755,142757,142759,142761],{"class":206,"line":1281},[204,142745,142746],{"class":2049},"  100%",[204,142748,79893],{"class":214},[204,142750,48220],{"class":263},[204,142752,51523],{"class":214},[204,142754,142734],{"class":263},[204,142756,215],{"class":214},[204,142758,524],{"class":263},[204,142760,51578],{"class":210},[204,142762,142741],{"class":214},[204,142764,142765],{"class":206,"line":1287},[204,142766,1651],{"class":214},[204,142768,142769],{"class":206,"line":1301},[204,142770,142771],{"class":273},"\u002F* 调用动画 *\u002F\n",[204,142773,142774,142776],{"class":206,"line":1307},[204,142775,51697],{"class":51386},[204,142777,15659],{"class":214},[204,142779,142780,142783,142785,142787,142789,142791,142793,142795,142797,142800,142803],{"class":206,"line":1398},[204,142781,142782],{"class":263},"  animation",[204,142784,51523],{"class":214},[204,142786,135322],{"class":263},[204,142788,25205],{"class":263},[204,142790,908],{"class":210},[204,142792,78766],{"class":263},[204,142794,4179],{"class":263},[204,142796,908],{"class":210},[204,142798,142799],{"class":263}," infinite",[204,142801,142802],{"class":263}," alternate",[204,142804,1377],{"class":214},[204,142806,142807],{"class":206,"line":1404},[204,142808,1651],{"class":214},[19,142810,142700],{},[196,142812,142815],{"className":142813,"code":142814,"language":5274},[5272],"\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",[81,142816,142814],{"__ignoreMap":125},[22085,142818,142820],{"id":142819},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142822,142823],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[23,142825],{"style":25,"src":142826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[196,142828,142829],{"className":126636,"code":142703,"language":126638,"meta":125,"style":125},[81,142830,142831,142835,142843,142861,142881,142885,142889,142895,142919],{"__ignoreMap":125},[204,142832,142833],{"class":206,"line":207},[204,142834,142710],{"class":273},[204,142836,142837,142839,142841],{"class":206,"line":126},[204,142838,142715],{"class":210},[204,142840,142718],{"class":5303},[204,142842,15659],{"class":214},[204,142844,142845,142847,142849,142851,142853,142855,142857,142859],{"class":206,"line":131},[204,142846,142725],{"class":2049},[204,142848,79893],{"class":214},[204,142850,48220],{"class":263},[204,142852,51523],{"class":214},[204,142854,142734],{"class":263},[204,142856,215],{"class":214},[204,142858,405],{"class":263},[204,142860,142741],{"class":214},[204,142862,142863,142865,142867,142869,142871,142873,142875,142877,142879],{"class":206,"line":1281},[204,142864,142746],{"class":2049},[204,142866,79893],{"class":214},[204,142868,48220],{"class":263},[204,142870,51523],{"class":214},[204,142872,142734],{"class":263},[204,142874,215],{"class":214},[204,142876,524],{"class":263},[204,142878,51578],{"class":210},[204,142880,142741],{"class":214},[204,142882,142883],{"class":206,"line":1287},[204,142884,1651],{"class":214},[204,142886,142887],{"class":206,"line":1301},[204,142888,142771],{"class":273},[204,142890,142891,142893],{"class":206,"line":1307},[204,142892,51697],{"class":51386},[204,142894,15659],{"class":214},[204,142896,142897,142899,142901,142903,142905,142907,142909,142911,142913,142915,142917],{"class":206,"line":1398},[204,142898,142782],{"class":263},[204,142900,51523],{"class":214},[204,142902,135322],{"class":263},[204,142904,25205],{"class":263},[204,142906,908],{"class":210},[204,142908,78766],{"class":263},[204,142910,4179],{"class":263},[204,142912,908],{"class":210},[204,142914,142799],{"class":263},[204,142916,142802],{"class":263},[204,142918,1377],{"class":214},[204,142920,142921],{"class":206,"line":1404},[204,142922,1651],{"class":214},[19,142924,142925],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[49,142927,142929],{"id":142928},"_1823-知识点回顾","18.2.3 知识点回顾",[196,142931,142932],{"className":126636,"code":128805,"language":126638,"meta":125,"style":125},[81,142933,142934,142940,142950],{"__ignoreMap":125},[204,142935,142936,142938],{"class":206,"line":207},[204,142937,51697],{"class":51386},[204,142939,15659],{"class":214},[204,142941,142942,142944,142946,142948],{"class":206,"line":126},[204,142943,128818],{"class":263},[204,142945,51523],{"class":214},[204,142947,61822],{"class":263},[204,142949,1377],{"class":214},[204,142951,142952],{"class":206,"line":131},[204,142953,1651],{"class":214},[14,142955,142957],{"id":142956},"_183-3d-转换","18.3 3D 转换",[19,142959,142960],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[49,142962,142964],{"id":142963},"_1831-坐标轴认识","18.3.1 坐标轴认识",[23,142966],{"style":25,"src":142967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[49,142969,142971],{"id":142970},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[23,142973],{"style":25,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,142976,142977],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,142979,142980],{},"translate3d的效果需要搭配透视perspective来使用",[23,142982],{"style":25,"src":142983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[49,142985,142987],{"id":142986},"_1833-透视-perspective","18.3.3 透视 perspective",[23,142989],{"style":25,"src":142990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,142992,142993],{},"透视写在父盒子上，单位为像素",[49,142995,142997],{"id":142996},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22085,142999,143001],{"id":143000},"_18341-分开解释","18.3.4.1 分开解释",[23,143003],{"style":25,"src":143004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[23,143006],{"style":25,"src":143007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[23,143009],{"style":25,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143012,143013],{},"总结来说就是左手原则",[22085,143015,143017],{"id":143016},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[23,143019],{"style":25,"src":143020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[49,143022,143024],{"id":143023},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[23,143026],{"style":25,"src":143027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[23,143029],{"style":25,"src":143030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[196,143032,143034],{"className":126636,"code":143033,"language":126638,"meta":125,"style":125},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[81,143035,143036,143042,143055,143072],{"__ignoreMap":125},[204,143037,143038,143040],{"class":206,"line":207},[204,143039,51697],{"class":51386},[204,143041,15659],{"class":214},[204,143043,143044,143047,143049,143051,143053],{"class":206,"line":126},[204,143045,143046],{"class":263},"  perspective",[204,143048,51523],{"class":214},[204,143050,65160],{"class":263},[204,143052,51578],{"class":210},[204,143054,1377],{"class":214},[204,143056,143057,143059,143061,143064,143066,143068,143070],{"class":206,"line":131},[204,143058,136620],{"class":263},[204,143060,51523],{"class":214},[204,143062,143063],{"class":263},"rotateX",[204,143065,215],{"class":214},[204,143067,742],{"class":263},[204,143069,142424],{"class":210},[204,143071,2805],{"class":214},[204,143073,143074],{"class":206,"line":1281},[204,143075,1651],{"class":214},[49,143077,143079],{"id":143078},"_1836-案例","18.3.6 案例",[22085,143081,143083],{"id":143082},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[23,143085],{"style":25,"src":143086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[23,143088],{"style":25,"src":143089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[23,143091],{"style":25,"src":143092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[196,143094,143096],{"className":126636,"code":143095,"language":126638,"meta":125,"style":125},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[81,143097,143098,143103,143109,143121],{"__ignoreMap":125},[204,143099,143100],{"class":206,"line":207},[204,143101,143102],{"class":273},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[204,143104,143105,143107],{"class":206,"line":126},[204,143106,133633],{"class":2049},[204,143108,15659],{"class":214},[204,143110,143111,143113,143115,143117,143119],{"class":206,"line":131},[204,143112,143046],{"class":263},[204,143114,51523],{"class":214},[204,143116,65160],{"class":263},[204,143118,51578],{"class":210},[204,143120,1377],{"class":214},[204,143122,143123],{"class":206,"line":1281},[204,143124,1651],{"class":214},[22085,143126,143128],{"id":143127},"_18362-3d导航栏","18.3.6.2 3D导航栏",[23,143130],{"style":25,"src":143131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[196,143133,143134],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,143135,143136,143140,143154,143158],{"__ignoreMap":125},[204,143137,143138],{"class":206,"line":207},[204,143139,130747],{"class":273},[204,143141,143142,143144,143146,143148,143150,143152],{"class":206,"line":126},[204,143143,1123],{"class":214},[204,143145,51697],{"class":51386},[204,143147,53572],{"class":2049},[204,143149,260],{"class":214},[204,143151,130760],{"class":319},[204,143153,51393],{"class":214},[204,143155,143156],{"class":206,"line":131},[204,143157,130767],{"class":214},[204,143159,143160,143162,143164],{"class":206,"line":1281},[204,143161,51871],{"class":214},[204,143163,51697],{"class":51386},[204,143165,51393],{"class":214},[22085,143167,143169],{"id":143168},"_18363-旋转木马","18.3.6.3 旋转木马",[23,143171],{"style":25,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[196,143174,143175],{"className":126636,"code":142400,"language":126638,"meta":125,"style":125},[81,143176,143177,143183,143199],{"__ignoreMap":125},[204,143178,143179,143181],{"class":206,"line":207},[204,143180,51697],{"class":51386},[204,143182,15659],{"class":214},[204,143184,143185,143187,143189,143191,143193,143195,143197],{"class":206,"line":126},[204,143186,136620],{"class":263},[204,143188,51523],{"class":214},[204,143190,142417],{"class":263},[204,143192,215],{"class":214},[204,143194,742],{"class":263},[204,143196,142424],{"class":210},[204,143198,2805],{"class":214},[204,143200,143201],{"class":206,"line":131},[204,143202,1651],{"class":214},[5213,143204,143205],{},"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":125,"searchDepth":126,"depth":126,"links":143207},[143208,143215],{"id":142303,"depth":126,"text":142304,"children":143209},[143210,143211,143212,143213,143214],{"id":142327,"depth":131,"text":142328},{"id":142382,"depth":131,"text":142383},{"id":142507,"depth":131,"text":142508},{"id":142610,"depth":131,"text":142611},{"id":142928,"depth":131,"text":142929},{"id":142956,"depth":126,"text":142957,"children":143216},[143217,143218,143219,143220,143221,143222],{"id":142963,"depth":131,"text":142964},{"id":142970,"depth":131,"text":142971},{"id":142986,"depth":131,"text":142987},{"id":142996,"depth":131,"text":142997},{"id":143023,"depth":131,"text":143024},{"id":143078,"depth":131,"text":143079},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142295,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143229,"title":143230,"body":143231,"description":132,"extension":133,"meta":143434,"navigation":135,"path":143435,"seo":143436,"stem":143437,"__hash__":143438},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143232,"toc":143423},[143233,143236,143240,143243,143246,143250,143253,143256,143259,143263,143266,143270,143273,143277,143280,143284,143298,143302,143327,143330,143333,143350,143354,143358,143361,143364,143368,143371,143374,143392,143396,143399,143413,143417,143420],[10,143234,143230],{"id":143235},"_19-移动端基础-前缀现状与视口",[14,143237,143239],{"id":143238},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[23,143241],{"style":25,"src":143242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143244,143245],{},"意思就是加个前缀，增加兼容性",[14,143247,143249],{"id":143248},"_192-移动端现状认识","19.2 移动端现状认识",[23,143251],{"style":25,"src":143252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143254,143255],{},"调试方法：",[23,143257],{"style":25,"src":143258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143260,143262],{"id":143261},"_193-视口","19.3 视口",[19,143264,143265],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[49,143267,143269],{"id":143268},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[23,143271],{"style":25,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[49,143274,143276],{"id":143275},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[23,143278],{"style":25,"src":143279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[49,143281,143283],{"id":143282},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[68,143285,143286,143289,143292,143295],{},[71,143287,143288],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[71,143290,143291],{},"理想视口，对设备来讲，是最理想的视口尺寸",[71,143293,143294],{},"需要手动添写meta视口标签通知浏览器操作",[71,143296,143297],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[49,143299,143301],{"id":143300},"_1934-meta视口标签","19.3.4 meta视口标签",[196,143303,143305],{"className":127383,"code":143304,"language":127385,"meta":125,"style":125},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[81,143306,143307],{"__ignoreMap":125},[204,143308,143309,143311,143313,143315,143317,143319,143321,143323,143325],{"class":206,"line":207},[204,143310,1123],{"class":214},[204,143312,51430],{"class":51386},[204,143314,15007],{"class":2049},[204,143316,260],{"class":214},[204,143318,51477],{"class":319},[204,143320,51457],{"class":2049},[204,143322,260],{"class":214},[204,143324,51484],{"class":319},[204,143326,51393],{"class":214},[23,143328],{"style":25,"src":143329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143331,143332],{},"标准视口设置：",[161,143334,143335,143338,143341,143344,143347],{},[71,143336,143337],{},"视口宽度和设备保持一致",[71,143339,143340],{},"视口的默认缩放比例1.0",[71,143342,143343],{},"不允许用户自行缩放",[71,143345,143346],{},"最大允许的缩放比例1.0",[71,143348,143349],{},"最小允许的缩放比例1.0",[49,143351,143353],{"id":143352},"_1935-二倍图","19.3.5 二倍图",[22085,143355,143357],{"id":143356},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[23,143359],{"style":25,"src":143360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[23,143362],{"style":25,"src":143363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22085,143365,143367],{"id":143366},"_19352-多倍图","19.3.5.2 多倍图",[23,143369],{"style":25,"src":143370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143372,143373],{},"二倍图法，代码如下：",[196,143375,143377],{"className":126636,"code":143376,"language":126638,"meta":125,"style":125},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[81,143378,143379,143384],{"__ignoreMap":125},[204,143380,143381],{"class":206,"line":207},[204,143382,143383],{"class":273},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[204,143385,143386,143389],{"class":206,"line":126},[204,143387,143388],{"class":51386},"background-size",[204,143390,143391],{"class":214},": 50% 50%;\n",[22085,143393,143395],{"id":143394},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[23,143397],{"style":25,"src":143398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[161,143400,143401,143404,143407,143410],{},[71,143402,143403],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[71,143405,143406],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[71,143408,143409],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[71,143411,143412],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22085,143414,143416],{"id":143415},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[23,143418],{"style":25,"src":143419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5213,143421,143422],{},"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":125,"searchDepth":126,"depth":126,"links":143424},[143425,143426,143427],{"id":143238,"depth":126,"text":143239},{"id":143248,"depth":126,"text":143249},{"id":143261,"depth":126,"text":143262,"children":143428},[143429,143430,143431,143432,143433],{"id":143268,"depth":131,"text":143269},{"id":143275,"depth":131,"text":143276},{"id":143282,"depth":131,"text":143283},{"id":143300,"depth":131,"text":143301},{"id":143352,"depth":131,"text":143353},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143230,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143440,"title":143441,"body":143442,"description":132,"extension":133,"meta":144319,"navigation":135,"path":144320,"seo":144321,"stem":144322,"__hash__":144323},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143443,"toc":144303},[143444,143447,143451,143458,143461,143468,143471,143476,143479,143483,143487,143494,143497,143500,143504,143507,143510,143513,143516,143519,143523,143526,143530,143532,143535,143538,143541,143544,143546,143549,143551,143581,143583,143613,143617,143620,143624,143627,143644,143647,143650,143726,143728,143731,143734,143737,143740,143742,143745,143748,143752,143774,143777,143780,143784,143787,143793,143796,143800,143803,143806,143810,143813,143816,143819,143823,143826,143829,143832,143835,143839,143842,143846,143853,143856,143859,143862,143865,143875,143878,143881,143888,143891,143895,143898,143901,143905,143908,143911,143914,143959,143962,143965,143968,143970,144099,144101,144139,144142,144145,144147,144265,144267,144301],[10,143445,143441],{"id":143446},"_20-移动端布局实战上篇",[14,143448,143450],{"id":143449},"_201-移动端主流方案","20.1 移动端主流方案",[161,143452,143453],{},[71,143454,143455],{},[30,143456,143457],{},"单独移动端页面（主流）",[23,143459],{"style":25,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[161,143462,143463],{"start":126},[71,143464,143465],{},[30,143466,143467],{},"响应式兼容PC移动端",[23,143469],{"style":25,"src":143470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[161,143472,143473],{"start":131},[71,143474,143475],{},"两种页面选型布局方式",[23,143477],{"style":25,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143480,143482],{"id":143481},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[49,143484,143486],{"id":143485},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143488,143489,143490],{},"官网地址： ",[62,143491,143492],{"href":143492,"rel":143493},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[66],[23,143495],{"style":25,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[23,143498],{"style":25,"src":143499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[49,143501,143503],{"id":143502},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[23,143505],{"style":25,"src":143506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[23,143508],{"style":25,"src":143509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143511,143512],{},"去除高亮：",[19,143514,143515],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143517,143518],{},"-webkit- tap-highlight-color: transparent;",[14,143520,143522],{"id":143521},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[23,143524],{"style":25,"src":143525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143527,143529],{"id":143528},"_204-流式布局案例","20.4 流式布局案例",[19,143531,244],{},[19,143533,143534],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143536,143537],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143539,143540],{},"图片格式：",[23,143542],{"style":25,"src":143543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143545,135679],{},[23,143547],{"style":25,"src":143548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143550,140006],{},[196,143552,143553],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,143554,143555],{"__ignoreMap":125},[204,143556,143557,143559,143561,143563,143565,143567,143569,143571,143573,143575,143577,143579],{"class":206,"line":207},[204,143558,1123],{"class":214},[204,143560,23],{"class":51386},[204,143562,55325],{"class":2049},[204,143564,260],{"class":214},[204,143566,134153],{"class":319},[204,143568,55333],{"class":2049},[204,143570,260],{"class":214},[204,143572,134160],{"class":319},[204,143574,134163],{"class":2049},[204,143576,260],{"class":214},[204,143578,134168],{"class":319},[204,143580,51393],{"class":214},[19,143582,140095],{},[196,143584,143585],{"className":127383,"code":134138,"language":127385,"meta":125,"style":125},[81,143586,143587],{"__ignoreMap":125},[204,143588,143589,143591,143593,143595,143597,143599,143601,143603,143605,143607,143609,143611],{"class":206,"line":207},[204,143590,1123],{"class":214},[204,143592,23],{"class":51386},[204,143594,55325],{"class":2049},[204,143596,260],{"class":214},[204,143598,134153],{"class":319},[204,143600,55333],{"class":2049},[204,143602,260],{"class":214},[204,143604,134160],{"class":319},[204,143606,134163],{"class":2049},[204,143608,260],{"class":214},[204,143610,134168],{"class":319},[204,143612,51393],{"class":214},[14,143614,143616],{"id":143615},"_205-flex布局","20.5 flex布局",[23,143618],{"style":25,"src":143619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[49,143621,143623],{"id":143622},"_2051-布局原理","20.5.1 布局原理",[19,143625,143626],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[68,143628,143629,143632,143635,143638,143641],{},[71,143630,143631],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[71,143633,143634],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[71,143636,143637],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[71,143639,143640],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[71,143642,143643],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143645,143646],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143648,143649],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[196,143651,143653],{"className":126636,"code":143652,"language":126638,"meta":125,"style":125},"\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",[81,143654,143655,143660,143667,143677,143689,143700,143711,143722],{"__ignoreMap":125},[204,143656,143657],{"class":206,"line":207},[204,143658,143659],{"class":273},"\u002F* Flex 弹性布局 *\u002F\n",[204,143661,143662,143665],{"class":206,"line":126},[204,143663,143664],{"class":2049},".container",[204,143666,15659],{"class":214},[204,143668,143669,143671,143673,143675],{"class":206,"line":131},[204,143670,128252],{"class":263},[204,143672,51523],{"class":214},[204,143674,51563],{"class":263},[204,143676,1377],{"class":214},[204,143678,143679,143682,143684,143687],{"class":206,"line":1281},[204,143680,143681],{"class":263},"  flex-direction",[204,143683,51523],{"class":214},[204,143685,143686],{"class":263},"row",[204,143688,1377],{"class":214},[204,143690,143691,143694,143696,143698],{"class":206,"line":1287},[204,143692,143693],{"class":263},"  justify-content",[204,143695,51523],{"class":214},[204,143697,51754],{"class":263},[204,143699,1377],{"class":214},[204,143701,143702,143705,143707,143709],{"class":206,"line":1301},[204,143703,143704],{"class":263},"  align-items",[204,143706,51523],{"class":214},[204,143708,51678],{"class":263},[204,143710,1377],{"class":214},[204,143712,143713,143716,143718,143720],{"class":206,"line":1307},[204,143714,143715],{"class":263},"  flex-wrap",[204,143717,51523],{"class":214},[204,143719,78696],{"class":263},[204,143721,1377],{"class":214},[204,143723,143724],{"class":206,"line":1398},[204,143725,1651],{"class":214},[19,143727,70539],{},[19,143729,143730],{},".form-item .male-label {",[19,143732,143733],{},"   margin-right: 20px;",[19,143735,143736],{},"   display: inline-flex;",[19,143738,143739],{},"   align-items: center;",[19,143741,1159],{},[23,143743],{"style":25,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[23,143746],{"style":25,"src":143747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[49,143749,143751],{"id":143750},"_2052-常见父项属性","20.5.2 常见父项属性",[161,143753,143754,143757,143760,143763,143766,143769,143772],{},[71,143755,143756],{},"flex-direction：设置主轴的方向",[71,143758,143759],{},"justify-content：设置主轴上的子元素排列方式",[71,143761,143762],{},"flex-wrap：设置子元素是否换行",[71,143764,143765],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[71,143767,143768],{},"align-items：设置侧轴上的子元素排列方式（单行）",[71,143770,143771],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[71,143773,143756],{},[23,143775],{"style":25,"src":143776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[23,143778],{"style":25,"src":143779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[161,143781,143782],{"start":126},[71,143783,143759],{},[23,143785],{"style":25,"src":143786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143788,143789,143792],{},[81,143790,143791],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143794,143795],{},"跟着主轴走",[161,143797,143798],{"start":131},[71,143799,143762],{},[23,143801],{"style":25,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143804,143805],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[161,143807,143808],{"start":1281},[71,143809,143765],{},[23,143811],{"style":25,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143814,143815],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143817,143818],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[161,143820,143821],{"start":1287},[71,143822,143768],{},[23,143824],{"style":25,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143827,143828],{},"align-items与align-content之间的区别：",[19,143830,143831],{},"单找items，多找content",[23,143833],{"style":25,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[161,143836,143837],{"start":1301},[71,143838,143771],{},[23,143840],{"style":25,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[49,143843,143845],{"id":143844},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[161,143847,143848],{},[71,143849,143850],{},[30,143851,143852],{},"flex 属性",[19,143854,143855],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[23,143857],{"style":25,"src":143858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143860,143861],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143863,143864],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[161,143866,143867],{"start":126},[71,143868,143869,13882,143872],{},[30,143870,143871],{},"align-self",[30,143873,143874],{},"控制子项自己在侧轴上的排列方式",[23,143876],{"style":25,"src":143877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143879,143880],{},"单个子盒子在父盒子侧轴上的排列方式",[161,143882,143883],{"start":131},[71,143884,143885,143887],{},[30,143886,95383],{}," 属性定义项目的排列顺序",[23,143889],{"style":25,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[49,143892,143894],{"id":143893},"_2054-背景线性渐变","20.5.4 背景线性渐变",[23,143896],{"style":25,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143899,143900],{},"必须要添加浏览器的私有前缀",[49,143902,143904],{"id":143903},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,143906,143907],{},"学到最重要的知识：",[19,143909,143910],{},"flex处理这样的布局思路",[23,143912],{"style":25,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[196,143915,143917],{"className":126636,"code":143916,"language":126638,"meta":125,"style":125},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[81,143918,143919,143925,143935,143945,143955],{"__ignoreMap":125},[204,143920,143921,143923],{"class":206,"line":207},[204,143922,143664],{"class":2049},[204,143924,15659],{"class":214},[204,143926,143927,143929,143931,143933],{"class":206,"line":126},[204,143928,128252],{"class":263},[204,143930,51523],{"class":214},[204,143932,51563],{"class":263},[204,143934,1377],{"class":214},[204,143936,143937,143939,143941,143943],{"class":206,"line":131},[204,143938,143693],{"class":263},[204,143940,51523],{"class":214},[204,143942,51678],{"class":263},[204,143944,1377],{"class":214},[204,143946,143947,143949,143951,143953],{"class":206,"line":1281},[204,143948,143704],{"class":263},[204,143950,51523],{"class":214},[204,143952,51678],{"class":263},[204,143954,1377],{"class":214},[204,143956,143957],{"class":206,"line":1287},[204,143958,1651],{"class":214},[19,143960,143961],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,143963,143964],{},"使用属性选择器",[23,143966],{"style":25,"src":143967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,143969,68975],{},[196,143971,143973],{"className":127383,"code":143972,"language":127385,"meta":125,"style":125},"\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",[81,143974,143975,143980,143994,143999,144019,144024,144043,144048,144067,144072,144091],{"__ignoreMap":125},[204,143976,143977],{"class":206,"line":207},[204,143978,143979],{"class":273},"\u003C!-- 携程网移动端案例结构 -->\n",[204,143981,143982,143984,143986,143988,143990,143992],{"class":206,"line":126},[204,143983,1123],{"class":214},[204,143985,51697],{"class":51386},[204,143987,53572],{"class":2049},[204,143989,260],{"class":214},[204,143991,92409],{"class":319},[204,143993,51393],{"class":214},[204,143995,143996],{"class":206,"line":131},[204,143997,143998],{"class":273},"  \u003C!-- 搜索栏 -->\n",[204,144000,144001,144003,144005,144007,144009,144012,144015,144017],{"class":206,"line":1281},[204,144002,52230],{"class":214},[204,144004,51697],{"class":51386},[204,144006,53572],{"class":2049},[204,144008,260],{"class":214},[204,144010,144011],{"class":319},"\"search-index\"",[204,144013,144014],{"class":214},">...\u003C\u002F",[204,144016,51697],{"class":51386},[204,144018,51393],{"class":214},[204,144020,144021],{"class":206,"line":1287},[204,144022,144023],{"class":273},"  \u003C!-- 焦点图 -->\n",[204,144025,144026,144028,144030,144032,144034,144037,144039,144041],{"class":206,"line":1301},[204,144027,52230],{"class":214},[204,144029,51697],{"class":51386},[204,144031,53572],{"class":2049},[204,144033,260],{"class":214},[204,144035,144036],{"class":319},"\"focus\"",[204,144038,144014],{"class":214},[204,144040,51697],{"class":51386},[204,144042,51393],{"class":214},[204,144044,144045],{"class":206,"line":1307},[204,144046,144047],{"class":273},"  \u003C!-- 主导航 -->\n",[204,144049,144050,144052,144054,144056,144058,144061,144063,144065],{"class":206,"line":1398},[204,144051,52230],{"class":214},[204,144053,51697],{"class":51386},[204,144055,53572],{"class":2049},[204,144057,260],{"class":214},[204,144059,144060],{"class":319},"\"local-nav\"",[204,144062,144014],{"class":214},[204,144064,51697],{"class":51386},[204,144066,51393],{"class":214},[204,144068,144069],{"class":206,"line":1404},[204,144070,144071],{"class":273},"  \u003C!-- 子导航 -->\n",[204,144073,144074,144076,144078,144080,144082,144085,144087,144089],{"class":206,"line":1416},[204,144075,52230],{"class":214},[204,144077,51697],{"class":51386},[204,144079,53572],{"class":2049},[204,144081,260],{"class":214},[204,144083,144084],{"class":319},"\"nav-common\"",[204,144086,144014],{"class":214},[204,144088,51697],{"class":51386},[204,144090,51393],{"class":214},[204,144092,144093,144095,144097],{"class":206,"line":1698},[204,144094,51871],{"class":214},[204,144096,51697],{"class":51386},[204,144098,51393],{"class":214},[19,144100,70539],{},[196,144102,144103],{"className":126636,"code":137088,"language":126638,"meta":125,"style":125},[81,144104,144105,144119,144135],{"__ignoreMap":125},[204,144106,144107,144109,144111,144113,144115,144117],{"class":206,"line":207},[204,144108,53907],{"class":51386},[204,144110,1103],{"class":214},[204,144112,103192],{"class":2049},[204,144114,260],{"class":210},[204,144116,62785],{"class":319},[204,144118,137105],{"class":214},[204,144120,144121,144123,144125,144127,144129,144131,144133],{"class":206,"line":126},[204,144122,70982],{"class":263},[204,144124,51523],{"class":214},[204,144126,431],{"class":263},[204,144128,51578],{"class":210},[204,144130,51607],{"class":263},[204,144132,130216],{"class":263},[204,144134,1377],{"class":214},[204,144136,144137],{"class":206,"line":131},[204,144138,1651],{"class":214},[19,144140,144141],{},"总代码和效果展示：",[23,144143],{"style":25,"src":144144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144146,68975],{},[196,144148,144149],{"className":127383,"code":143972,"language":127385,"meta":125,"style":125},[81,144150,144151,144155,144169,144173,144191,144195,144213,144217,144235,144239,144257],{"__ignoreMap":125},[204,144152,144153],{"class":206,"line":207},[204,144154,143979],{"class":273},[204,144156,144157,144159,144161,144163,144165,144167],{"class":206,"line":126},[204,144158,1123],{"class":214},[204,144160,51697],{"class":51386},[204,144162,53572],{"class":2049},[204,144164,260],{"class":214},[204,144166,92409],{"class":319},[204,144168,51393],{"class":214},[204,144170,144171],{"class":206,"line":131},[204,144172,143998],{"class":273},[204,144174,144175,144177,144179,144181,144183,144185,144187,144189],{"class":206,"line":1281},[204,144176,52230],{"class":214},[204,144178,51697],{"class":51386},[204,144180,53572],{"class":2049},[204,144182,260],{"class":214},[204,144184,144011],{"class":319},[204,144186,144014],{"class":214},[204,144188,51697],{"class":51386},[204,144190,51393],{"class":214},[204,144192,144193],{"class":206,"line":1287},[204,144194,144023],{"class":273},[204,144196,144197,144199,144201,144203,144205,144207,144209,144211],{"class":206,"line":1301},[204,144198,52230],{"class":214},[204,144200,51697],{"class":51386},[204,144202,53572],{"class":2049},[204,144204,260],{"class":214},[204,144206,144036],{"class":319},[204,144208,144014],{"class":214},[204,144210,51697],{"class":51386},[204,144212,51393],{"class":214},[204,144214,144215],{"class":206,"line":1307},[204,144216,144047],{"class":273},[204,144218,144219,144221,144223,144225,144227,144229,144231,144233],{"class":206,"line":1398},[204,144220,52230],{"class":214},[204,144222,51697],{"class":51386},[204,144224,53572],{"class":2049},[204,144226,260],{"class":214},[204,144228,144060],{"class":319},[204,144230,144014],{"class":214},[204,144232,51697],{"class":51386},[204,144234,51393],{"class":214},[204,144236,144237],{"class":206,"line":1404},[204,144238,144071],{"class":273},[204,144240,144241,144243,144245,144247,144249,144251,144253,144255],{"class":206,"line":1416},[204,144242,52230],{"class":214},[204,144244,51697],{"class":51386},[204,144246,53572],{"class":2049},[204,144248,260],{"class":214},[204,144250,144084],{"class":319},[204,144252,144014],{"class":214},[204,144254,51697],{"class":51386},[204,144256,51393],{"class":214},[204,144258,144259,144261,144263],{"class":206,"line":1698},[204,144260,51871],{"class":214},[204,144262,51697],{"class":51386},[204,144264,51393],{"class":214},[19,144266,70539],{},[196,144268,144269],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,144270,144271,144275,144289,144293],{"__ignoreMap":125},[204,144272,144273],{"class":206,"line":207},[204,144274,130747],{"class":273},[204,144276,144277,144279,144281,144283,144285,144287],{"class":206,"line":126},[204,144278,1123],{"class":214},[204,144280,51697],{"class":51386},[204,144282,53572],{"class":2049},[204,144284,260],{"class":214},[204,144286,130760],{"class":319},[204,144288,51393],{"class":214},[204,144290,144291],{"class":206,"line":131},[204,144292,130767],{"class":214},[204,144294,144295,144297,144299],{"class":206,"line":1281},[204,144296,51871],{"class":214},[204,144298,51697],{"class":51386},[204,144300,51393],{"class":214},[5213,144302,138037],{},{"title":125,"searchDepth":126,"depth":126,"links":144304},[144305,144306,144310,144311,144312],{"id":143449,"depth":126,"text":143450},{"id":143481,"depth":126,"text":143482,"children":144307},[144308,144309],{"id":143485,"depth":131,"text":143486},{"id":143502,"depth":131,"text":143503},{"id":143521,"depth":126,"text":143522},{"id":143528,"depth":126,"text":143529},{"id":143615,"depth":126,"text":143616,"children":144313},[144314,144315,144316,144317,144318],{"id":143622,"depth":131,"text":143623},{"id":143750,"depth":131,"text":143751},{"id":143844,"depth":131,"text":143845},{"id":143893,"depth":131,"text":143894},{"id":143903,"depth":131,"text":143904},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143441,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144325,"title":144326,"body":144327,"description":132,"extension":133,"meta":145554,"navigation":135,"path":145555,"seo":145556,"stem":145557,"__hash__":145558},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144328,"toc":145532},[144329,144332,144336,144340,144343,144346,144350,144355,144358,144361,144364,144367,144370,144427,144430,144435,144438,144441,144445,144456,144460,144463,144466,144473,144478,144482,144485,144491,144494,144498,144501,144508,144511,144514,144521,144524,144531,144534,144537,144544,144547,144550,144552,144569,144573,144576,144579,144582,144586,144589,144592,144595,144598,144601,144604,144606,144609,144612,144674,144677,144787,144794,144800,144803,144806,144810,144813,144817,144822,144825,144832,144835,144841,144846,144849,144852,144855,144858,144861,144864,144867,144870,144926,144928,144954,144958,144961,144964,144967,144975,144978,144981,144985,145041,145044,145048,145054,145065,145068,145073,145076,145079,145085,145088,145091,145094,145097,145100,145103,145106,145109,145134,145140,145143,145146,145149,145152,145155,145158,145163,145166,145169,145172,145180,145183,145190,145193,145196,145198,145222,145224,145227,145230,145233,145236,145239,145242,145245,145279,145282,145285,145319,145326,145329,145332,145335,145338,145341,145344,145351,145354,145357,145360,145363,145370,145373,145376,145383,145386,145389,145393,145396,145399,145402,145405,145408,145411,145414,145417,145419,145443,145445,145469,145473,145484,145487,145490,145493,145496,145499,145502,145505,145508,145511,145514,145517,145520,145523,145526,145529],[10,144330,144326],{"id":144331},"_21-移动端布局实战下篇",[14,144333,144335],{"id":144334},"_211-rem适配布局","21.1 rem适配布局",[49,144337,144339],{"id":144338},"_2111-rem单位","21.1.1 rem单位",[23,144341],{"style":25,"src":144342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144344,144345],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[49,144347,144349],{"id":144348},"_2112-媒体查询","21.1.2 媒体查询",[161,144351,144352],{},[71,144353,144354],{},"参数介绍",[23,144356],{"style":25,"src":144357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[23,144359],{"style":25,"src":144360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[23,144362],{"style":25,"src":144363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[23,144365],{"style":25,"src":144366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[23,144368],{"style":25,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[196,144371,144373],{"className":126636,"code":144372,"language":126638,"meta":125,"style":125},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[81,144374,144375,144380,144399,144406,144419,144423],{"__ignoreMap":125},[204,144376,144377],{"class":206,"line":207},[204,144378,144379],{"class":273},"\u002F* 媒体查询 *\u002F\n",[204,144381,144382,144385,144387,144390,144392,144395,144397],{"class":206,"line":126},[204,144383,144384],{"class":210},"@media",[204,144386,1744],{"class":214},[204,144388,144389],{"class":263},"max-width",[204,144391,51523],{"class":214},[204,144393,144394],{"class":263},"768",[204,144396,51578],{"class":210},[204,144398,12529],{"class":214},[204,144400,144401,144404],{"class":206,"line":131},[204,144402,144403],{"class":2049},"  .container",[204,144405,15659],{"class":214},[204,144407,144408,144411,144413,144415,144417],{"class":206,"line":1281},[204,144409,144410],{"class":263},"    width",[204,144412,51523],{"class":214},[204,144414,524],{"class":263},[204,144416,541],{"class":210},[204,144418,1377],{"class":214},[204,144420,144421],{"class":206,"line":1287},[204,144422,127432],{"class":214},[204,144424,144425],{"class":206,"line":1301},[204,144426,1651],{"class":214},[19,144428,144429],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[161,144431,144432],{"start":126},[71,144433,144434],{},"引入资源",[23,144436],{"style":25,"src":144437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144439,144440],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[49,144442,144444],{"id":144443},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[68,144446,144447,144450,144453],{},[71,144448,144449],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[71,144451,144452],{},"媒体查询可以根据不同设备宽度来修改样式",[71,144454,144455],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144457,144459],{"id":144458},"_212-less基础","21.2 Less基础",[19,144461,144462],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144464,144465],{},"Less可以解决该问题，它是css的扩展语言",[19,144467,144468,144469],{},"Less中文网址： ",[62,144470,144471],{"href":144471,"rel":144472},"http:\u002F\u002Flesscss.cn\u002F",[66],[19,144474,144475],{},[30,144476,144477],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[49,144479,144481],{"id":144480},"_2121-less安装","21.2.1 less安装",[19,144483,144484],{},"如果使用vscode，则无需进行下方安装步骤",[19,144486,144487],{},[62,144488,144489],{"href":144489,"rel":144490},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[66],[23,144492],{"style":25,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[49,144495,144497],{"id":144496},"_2122-less使用","21.2.2 less使用",[19,144499,144500],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[161,144502,144503],{},[71,144504,144505],{},[30,144506,144507],{},"Less 变量",[23,144509],{"style":25,"src":144510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[23,144512],{"style":25,"src":144513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[161,144515,144516],{"start":126},[71,144517,144518],{},[30,144519,144520],{},"Less 编译",[23,144522],{"style":25,"src":144523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[161,144525,144526],{"start":131},[71,144527,144528],{},[30,144529,144530],{},"Less 嵌套",[23,144532],{"style":25,"src":144533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[23,144535],{"style":25,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[161,144538,144539],{"start":1281},[71,144540,144541],{},[30,144542,144543],{},"Less 运算",[23,144545],{"style":25,"src":144546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144548,144549],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144551,244],{},[68,144553,144554,144557,144560,144563,144566],{},[71,144555,144556],{},"乘号（*）和除号（\u002F）的写法",[71,144558,144559],{},"运算符中间左右有个空格隔开 1px + 5",[71,144561,144562],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[71,144564,144565],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[71,144567,144568],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144570,144572],{"id":144571},"_213-rem-适配方案","21.3 rem 适配方案",[19,144574,144575],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144577,144578],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[23,144580],{"style":25,"src":144581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[49,144583,144585],{"id":144584},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144587,144588],{},"rem + 媒体查询 + less 技术",[23,144590],{"style":25,"src":144591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144593,144594],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144596,144597],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[23,144599],{"style":25,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144602,144603],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144605,14720],{},[23,144607],{"style":25,"src":144608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144610,144611],{},"index.html:",[196,144613,144615],{"className":126636,"code":144614,"language":126638,"meta":125,"style":125},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[81,144616,144617,144622,144628,144644,144648,144654,144670],{"__ignoreMap":125},[204,144618,144619],{"class":206,"line":207},[204,144620,144621],{"class":273},"\u002F* rem 适配方案 *\u002F\n",[204,144623,144624,144626],{"class":206,"line":126},[204,144625,50721],{"class":51386},[204,144627,15659],{"class":214},[204,144629,144630,144632,144634,144637,144639,144641],{"class":206,"line":131},[204,144631,70712],{"class":263},[204,144633,51523],{"class":214},[204,144635,144636],{"class":263},"62.5",[204,144638,541],{"class":210},[204,144640,130499],{"class":214},[204,144642,144643],{"class":273},"\u002F* 1rem = 10px *\u002F\n",[204,144645,144646],{"class":206,"line":1281},[204,144647,1651],{"class":214},[204,144649,144650,144652],{"class":206,"line":1287},[204,144651,130484],{"class":2049},[204,144653,15659],{"class":214},[204,144655,144656,144658,144660,144662,144665,144667],{"class":206,"line":1301},[204,144657,70654],{"class":263},[204,144659,51523],{"class":214},[204,144661,659],{"class":263},[204,144663,144664],{"class":210},"rem",[204,144666,130499],{"class":214},[204,144668,144669],{"class":273},"\u002F* 100px *\u002F\n",[204,144671,144672],{"class":206,"line":1307},[204,144673,1651],{"class":214},[19,144675,144676],{},"common.less",[196,144678,144680],{"className":126636,"code":144679,"language":126638,"meta":125,"style":125},"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",[81,144681,144682,144688,144703,144707,144713,144727,144731,144735,144739,144745,144759,144763,144769,144783],{"__ignoreMap":125},[204,144683,144684,144686],{"class":206,"line":207},[204,144685,50721],{"class":51386},[204,144687,15659],{"class":214},[204,144689,144690,144692,144694,144696,144698,144700],{"class":206,"line":126},[204,144691,70712],{"class":263},[204,144693,51523],{"class":214},[204,144695,144636],{"class":263},[204,144697,541],{"class":210},[204,144699,26153],{"class":214},[204,144701,144702],{"class":273},"\u002F* 10px *\u002F\n",[204,144704,144705],{"class":206,"line":131},[204,144706,1651],{"class":214},[204,144708,144709,144711],{"class":206,"line":1281},[204,144710,51697],{"class":51386},[204,144712,15659],{"class":214},[204,144714,144715,144717,144719,144721,144723,144725],{"class":206,"line":1287},[204,144716,70654],{"class":263},[204,144718,51523],{"class":214},[204,144720,659],{"class":263},[204,144722,144664],{"class":210},[204,144724,26153],{"class":214},[204,144726,144669],{"class":273},[204,144728,144729],{"class":206,"line":1301},[204,144730,1651],{"class":214},[204,144732,144733],{"class":206,"line":1307},[204,144734,136097],{"class":214},[204,144736,144737],{"class":206,"line":1398},[204,144738,144621],{"class":273},[204,144740,144741,144743],{"class":206,"line":1404},[204,144742,50721],{"class":51386},[204,144744,15659],{"class":214},[204,144746,144747,144749,144751,144753,144755,144757],{"class":206,"line":1416},[204,144748,70712],{"class":263},[204,144750,51523],{"class":214},[204,144752,144636],{"class":263},[204,144754,541],{"class":210},[204,144756,130499],{"class":214},[204,144758,144643],{"class":273},[204,144760,144761],{"class":206,"line":1698},[204,144762,1651],{"class":214},[204,144764,144765,144767],{"class":206,"line":1703},[204,144766,130484],{"class":2049},[204,144768,15659],{"class":214},[204,144770,144771,144773,144775,144777,144779,144781],{"class":206,"line":1709},[204,144772,70654],{"class":263},[204,144774,51523],{"class":214},[204,144776,659],{"class":263},[204,144778,144664],{"class":210},[204,144780,130499],{"class":214},[204,144782,144669],{"class":273},[204,144784,144785],{"class":206,"line":1714},[204,144786,1651],{"class":214},[19,144788,144789,144790,144793],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23640,144791,144792],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[196,144795,144798],{"className":144796,"code":144797,"language":5274},[5272],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[81,144799,144797],{"__ignoreMap":125},[19,144801,144802],{},"less保存时会自动变成.css文件",[19,144804,144805],{},"好好搞懂上述代码写法",[49,144807,144809],{"id":144808},"_2132-样式导入样式","21.3.2 样式导入样式",[23,144811],{"style":25,"src":144812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[49,144814,144816],{"id":144815},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[161,144818,144819],{},[71,144820,144821],{},"准备工作",[23,144823],{"style":25,"src":144824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144826,144827,144828],{},"github地址：",[62,144829,144830],{"href":144830,"rel":144831},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[66],[19,144833,144834],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144836,144837,144838],{},"js文件引入到index.html中使用的是",[81,144839,144840],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[161,144842,144843],{"start":126},[71,144844,144845],{},"vscode插件",[23,144847],{"style":25,"src":144848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144850,144851],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144853,144854],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[23,144856],{"style":25,"src":144857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144859,144860],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[23,144862],{"style":25,"src":144863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144865,144866],{},"修改成75就可以，alt+z为快捷键",[19,144868,144869],{},"index.css：",[196,144871,144872],{"className":126636,"code":144614,"language":126638,"meta":125,"style":125},[81,144873,144874,144878,144884,144898,144902,144908,144922],{"__ignoreMap":125},[204,144875,144876],{"class":206,"line":207},[204,144877,144621],{"class":273},[204,144879,144880,144882],{"class":206,"line":126},[204,144881,50721],{"class":51386},[204,144883,15659],{"class":214},[204,144885,144886,144888,144890,144892,144894,144896],{"class":206,"line":131},[204,144887,70712],{"class":263},[204,144889,51523],{"class":214},[204,144891,144636],{"class":263},[204,144893,541],{"class":210},[204,144895,130499],{"class":214},[204,144897,144643],{"class":273},[204,144899,144900],{"class":206,"line":1281},[204,144901,1651],{"class":214},[204,144903,144904,144906],{"class":206,"line":1287},[204,144905,130484],{"class":2049},[204,144907,15659],{"class":214},[204,144909,144910,144912,144914,144916,144918,144920],{"class":206,"line":1301},[204,144911,70654],{"class":263},[204,144913,51523],{"class":214},[204,144915,659],{"class":263},[204,144917,144664],{"class":210},[204,144919,130499],{"class":214},[204,144921,144669],{"class":273},[204,144923,144924],{"class":206,"line":1307},[204,144925,1651],{"class":214},[19,144927,144611],{},[196,144929,144930],{"className":126636,"code":127040,"language":126638,"meta":125,"style":125},[81,144931,144932,144938,144950],{"__ignoreMap":125},[204,144933,144934,144936],{"class":206,"line":207},[204,144935,51886],{"class":51386},[204,144937,15659],{"class":214},[204,144939,144940,144942,144944,144946,144948],{"class":206,"line":126},[204,144941,70712],{"class":263},[204,144943,51523],{"class":214},[204,144945,814],{"class":263},[204,144947,51578],{"class":210},[204,144949,1377],{"class":214},[204,144951,144952],{"class":206,"line":131},[204,144953,1651],{"class":214},[14,144955,144957],{"id":144956},"_214-响应式开发","21.4 响应式开发",[19,144959,144960],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[23,144962],{"style":25,"src":144963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,144965,144966],{},"做法：",[68,144968,144969,144972],{},[71,144970,144971],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[71,144973,144974],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[23,144976],{"style":25,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,144979,144980],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[49,144982,144984],{"id":144983},"_2141-简单代码示范","21.4.1 简单代码示范",[196,144986,144987],{"className":126636,"code":144614,"language":126638,"meta":125,"style":125},[81,144988,144989,144993,144999,145013,145017,145023,145037],{"__ignoreMap":125},[204,144990,144991],{"class":206,"line":207},[204,144992,144621],{"class":273},[204,144994,144995,144997],{"class":206,"line":126},[204,144996,50721],{"class":51386},[204,144998,15659],{"class":214},[204,145000,145001,145003,145005,145007,145009,145011],{"class":206,"line":131},[204,145002,70712],{"class":263},[204,145004,51523],{"class":214},[204,145006,144636],{"class":263},[204,145008,541],{"class":210},[204,145010,130499],{"class":214},[204,145012,144643],{"class":273},[204,145014,145015],{"class":206,"line":1281},[204,145016,1651],{"class":214},[204,145018,145019,145021],{"class":206,"line":1287},[204,145020,130484],{"class":2049},[204,145022,15659],{"class":214},[204,145024,145025,145027,145029,145031,145033,145035],{"class":206,"line":1301},[204,145026,70654],{"class":263},[204,145028,51523],{"class":214},[204,145030,659],{"class":263},[204,145032,144664],{"class":210},[204,145034,130499],{"class":214},[204,145036,144669],{"class":273},[204,145038,145039],{"class":206,"line":1307},[204,145040,1651],{"class":214},[19,145042,145043],{},"父盒子一般命名为container",[49,145045,145047],{"id":145046},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145049,145050,145051],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[30,145052,145053],{},"使得 Web 开发更加快捷",[68,145055,145056],{},[71,145057,145058,145059],{},"官网：",[30,145060,145061],{},[62,145062,145063],{"href":145063,"rel":145064},"http:\u002F\u002Fgetbootstrap.com\u002F",[66],[19,145066,145067],{},"可以直接去官网拿现成的东西",[161,145069,145070],{},[71,145071,145072],{},"Bootstrap的使用",[19,145074,145075],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145077,145078],{},"Bootstrap 使用四步曲：",[19,145080,145081,145084],{},[30,145082,145083],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[23,145086],{"style":25,"src":145087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145089,145090],{},"打开Bootstrap官网，然后下载",[23,145092],{"style":25,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[23,145095],{"style":25,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145098,145099],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145101,145102],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145104,145105],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[23,145107],{"style":25,"src":145108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[196,145110,145112],{"className":126636,"code":145111,"language":126638,"meta":125,"style":125},".center {\n  color: red;\n}\n",[81,145113,145114,145120,145130],{"__ignoreMap":125},[204,145115,145116,145118],{"class":206,"line":207},[204,145117,126927],{"class":2049},[204,145119,15659],{"class":214},[204,145121,145122,145124,145126,145128],{"class":206,"line":126},[204,145123,70991],{"class":263},[204,145125,51523],{"class":214},[204,145127,57507],{"class":263},[204,145129,1377],{"class":214},[204,145131,145132],{"class":206,"line":131},[204,145133,1651],{"class":214},[19,145135,145136,145139],{},[81,145137,145138],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[23,145141],{"style":25,"src":145142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[23,145144],{"style":25,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[23,145147],{"style":25,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145150,145151],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[23,145153],{"style":25,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145156,145157],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[161,145159,145160],{"start":126},[71,145161,145162],{},"布局容器",[23,145164],{"style":25,"src":145165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145167,145168],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145170,145171],{},"container-fluid用于移动式布局比较方便",[161,145173,145174],{"start":131},[71,145175,145176,145177],{},"bootstrap ",[30,145178,145179],{},"栅格系统原理",[23,145181],{"style":25,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[161,145184,145185],{"start":1281},[71,145186,145187],{},[30,145188,145189],{},"栅格选项参数",[23,145191],{"style":25,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145194,145195],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145197,14720],{},[196,145199,145200],{"className":126636,"code":145111,"language":126638,"meta":125,"style":125},[81,145201,145202,145208,145218],{"__ignoreMap":125},[204,145203,145204,145206],{"class":206,"line":207},[204,145205,126927],{"class":2049},[204,145207,15659],{"class":214},[204,145209,145210,145212,145214,145216],{"class":206,"line":126},[204,145211,70991],{"class":263},[204,145213,51523],{"class":214},[204,145215,57507],{"class":263},[204,145217,1377],{"class":214},[204,145219,145220],{"class":206,"line":131},[204,145221,1651],{"class":214},[19,145223,135679],{},[23,145225],{"style":25,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145228,145229],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145231,145232],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145234,145235],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145237,145238],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145240,145241],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145243,145244],{},"汇总展示说明：",[196,145246,145247],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,145248,145249,145253,145267,145271],{"__ignoreMap":125},[204,145250,145251],{"class":206,"line":207},[204,145252,130747],{"class":273},[204,145254,145255,145257,145259,145261,145263,145265],{"class":206,"line":126},[204,145256,1123],{"class":214},[204,145258,51697],{"class":51386},[204,145260,53572],{"class":2049},[204,145262,260],{"class":214},[204,145264,130760],{"class":319},[204,145266,51393],{"class":214},[204,145268,145269],{"class":206,"line":131},[204,145270,130767],{"class":214},[204,145272,145273,145275,145277],{"class":206,"line":1281},[204,145274,51871],{"class":214},[204,145276,51697],{"class":51386},[204,145278,51393],{"class":214},[23,145280],{"style":25,"src":145281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145283,145284],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[196,145286,145287],{"className":127383,"code":130740,"language":127385,"meta":125,"style":125},[81,145288,145289,145293,145307,145311],{"__ignoreMap":125},[204,145290,145291],{"class":206,"line":207},[204,145292,130747],{"class":273},[204,145294,145295,145297,145299,145301,145303,145305],{"class":206,"line":126},[204,145296,1123],{"class":214},[204,145298,51697],{"class":51386},[204,145300,53572],{"class":2049},[204,145302,260],{"class":214},[204,145304,130760],{"class":319},[204,145306,51393],{"class":214},[204,145308,145309],{"class":206,"line":131},[204,145310,130767],{"class":214},[204,145312,145313,145315,145317],{"class":206,"line":1281},[204,145314,51871],{"class":214},[204,145316,51697],{"class":51386},[204,145318,51393],{"class":214},[161,145320,145321],{"start":1287},[71,145322,145323],{},[30,145324,145325],{},"列嵌套",[23,145327],{"style":25,"src":145328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145330,145331],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145333,145334],{},"没加row内部这样：",[23,145336],{"style":25,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145339,145340],{},"加上row之后内部为：",[23,145342],{"style":25,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[161,145345,145346],{"start":1301},[71,145347,145348],{},[30,145349,145350],{},"列偏移",[23,145352],{"style":25,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145355,145356],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145358,145359],{},"要加偏移量，即偏移份数",[19,145361,145362],{},"偏移的份数=12-两个盒子的份数",[161,145364,145365],{"start":1307},[71,145366,145367],{},[30,145368,145369],{},"列排序",[23,145371],{"style":25,"src":145372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145374,145375],{},"pull拉左；push推右",[161,145377,145378],{"start":1398},[71,145379,145380],{},[30,145381,145382],{},"响应式工具",[23,145384],{"style":25,"src":145385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145387,145388],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[49,145390,145392],{"id":145391},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145394,145395],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145397,145398],{},"ul {",[19,145400,145401],{},"list-style: none;",[19,145403,145404],{},"margin:0;",[19,145406,145407],{},"padding:0; }",[23,145409],{"style":25,"src":145410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[23,145412],{"style":25,"src":145413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145415,145416],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145418,68975],{},[196,145420,145421],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,145422,145423,145429,145439],{"__ignoreMap":125},[204,145424,145425,145427],{"class":206,"line":207},[204,145426,130484],{"class":2049},[204,145428,15659],{"class":214},[204,145430,145431,145433,145435,145437],{"class":206,"line":126},[204,145432,131116],{"class":263},[204,145434,51523],{"class":214},[204,145436,23823],{"class":263},[204,145438,1377],{"class":214},[204,145440,145441],{"class":206,"line":131},[204,145442,1651],{"class":214},[19,145444,70539],{},[196,145446,145447],{"className":126636,"code":139306,"language":126638,"meta":125,"style":125},[81,145448,145449,145455,145465],{"__ignoreMap":125},[204,145450,145451,145453],{"class":206,"line":207},[204,145452,130484],{"class":2049},[204,145454,15659],{"class":214},[204,145456,145457,145459,145461,145463],{"class":206,"line":126},[204,145458,131116],{"class":263},[204,145460,51523],{"class":214},[204,145462,23823],{"class":263},[204,145464,1377],{"class":214},[204,145466,145467],{"class":206,"line":131},[204,145468,1651],{"class":214},[14,145470,145472],{"id":145471},"_215-swiper-插件使用","21.5 swiper 插件使用",[68,145474,145475,145478,145481],{},[71,145476,145477],{},"下载需要的css和js文件html页面中 引入相关文件",[71,145479,145480],{},"官网找到类似案例，复制html结构，css样式 js 语法",[71,145482,145483],{},"根据需求定制修改模块",[23,145485],{"style":25,"src":145486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145488,145489],{},"解压后将这两部分放到项目中",[23,145491],{"style":25,"src":145492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145494,145495],{},"这个插件可以帮助我们实现轮播图效果",[19,145497,145498],{},"用法：",[23,145500],{"style":25,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145503,145504],{},"找到自己喜欢的",[23,145506],{"style":25,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145509,145510],{},"右键，查看网页源代码",[23,145512],{"style":25,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145515,145516],{},"复制人家的结构内容",[19,145518,145519],{},"然后去看API文档：",[23,145521],{"style":25,"src":145522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145524,145525],{},"可以看看如何修改样式",[19,145527,145528],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5213,145530,145531],{},"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":125,"searchDepth":126,"depth":126,"links":145533},[145534,145539,145543,145548,145553],{"id":144334,"depth":126,"text":144335,"children":145535},[145536,145537,145538],{"id":144338,"depth":131,"text":144339},{"id":144348,"depth":131,"text":144349},{"id":144443,"depth":131,"text":144444},{"id":144458,"depth":126,"text":144459,"children":145540},[145541,145542],{"id":144480,"depth":131,"text":144481},{"id":144496,"depth":131,"text":144497},{"id":144571,"depth":126,"text":144572,"children":145544},[145545,145546,145547],{"id":144584,"depth":131,"text":144585},{"id":144808,"depth":131,"text":144809},{"id":144815,"depth":131,"text":144816},{"id":144956,"depth":126,"text":144957,"children":145549},[145550,145551,145552],{"id":144983,"depth":131,"text":144984},{"id":145046,"depth":131,"text":145047},{"id":145391,"depth":131,"text":145392},{"id":145471,"depth":126,"text":145472},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144326,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145560,"title":145561,"body":145562,"description":132,"extension":133,"meta":145782,"navigation":135,"path":145783,"seo":145784,"stem":145785,"__hash__":145786},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145563,"toc":145778},[145564,145567,145571,145574,145589,145594,145597,145602,145637,145642,145654,145659,145672,145677,145694,145699,145719,145724,145742,145745,145748,145751,145754,145758,145761,145764,145767,145770,145773,145776],[10,145565,145561],{"id":145566},"_22-代码提交与新型相对单位",[14,145568,145570],{"id":145569},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145572,145573],{},"法1：",[161,145575,145576,145583,145586],{},[71,145577,145578,145579],{},"登录网站注册：",[62,145580,145581],{"href":145581,"rel":145582},"https:\u002F\u002Fgitee.com\u002F",[66],[71,145584,145585],{},"码云创建新的仓库",[71,145587,145588],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[68,145590,145591],{},[71,145592,145593],{},"在网站根目录右键-- Git Bash Here",[23,145595],{"style":25,"src":145596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[68,145598,145599],{},[71,145600,145601],{},"如果是第一次利用git提交，请配置好全局选项",[196,145603,145605],{"className":117381,"code":145604,"language":117383,"meta":125,"style":125},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[81,145606,145607,145623],{"__ignoreMap":125},[204,145608,145609,145612,145614,145617,145620],{"class":206,"line":207},[204,145610,145611],{"class":2049},"git",[204,145613,119804],{"class":319},[204,145615,145616],{"class":263}," --global",[204,145618,145619],{"class":319}," user.name",[204,145621,145622],{"class":319}," \"你的名字\"\n",[204,145624,145625,145627,145629,145631,145634],{"class":206,"line":126},[204,145626,145611],{"class":2049},[204,145628,119804],{"class":319},[204,145630,145616],{"class":263},[204,145632,145633],{"class":319}," user.email",[204,145635,145636],{"class":319}," \"你的邮箱\"\n",[68,145638,145639],{},[71,145640,145641],{},"初始化仓库",[196,145643,145645],{"className":117381,"code":145644,"language":117383,"meta":125,"style":125},"git init\n",[81,145646,145647],{"__ignoreMap":125},[204,145648,145649,145651],{"class":206,"line":207},[204,145650,145611],{"class":2049},[204,145652,145653],{"class":319}," init\n",[68,145655,145656],{},[71,145657,145658],{},"把本地文件放到暂存区",[196,145660,145662],{"className":117381,"code":145661,"language":117383,"meta":125,"style":125},"git add .\n",[81,145663,145664],{"__ignoreMap":125},[204,145665,145666,145668,145670],{"class":206,"line":207},[204,145667,145611],{"class":2049},[204,145669,5296],{"class":319},[204,145671,28827],{"class":319},[68,145673,145674],{},[71,145675,145676],{},"把本地文件放到本地仓库里面",[196,145678,145680],{"className":117381,"code":145679,"language":117383,"meta":125,"style":125},"git commit -m \"first commit\"\n",[81,145681,145682],{"__ignoreMap":125},[204,145683,145684,145686,145689,145691],{"class":206,"line":207},[204,145685,145611],{"class":2049},[204,145687,145688],{"class":319}," commit",[204,145690,100968],{"class":263},[204,145692,145693],{"class":319}," \"first commit\"\n",[68,145695,145696],{},[71,145697,145698],{},"链接远程仓库",[196,145700,145702],{"className":117381,"code":145701,"language":117383,"meta":125,"style":125},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[81,145703,145704],{"__ignoreMap":125},[204,145705,145706,145708,145711,145713,145716],{"class":206,"line":207},[204,145707,145611],{"class":2049},[204,145709,145710],{"class":319}," remote",[204,145712,5296],{"class":319},[204,145714,145715],{"class":319}," origin",[204,145717,145718],{"class":319}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[68,145720,145721],{},[71,145722,145723],{},"把本地仓库的文件推送到远程仓库 push",[196,145725,145727],{"className":117381,"code":145726,"language":117383,"meta":125,"style":125},"git push -u origin master\n",[81,145728,145729],{"__ignoreMap":125},[204,145730,145731,145733,145735,145737,145739],{"class":206,"line":207},[204,145732,145611],{"class":2049},[204,145734,29102],{"class":319},[204,145736,28376],{"class":263},[204,145738,145715],{"class":319},[204,145740,145741],{"class":319}," master\n",[23,145743],{"style":25,"src":145744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145746,145747],{},"上方方法暂未实现，后边学完git后在整",[19,145749,145750],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[23,145752],{"style":25,"src":145753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145755,145757],{"id":145756},"_222-新型相对单位","22.2 新型相对单位",[23,145759],{"style":25,"src":145760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[23,145762],{"style":25,"src":145763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145765,145766],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145768,145769],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[23,145771],{"style":25,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145774,145775],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5213,145777,24044],{},{"title":125,"searchDepth":126,"depth":126,"links":145779},[145780,145781],{"id":145569,"depth":126,"text":145570},{"id":145756,"depth":126,"text":145757},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145561,"description":132},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145788,"title":145789,"body":145790,"description":145794,"extension":133,"meta":145795,"navigation":135,"path":145796,"seo":145797,"stem":145798,"__hash__":145799},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145791,"toc":145792},[],{"title":125,"searchDepth":126,"depth":126,"links":145793},[],"自己正经开始学编程的第一门语言！",{"category":92925},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145789,"description":145794},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145801,"title":145802,"body":145803,"description":132,"extension":133,"meta":146950,"navigation":135,"path":146951,"seo":146952,"stem":146953,"__hash__":146954},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145804,"toc":146926},[145805,145808,145812,145815,145818,145843,145846,145852,145856,145859,145886,145889,145929,145932,145944,145947,145953,145957,145961,145988,146005,146012,146016,146019,146045,146048,146052,146055,146095,146098,146115,146121,146125,146130,146174,146177,146195,146198,146266,146270,146277,146280,146295,146298,146307,146310,146321,146324,146333,146336,146353,146356,146371,146375,146379,146382,146384,146404,146408,146411,146414,146425,146428,146434,146438,146444,146471,146474,146486,146489,146500,146503,146509,146513,146519,146569,146572,146614,146617,146650,146653,146687,146691,146694,146714,146717,146753,146756,146769,146773,146777,146783,146786,146799,146803,146806,146812,146815,146819,146822,146825,146874,146878,146894,146900,146907,146913,146923],[10,145806,145802],{"id":145807},"_1-python环境与第一个程序",[14,145809,145811],{"id":145810},"_11-什么是python","1.1 什么是Python",[19,145813,145814],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145816,145817],{},"理解 Python 时抓住三个关键词：",[161,145819,145820,145823,145826],{},[71,145821,145822],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[71,145824,145825],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[71,145827,145828,145829,426,145832,426,145835,426,145838,426,145840,28471],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[81,145830,145831],{},"os",[81,145833,145834],{},"sys",[81,145836,145837],{},"json",[81,145839,57946],{},[81,145841,145842],{},"datetime",[19,145844,145845],{},"Python 程序的运行链路：",[196,145847,145850],{"className":145848,"code":145849,"language":5274,"meta":125},[5272],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[81,145851,145849],{"__ignoreMap":125},[14,145853,145855],{"id":145854},"_12-python解释器","1.2 Python解释器",[19,145857,145858],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[196,145860,145862],{"className":23909,"code":145861,"language":23911,"meta":125,"style":125},"python --version\npython3 --version\npython\npython3\n",[81,145863,145864,145870,145876,145881],{"__ignoreMap":125},[204,145865,145866,145868],{"class":206,"line":207},[204,145867,30466],{"class":2049},[204,145869,26379],{"class":263},[204,145871,145872,145874],{"class":206,"line":126},[204,145873,100965],{"class":2049},[204,145875,26379],{"class":263},[204,145877,145878],{"class":206,"line":131},[204,145879,145880],{"class":2049},"python\n",[204,145882,145883],{"class":206,"line":1281},[204,145884,145885],{"class":2049},"python3\n",[19,145887,145888],{},"进入交互模式后，可以直接输入表达式：",[196,145890,145892],{"className":30464,"code":145891,"language":30466,"meta":125,"style":125},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[81,145893,145894,145905,145910,145924],{"__ignoreMap":125},[204,145895,145896,145899,145901,145903],{"class":206,"line":207},[204,145897,145898],{"class":210},">>>",[204,145900,25205],{"class":263},[204,145902,45652],{"class":210},[204,145904,47809],{"class":263},[204,145906,145907],{"class":206,"line":126},[204,145908,145909],{"class":263},"3\n",[204,145911,145912,145914,145917,145919,145922],{"class":206,"line":131},[204,145913,145898],{"class":210},[204,145915,145916],{"class":263}," print",[204,145918,215],{"class":214},[204,145920,145921],{"class":319},"\"hello python\"",[204,145923,221],{"class":214},[204,145925,145926],{"class":206,"line":1281},[204,145927,145928],{"class":214},"hello python\n",[19,145930,145931],{},"退出交互模式：",[196,145933,145935],{"className":30464,"code":145934,"language":30466,"meta":125,"style":125},"exit()\n",[81,145936,145937],{"__ignoreMap":125},[204,145938,145939,145942],{"class":206,"line":207},[204,145940,145941],{"class":263},"exit",[204,145943,2062],{"class":214},[19,145945,145946],{},"或使用快捷键：",[196,145948,145951],{"className":145949,"code":145950,"language":5274,"meta":125},[5272],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[81,145952,145950],{"__ignoreMap":125},[14,145954,145956],{"id":145955},"_13-安装python","1.3 安装Python",[49,145958,145960],{"id":145959},"_131-windows安装","1.3.1 Windows安装",[161,145962,145963,145970,145973,145979,145985],{},[71,145964,145965,145966],{},"打开 Python 官网：",[62,145967,145968],{"href":145968,"rel":145969},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[66],[71,145971,145972],{},"下载 Windows Installer。",[71,145974,145975,145976,28471],{},"安装时勾选 ",[81,145977,145978],{},"Add Python to PATH",[71,145980,145981,145982,28471],{},"点击 ",[81,145983,145984],{},"Install Now",[71,145986,145987],{},"安装完成后打开命令提示符验证：",[196,145989,145991],{"className":23909,"code":145990,"language":23911,"meta":125,"style":125},"python --version\npip --version\n",[81,145992,145993,145999],{"__ignoreMap":125},[204,145994,145995,145997],{"class":206,"line":207},[204,145996,30466],{"class":2049},[204,145998,26379],{"class":263},[204,146000,146001,146003],{"class":206,"line":126},[204,146002,23918],{"class":2049},[204,146004,26379],{"class":263},[19,146006,146007,146008,146011],{},"如果提示 ",[81,146009,146010],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[49,146013,146015],{"id":146014},"_132-macos安装","1.3.2 macOS安装",[19,146017,146018],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[196,146020,146022],{"className":23909,"code":146021,"language":23911,"meta":125,"style":125},"brew install python\npython3 --version\npip3 --version\n",[81,146023,146024,146033,146039],{"__ignoreMap":125},[204,146025,146026,146029,146031],{"class":206,"line":207},[204,146027,146028],{"class":2049},"brew",[204,146030,23921],{"class":319},[204,146032,124403],{"class":319},[204,146034,146035,146037],{"class":206,"line":126},[204,146036,100965],{"class":2049},[204,146038,26379],{"class":263},[204,146040,146041,146043],{"class":206,"line":131},[204,146042,119785],{"class":2049},[204,146044,26379],{"class":263},[19,146046,146047],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[49,146049,146051],{"id":146050},"_133-linux安装","1.3.3 Linux安装",[19,146053,146054],{},"Ubuntu\u002FDebian：",[196,146056,146058],{"className":23909,"code":146057,"language":23911,"meta":125,"style":125},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[81,146059,146060,146068,146083,146089],{"__ignoreMap":125},[204,146061,146062,146064,146066],{"class":206,"line":207},[204,146063,24663],{"class":2049},[204,146065,117402],{"class":319},[204,146067,26328],{"class":319},[204,146069,146070,146072,146074,146076,146078,146080],{"class":206,"line":126},[204,146071,24663],{"class":2049},[204,146073,117402],{"class":319},[204,146075,23921],{"class":319},[204,146077,104488],{"class":319},[204,146079,100884],{"class":319},[204,146081,146082],{"class":319}," python3-venv\n",[204,146084,146085,146087],{"class":206,"line":131},[204,146086,100965],{"class":2049},[204,146088,26379],{"class":263},[204,146090,146091,146093],{"class":206,"line":1281},[204,146092,119785],{"class":2049},[204,146094,26379],{"class":263},[19,146096,146097],{},"Fedora：",[196,146099,146101],{"className":23909,"code":146100,"language":23911,"meta":125,"style":125},"sudo dnf install python3 python3-pip\n",[81,146102,146103],{"__ignoreMap":125},[204,146104,146105,146107,146109,146111,146113],{"class":206,"line":207},[204,146106,24663],{"class":2049},[204,146108,26401],{"class":319},[204,146110,23921],{"class":319},[204,146112,104488],{"class":319},[204,146114,119850],{"class":319},[19,146116,146117,146118,146120],{},"Linux 上通常使用 ",[81,146119,100965],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146122,146124],{"id":146123},"_14-pip包管理器","1.4 pip包管理器",[19,146126,146127,146129],{},[81,146128,23918],{}," 用来安装第三方库。",[196,146131,146133],{"className":23909,"code":146132,"language":23911,"meta":125,"style":125},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[81,146134,146135,146144,146153,146161,146167],{"__ignoreMap":125},[204,146136,146137,146139,146141],{"class":206,"line":207},[204,146138,23918],{"class":2049},[204,146140,23921],{"class":319},[204,146142,146143],{"class":319}," requests\n",[204,146145,146146,146148,146151],{"class":206,"line":126},[204,146147,23918],{"class":2049},[204,146149,146150],{"class":319}," uninstall",[204,146152,146143],{"class":319},[204,146154,146155,146157,146159],{"class":206,"line":131},[204,146156,23918],{"class":2049},[204,146158,117659],{"class":319},[204,146160,146143],{"class":319},[204,146162,146163,146165],{"class":206,"line":1281},[204,146164,23918],{"class":2049},[204,146166,119040],{"class":319},[204,146168,146169,146171],{"class":206,"line":1287},[204,146170,23918],{"class":2049},[204,146172,146173],{"class":319}," freeze\n",[19,146175,146176],{},"国内网络较慢时可以临时使用镜像：",[196,146178,146180],{"className":23909,"code":146179,"language":23911,"meta":125,"style":125},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[81,146181,146182],{"__ignoreMap":125},[204,146183,146184,146186,146188,146191,146193],{"class":206,"line":207},[204,146185,23918],{"class":2049},[204,146187,23921],{"class":319},[204,146189,146190],{"class":319}," requests",[204,146192,26516],{"class":263},[204,146194,119813],{"class":319},[19,146196,146197],{},"常见第三方库：",[352,146199,146200,146209],{},[355,146201,146202],{},[358,146203,146204,146207],{},[361,146205,146206],{},"库",[361,146208,102781],{},[398,146210,146211,146219,146226,146234,146242,146250,146258],{},[358,146212,146213,146216],{},[403,146214,146215],{},"requests",[403,146217,146218],{},"网络请求",[358,146220,146221,146223],{},[403,146222,100712],{},[403,146224,146225],{},"数值计算",[358,146227,146228,146231],{},[403,146229,146230],{},"pandas",[403,146232,146233],{},"表格数据处理",[358,146235,146236,146239],{},[403,146237,146238],{},"matplotlib",[403,146240,146241],{},"绘图",[358,146243,146244,146247],{},[403,146245,146246],{},"pyecharts",[403,146248,146249],{},"ECharts 图表",[358,146251,146252,146255],{},[403,146253,146254],{},"flask",[403,146256,146257],{},"Web 后端",[358,146259,146260,146263],{},[403,146261,146262],{},"pytest",[403,146264,146265],{},"自动化测试",[14,146267,146269],{"id":146268},"_15-虚拟环境","1.5 虚拟环境",[19,146271,146272,146273,146276],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[81,146274,146275],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146278,146279],{},"创建虚拟环境：",[196,146281,146283],{"className":23909,"code":146282,"language":23911,"meta":125,"style":125},"python -m venv .venv\n",[81,146284,146285],{"__ignoreMap":125},[204,146286,146287,146289,146291,146293],{"class":206,"line":207},[204,146288,30466],{"class":2049},[204,146290,100968],{"class":263},[204,146292,100971],{"class":319},[204,146294,100974],{"class":319},[19,146296,146297],{},"Windows 激活：",[196,146299,146301],{"className":23909,"code":146300,"language":23911,"meta":125,"style":125},".venv\\Scripts\\activate\n",[81,146302,146303],{"__ignoreMap":125},[204,146304,146305],{"class":206,"line":207},[204,146306,146300],{"class":2049},[19,146308,146309],{},"macOS\u002FLinux 激活：",[196,146311,146313],{"className":23909,"code":146312,"language":23911,"meta":125,"style":125},"source .venv\u002Fbin\u002Factivate\n",[81,146314,146315],{"__ignoreMap":125},[204,146316,146317,146319],{"class":206,"line":207},[204,146318,100979],{"class":263},[204,146320,100982],{"class":319},[19,146322,146323],{},"退出虚拟环境：",[196,146325,146327],{"className":23909,"code":146326,"language":23911,"meta":125,"style":125},"deactivate\n",[81,146328,146329],{"__ignoreMap":125},[204,146330,146331],{"class":206,"line":207},[204,146332,146326],{"class":2049},[19,146334,146335],{},"保存依赖：",[196,146337,146339],{"className":23909,"code":146338,"language":23911,"meta":125,"style":125},"pip freeze > requirements.txt\n",[81,146340,146341],{"__ignoreMap":125},[204,146342,146343,146345,146348,146350],{"class":206,"line":207},[204,146344,23918],{"class":2049},[204,146346,146347],{"class":319}," freeze",[204,146349,26308],{"class":210},[204,146351,146352],{"class":319}," requirements.txt\n",[19,146354,146355],{},"安装依赖：",[196,146357,146359],{"className":23909,"code":146358,"language":23911,"meta":125,"style":125},"pip install -r requirements.txt\n",[81,146360,146361],{"__ignoreMap":125},[204,146362,146363,146365,146367,146369],{"class":206,"line":207},[204,146364,23918],{"class":2049},[204,146366,23921],{"class":319},[204,146368,119724],{"class":263},[204,146370,146352],{"class":319},[14,146372,146374],{"id":146373},"_16-开发工具","1.6 开发工具",[49,146376,146378],{"id":146377},"_161-pycharm","1.6.1 PyCharm",[19,146380,146381],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146383,122147],{},[161,146385,146386,146389,146392,146398,146401],{},[71,146387,146388],{},"New Project：创建项目。",[71,146390,146391],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[71,146393,146394,146395,126068],{},"New Python File：创建 ",[81,146396,146397],{},".py",[71,146399,146400],{},"Run：运行当前文件。",[71,146402,146403],{},"Debug：断点调试。",[49,146405,146407],{"id":146406},"_162-vs-code","1.6.2 VS Code",[19,146409,146410],{},"VS Code 轻量，适合后续多语言开发。",[19,146412,146413],{},"建议安装插件：",[161,146415,146416,146419,146422],{},[71,146417,146418],{},"Python。",[71,146420,146421],{},"Pylance。",[71,146423,146424],{},"Jupyter。",[19,146426,146427],{},"选择解释器：",[196,146429,146432],{"className":146430,"code":146431,"language":5274,"meta":125},[5272],"Ctrl + Shift + P -> Python: Select Interpreter\n",[81,146433,146431],{"__ignoreMap":125},[14,146435,146437],{"id":146436},"_17-第一个python程序","1.7 第一个Python程序",[19,146439,146440,146441,24705],{},"创建文件 ",[81,146442,146443],{},"hello.py",[196,146445,146447],{"className":30464,"code":146446,"language":30466,"meta":125,"style":125},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[81,146448,146449,146460],{"__ignoreMap":125},[204,146450,146451,146453,146455,146458],{"class":206,"line":207},[204,146452,30501],{"class":263},[204,146454,215],{"class":214},[204,146456,146457],{"class":319},"\"Hello World\"",[204,146459,221],{"class":214},[204,146461,146462,146464,146466,146469],{"class":206,"line":126},[204,146463,30501],{"class":263},[204,146465,215],{"class":214},[204,146467,146468],{"class":319},"\"你好，Python\"",[204,146470,221],{"class":214},[19,146472,146473],{},"在终端运行：",[196,146475,146477],{"className":23909,"code":146476,"language":23911,"meta":125,"style":125},"python hello.py\n",[81,146478,146479],{"__ignoreMap":125},[204,146480,146481,146483],{"class":206,"line":207},[204,146482,30466],{"class":2049},[204,146484,146485],{"class":319}," hello.py\n",[19,146487,146488],{},"或：",[196,146490,146492],{"className":23909,"code":146491,"language":23911,"meta":125,"style":125},"python3 hello.py\n",[81,146493,146494],{"__ignoreMap":125},[204,146495,146496,146498],{"class":206,"line":207},[204,146497,100965],{"class":2049},[204,146499,146485],{"class":319},[19,146501,146502],{},"输出：",[196,146504,146507],{"className":146505,"code":146506,"language":5274,"meta":125},[5272],"Hello World\n你好，Python\n",[81,146508,146506],{"__ignoreMap":125},[14,146510,146512],{"id":146511},"_18-print函数","1.8 print函数",[19,146514,146515,146518],{},[81,146516,146517],{},"print()"," 用来输出内容。",[196,146520,146522],{"className":30464,"code":146521,"language":30466,"meta":125,"style":125},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[81,146523,146524,146534,146544,146554],{"__ignoreMap":125},[204,146525,146526,146528,146530,146532],{"class":206,"line":207},[204,146527,30501],{"class":263},[204,146529,215],{"class":214},[204,146531,5931],{"class":319},[204,146533,221],{"class":214},[204,146535,146536,146538,146540,146542],{"class":206,"line":126},[204,146537,30501],{"class":263},[204,146539,215],{"class":214},[204,146541,524],{"class":263},[204,146543,221],{"class":214},[204,146545,146546,146548,146550,146552],{"class":206,"line":131},[204,146547,30501],{"class":263},[204,146549,215],{"class":214},[204,146551,264],{"class":263},[204,146553,221],{"class":214},[204,146555,146556,146558,146560,146563,146565,146567],{"class":206,"line":1281},[204,146557,30501],{"class":263},[204,146559,215],{"class":214},[204,146561,146562],{"class":319},"\"年龄:\"",[204,146564,12522],{"class":214},[204,146566,863],{"class":263},[204,146568,221],{"class":214},[19,146570,146571],{},"多个内容用逗号隔开，默认中间加空格：",[196,146573,146575],{"className":30464,"code":146574,"language":30466,"meta":125,"style":125},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[81,146576,146577,146587,146597],{"__ignoreMap":125},[204,146578,146579,146582,146584],{"class":206,"line":207},[204,146580,146581],{"class":214},"name ",[204,146583,260],{"class":210},[204,146585,146586],{"class":319}," \"张三\"\n",[204,146588,146589,146592,146594],{"class":206,"line":126},[204,146590,146591],{"class":214},"age ",[204,146593,260],{"class":210},[204,146595,146596],{"class":263}," 18\n",[204,146598,146599,146601,146603,146606,146609,146611],{"class":206,"line":131},[204,146600,30501],{"class":263},[204,146602,215],{"class":214},[204,146604,146605],{"class":319},"\"姓名:\"",[204,146607,146608],{"class":214},", name, ",[204,146610,146562],{"class":319},[204,146612,146613],{"class":214},", age)\n",[19,146615,146616],{},"修改分隔符：",[196,146618,146620],{"className":30464,"code":146619,"language":30466,"meta":125,"style":125},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[81,146621,146622],{"__ignoreMap":125},[204,146623,146624,146626,146628,146631,146633,146635,146637,146639,146641,146644,146646,146648],{"class":206,"line":207},[204,146625,30501],{"class":263},[204,146627,215],{"class":214},[204,146629,146630],{"class":319},"\"2024\"",[204,146632,12522],{"class":214},[204,146634,54402],{"class":319},[204,146636,12522],{"class":214},[204,146638,54402],{"class":319},[204,146640,12522],{"class":214},[204,146642,146643],{"class":5303},"sep",[204,146645,260],{"class":210},[204,146647,32569],{"class":319},[204,146649,221],{"class":214},[19,146651,146652],{},"修改结尾符：",[196,146654,146656],{"className":30464,"code":146655,"language":30466,"meta":125,"style":125},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[81,146657,146658,146676],{"__ignoreMap":125},[204,146659,146660,146662,146664,146666,146668,146670,146672,146674],{"class":206,"line":207},[204,146661,30501],{"class":263},[204,146663,215],{"class":214},[204,146665,5931],{"class":319},[204,146667,12522],{"class":214},[204,146669,45887],{"class":5303},[204,146671,260],{"class":210},[204,146673,4445],{"class":319},[204,146675,221],{"class":214},[204,146677,146678,146680,146682,146685],{"class":206,"line":126},[204,146679,30501],{"class":263},[204,146681,215],{"class":214},[204,146683,146684],{"class":319},"\"python\"",[204,146686,221],{"class":214},[14,146688,146690],{"id":146689},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146692,146693],{},"交互运行适合临时验证：",[196,146695,146697],{"className":30464,"code":146696,"language":30466,"meta":125,"style":125},">>> 10 * 3\n30\n",[81,146698,146699,146709],{"__ignoreMap":125},[204,146700,146701,146703,146705,146707],{"class":206,"line":207},[204,146702,145898],{"class":210},[204,146704,2124],{"class":263},[204,146706,6605],{"class":210},[204,146708,120121],{"class":263},[204,146710,146711],{"class":206,"line":126},[204,146712,146713],{"class":263},"30\n",[19,146715,146716],{},"脚本运行适合保存程序：",[196,146718,146720],{"className":30464,"code":146719,"language":30466,"meta":125,"style":125},"price = 8\ncount = 5\nprint(price * count)\n",[81,146721,146722,146732,146741],{"__ignoreMap":125},[204,146723,146724,146727,146729],{"class":206,"line":207},[204,146725,146726],{"class":214},"price ",[204,146728,260],{"class":210},[204,146730,146731],{"class":263}," 8\n",[204,146733,146734,146737,146739],{"class":206,"line":126},[204,146735,146736],{"class":214},"count ",[204,146738,260],{"class":210},[204,146740,54513],{"class":263},[204,146742,146743,146745,146748,146750],{"class":206,"line":131},[204,146744,30501],{"class":263},[204,146746,146747],{"class":214},"(price ",[204,146749,668],{"class":210},[204,146751,146752],{"class":214}," count)\n",[19,146754,146755],{},"实际学习中推荐：",[161,146757,146758,146761,146766],{},[71,146759,146760],{},"临时试一个语法，用交互模式。",[71,146762,146763,146764,126068],{},"写完整练习，用 ",[81,146765,146397],{},[71,146767,146768],{},"写项目，用独立目录和虚拟环境。",[14,146770,146772],{"id":146771},"_110-常见错误","1.10 常见错误",[49,146774,146776],{"id":146775},"_1101-命令找不到","1.10.1 命令找不到",[196,146778,146781],{"className":146779,"code":146780,"language":5274,"meta":125},[5272],"python: command not found\n",[81,146782,146780],{"__ignoreMap":125},[19,146784,146785],{},"原因：",[161,146787,146788,146791,146794],{},[71,146789,146790],{},"没安装 Python。",[71,146792,146793],{},"PATH 没配置。",[71,146795,146796,146797,28471],{},"Linux\u002FmacOS 应该使用 ",[81,146798,100965],{},[49,146800,146802],{"id":146801},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146804,146805],{},"不要把文件命名为：",[196,146807,146810],{"className":146808,"code":146809,"language":5274,"meta":125},[5272],"random.py\njson.py\ntime.py\nrequests.py\n",[81,146811,146809],{"__ignoreMap":125},[19,146813,146814],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[49,146816,146818],{"id":146817},"_1103-中文乱码","1.10.3 中文乱码",[19,146820,146821],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146823,146824],{},"如果读写文件出现乱码，要明确指定编码：",[196,146826,146828],{"className":30464,"code":146827,"language":30466,"meta":125,"style":125},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[81,146829,146830,146864],{"__ignoreMap":125},[204,146831,146832,146834,146837,146839,146842,146844,146847,146849,146852,146854,146857,146859,146861],{"class":206,"line":207},[204,146833,107918],{"class":210},[204,146835,146836],{"class":263}," open",[204,146838,215],{"class":214},[204,146840,146841],{"class":319},"\"data.txt\"",[204,146843,12522],{"class":214},[204,146845,146846],{"class":319},"\"r\"",[204,146848,12522],{"class":214},[204,146850,146851],{"class":5303},"encoding",[204,146853,260],{"class":210},[204,146855,146856],{"class":319},"\"utf-8\"",[204,146858,13801],{"class":214},[204,146860,31469],{"class":210},[204,146862,146863],{"class":214}," f:\n",[204,146865,146866,146869,146871],{"class":206,"line":126},[204,146867,146868],{"class":214},"    content ",[204,146870,260],{"class":210},[204,146872,146873],{"class":214}," f.read()\n",[14,146875,146877],{"id":146876},"_111-本章练习","1.11 本章练习",[161,146879,146880,146883,146889],{},[71,146881,146882],{},"安装 Python，并在终端输出版本号。",[71,146884,146885,146886,146888],{},"新建 ",[81,146887,146443],{},"，输出自己的姓名、年龄、学习目标。",[71,146890,104451,146891,146893],{},[81,146892,146517],{}," 输出下面格式：",[196,146895,146898],{"className":146896,"code":146897,"language":5274,"meta":125},[5272],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[81,146899,146897],{"__ignoreMap":125},[161,146901,146902],{"start":1281},[71,146903,104451,146904,146906],{},[81,146905,146643],{}," 输出日期：",[196,146908,146911],{"className":146909,"code":146910,"language":5274,"meta":125},[5272],"2024-10-10\n",[81,146912,146910],{"__ignoreMap":125},[161,146914,146915],{"start":1287},[71,146916,104451,146917,146919,146920,146922],{},[81,146918,45887],{}," 让两次 ",[81,146921,146517],{}," 输出在同一行。",[5213,146924,146925],{},"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":125,"searchDepth":126,"depth":126,"links":146927},[146928,146929,146930,146935,146936,146937,146941,146942,146943,146944,146949],{"id":145810,"depth":126,"text":145811},{"id":145854,"depth":126,"text":145855},{"id":145955,"depth":126,"text":145956,"children":146931},[146932,146933,146934],{"id":145959,"depth":131,"text":145960},{"id":146014,"depth":131,"text":146015},{"id":146050,"depth":131,"text":146051},{"id":146123,"depth":126,"text":146124},{"id":146268,"depth":126,"text":146269},{"id":146373,"depth":126,"text":146374,"children":146938},[146939,146940],{"id":146377,"depth":131,"text":146378},{"id":146406,"depth":131,"text":146407},{"id":146436,"depth":126,"text":146437},{"id":146511,"depth":126,"text":146512},{"id":146689,"depth":126,"text":146690},{"id":146771,"depth":126,"text":146772,"children":146945},[146946,146947,146948],{"id":146775,"depth":131,"text":146776},{"id":146801,"depth":131,"text":146802},{"id":146817,"depth":131,"text":146818},{"id":146876,"depth":126,"text":146877},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145802,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146956,"title":146957,"body":146958,"description":132,"extension":133,"meta":149362,"navigation":135,"path":149363,"seo":149364,"stem":149365,"__hash__":149366},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146959,"toc":149347},[146960,146963,146967,146970,146973,146990,146993,147035,147038,147042,147045,147048,147085,147088,147122,147125,147217,147221,147235,147238,147265,147268,147272,147375,147382,147385,147402,147406,147413,147602,147605,147678,147682,147685,147769,147772,147804,147808,148012,148015,148019,148025,148127,148130,148386,148390,148393,148396,148410,148412,148598,148602,148964,148970,148974,148977,149101,149104,149283,149286,149290,149323,149327,149344],[10,146961,146957],{"id":146962},"_10-json与pyecharts折线图",[14,146964,146966],{"id":146965},"_101-数据可视化","10.1 数据可视化",[19,146968,146969],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,146971,146972],{},"常见图表：",[161,146974,146975,146978,146981,146984,146987],{},[71,146976,146977],{},"折线图：看趋势。",[71,146979,146980],{},"柱状图：看分类对比。",[71,146982,146983],{},"饼图：看占比。",[71,146985,146986],{},"地图：看地域分布。",[71,146988,146989],{},"散点图：看两个变量之间的关系。",[19,146991,146992],{},"Python 可视化常用库：",[352,146994,146995,147003],{},[355,146996,146997],{},[358,146998,146999,147001],{},[361,147000,146206],{},[361,147002,23827],{},[398,147004,147005,147012,147020,147027],{},[358,147006,147007,147009],{},[403,147008,146238],{},[403,147010,147011],{},"基础、经典、可定制",[358,147013,147014,147017],{},[403,147015,147016],{},"seaborn",[403,147018,147019],{},"统计图表更美观",[358,147021,147022,147024],{},[403,147023,146246],{},[403,147025,147026],{},"生成交互式网页图表",[358,147028,147029,147032],{},[403,147030,147031],{},"plotly",[403,147033,147034],{},"交互图表能力强",[19,147036,147037],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147039,147041],{"id":147040},"_102-json回顾","10.2 JSON回顾",[19,147043,147044],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147046,147047],{},"Python 字典：",[196,147049,147051],{"className":30464,"code":147050,"language":30466,"meta":125,"style":125},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[81,147052,147053,147061,147072,147081],{"__ignoreMap":125},[204,147054,147055,147057,147059],{"class":206,"line":207},[204,147056,101743],{"class":214},[204,147058,260],{"class":210},[204,147060,15659],{"class":214},[204,147062,147063,147066,147068,147070],{"class":206,"line":126},[204,147064,147065],{"class":319},"    \"name\"",[204,147067,51523],{"class":214},[204,147069,69355],{"class":319},[204,147071,31552],{"class":214},[204,147073,147074,147077,147079],{"class":206,"line":131},[204,147075,147076],{"class":319},"    \"value\"",[204,147078,51523],{"class":214},[204,147080,97544],{"class":263},[204,147082,147083],{"class":206,"line":1281},[204,147084,1651],{"class":214},[19,147086,147087],{},"JSON 字符串：",[196,147089,147092],{"className":147090,"code":147091,"language":145837,"meta":125,"style":125},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[81,147093,147094,147098,147109,147118],{"__ignoreMap":125},[204,147095,147096],{"class":206,"line":207},[204,147097,1632],{"class":214},[204,147099,147100,147103,147105,147107],{"class":206,"line":126},[204,147101,147102],{"class":263},"  \"name\"",[204,147104,51523],{"class":214},[204,147106,69355],{"class":319},[204,147108,31552],{"class":214},[204,147110,147111,147114,147116],{"class":206,"line":131},[204,147112,147113],{"class":263},"  \"value\"",[204,147115,51523],{"class":214},[204,147117,97544],{"class":263},[204,147119,147120],{"class":206,"line":1281},[204,147121,1651],{"class":214},[19,147123,147124],{},"Python 与 JSON 的转换：",[196,147126,147128],{"className":30464,"code":147127,"language":30466,"meta":125,"style":125},"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",[81,147129,147130,147137,147141,147166,147170,147189,147196,147200,147210],{"__ignoreMap":125},[204,147131,147132,147134],{"class":206,"line":207},[204,147133,30478],{"class":210},[204,147135,147136],{"class":214}," json\n",[204,147138,147139],{"class":206,"line":126},[204,147140,2486],{"emptyLinePlaceholder":135},[204,147142,147143,147145,147147,147149,147151,147153,147155,147157,147160,147162,147164],{"class":206,"line":131},[204,147144,101743],{"class":214},[204,147146,260],{"class":210},[204,147148,4534],{"class":214},[204,147150,62765],{"class":319},[204,147152,51523],{"class":214},[204,147154,69355],{"class":319},[204,147156,12522],{"class":214},[204,147158,147159],{"class":319},"\"value\"",[204,147161,51523],{"class":214},[204,147163,524],{"class":263},[204,147165,1651],{"class":214},[204,147167,147168],{"class":206,"line":1281},[204,147169,2486],{"emptyLinePlaceholder":135},[204,147171,147172,147175,147177,147180,147183,147185,147187],{"class":206,"line":1287},[204,147173,147174],{"class":214},"json_text ",[204,147176,260],{"class":210},[204,147178,147179],{"class":214}," json.dumps(data, ",[204,147181,147182],{"class":5303},"ensure_ascii",[204,147184,260],{"class":210},[204,147186,34073],{"class":263},[204,147188,221],{"class":214},[204,147190,147191,147193],{"class":206,"line":1301},[204,147192,30501],{"class":263},[204,147194,147195],{"class":214},"(json_text)\n",[204,147197,147198],{"class":206,"line":1307},[204,147199,2486],{"emptyLinePlaceholder":135},[204,147201,147202,147205,147207],{"class":206,"line":1398},[204,147203,147204],{"class":214},"new_data ",[204,147206,260],{"class":210},[204,147208,147209],{"class":214}," json.loads(json_text)\n",[204,147211,147212,147214],{"class":206,"line":1404},[204,147213,30501],{"class":263},[204,147215,147216],{"class":214},"(new_data)\n",[14,147218,147220],{"id":147219},"_103-安装pyecharts","10.3 安装pyecharts",[196,147222,147224],{"className":23909,"code":147223,"language":23911,"meta":125,"style":125},"pip install pyecharts\n",[81,147225,147226],{"__ignoreMap":125},[204,147227,147228,147230,147232],{"class":206,"line":207},[204,147229,23918],{"class":2049},[204,147231,23921],{"class":319},[204,147233,147234],{"class":319}," pyecharts\n",[19,147236,147237],{},"验证：",[196,147239,147241],{"className":30464,"code":147240,"language":30466,"meta":125,"style":125},"import pyecharts\n\nprint(pyecharts.__version__)\n",[81,147242,147243,147249,147253],{"__ignoreMap":125},[204,147244,147245,147247],{"class":206,"line":207},[204,147246,30478],{"class":210},[204,147248,147234],{"class":214},[204,147250,147251],{"class":206,"line":126},[204,147252,2486],{"emptyLinePlaceholder":135},[204,147254,147255,147257,147260,147263],{"class":206,"line":131},[204,147256,30501],{"class":263},[204,147258,147259],{"class":214},"(pyecharts.",[204,147261,147262],{"class":263},"__version__",[204,147264,221],{"class":214},[19,147266,147267],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147269,147271],{"id":147270},"_104-第一个折线图","10.4 第一个折线图",[196,147273,147275],{"className":30464,"code":147274,"language":30466,"meta":125,"style":125},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[81,147276,147277,147289,147293,147303,147333,147365],{"__ignoreMap":125},[204,147278,147279,147281,147284,147286],{"class":206,"line":207},[204,147280,30823],{"class":210},[204,147282,147283],{"class":214}," pyecharts.charts ",[204,147285,30478],{"class":210},[204,147287,147288],{"class":214}," Line\n",[204,147290,147291],{"class":206,"line":126},[204,147292,2486],{"emptyLinePlaceholder":135},[204,147294,147295,147298,147300],{"class":206,"line":131},[204,147296,147297],{"class":214},"line ",[204,147299,260],{"class":210},[204,147301,147302],{"class":214}," Line()\n",[204,147304,147305,147308,147311,147313,147316,147318,147321,147323,147326,147328,147331],{"class":206,"line":1281},[204,147306,147307],{"class":214},"line.add_xaxis([",[204,147309,147310],{"class":319},"\"周一\"",[204,147312,12522],{"class":214},[204,147314,147315],{"class":319},"\"周二\"",[204,147317,12522],{"class":214},[204,147319,147320],{"class":319},"\"周三\"",[204,147322,12522],{"class":214},[204,147324,147325],{"class":319},"\"周四\"",[204,147327,12522],{"class":214},[204,147329,147330],{"class":319},"\"周五\"",[204,147332,4743],{"class":214},[204,147334,147335,147338,147341,147343,147345,147347,147349,147351,147353,147355,147358,147360,147363],{"class":206,"line":1287},[204,147336,147337],{"class":214},"line.add_yaxis(",[204,147339,147340],{"class":319},"\"销售额\"",[204,147342,77604],{"class":214},[204,147344,524],{"class":263},[204,147346,12522],{"class":214},[204,147348,1030],{"class":263},[204,147350,12522],{"class":214},[204,147352,1075],{"class":263},[204,147354,12522],{"class":214},[204,147356,147357],{"class":263},"150",[204,147359,12522],{"class":214},[204,147361,147362],{"class":263},"180",[204,147364,4743],{"class":214},[204,147366,147367,147370,147373],{"class":206,"line":1301},[204,147368,147369],{"class":214},"line.render(",[204,147371,147372],{"class":319},"\"line.html\"",[204,147374,221],{"class":214},[19,147376,147377,147378,147381],{},"运行后会生成 ",[81,147379,147380],{},"line.html","，用浏览器打开即可看到图表。",[19,147383,147384],{},"核心步骤：",[161,147386,147387,147390,147393,147396,147399],{},[71,147388,147389],{},"导入图表类。",[71,147391,147392],{},"创建图表对象。",[71,147394,147395],{},"添加 x 轴数据。",[71,147397,147398],{},"添加 y 轴数据。",[71,147400,147401],{},"渲染为 HTML。",[14,147403,147405],{"id":147404},"_105-全局配置","10.5 全局配置",[19,147407,147408,147409,147412],{},"常用配置在 ",[81,147410,147411],{},"pyecharts.options"," 中。",[196,147414,147416],{"className":30464,"code":147415,"language":30466,"meta":125,"style":125},"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",[81,147417,147418,147435,147445,147449,147457,147481,147509,147514,147533,147552,147570,147590,147594],{"__ignoreMap":125},[204,147419,147420,147422,147425,147427,147430,147432],{"class":206,"line":207},[204,147421,30823],{"class":210},[204,147423,147424],{"class":214}," pyecharts ",[204,147426,30478],{"class":210},[204,147428,147429],{"class":214}," options ",[204,147431,31469],{"class":210},[204,147433,147434],{"class":214}," opts\n",[204,147436,147437,147439,147441,147443],{"class":206,"line":126},[204,147438,30823],{"class":210},[204,147440,147283],{"class":214},[204,147442,30478],{"class":210},[204,147444,147288],{"class":214},[204,147446,147447],{"class":206,"line":131},[204,147448,2486],{"emptyLinePlaceholder":135},[204,147450,147451,147453,147455],{"class":206,"line":1281},[204,147452,147297],{"class":214},[204,147454,260],{"class":210},[204,147456,147302],{"class":214},[204,147458,147459,147461,147463,147465,147467,147469,147471,147473,147475,147477,147479],{"class":206,"line":1287},[204,147460,147307],{"class":214},[204,147462,147310],{"class":319},[204,147464,12522],{"class":214},[204,147466,147315],{"class":319},[204,147468,12522],{"class":214},[204,147470,147320],{"class":319},[204,147472,12522],{"class":214},[204,147474,147325],{"class":319},[204,147476,12522],{"class":214},[204,147478,147330],{"class":319},[204,147480,4743],{"class":214},[204,147482,147483,147485,147487,147489,147491,147493,147495,147497,147499,147501,147503,147505,147507],{"class":206,"line":1301},[204,147484,147337],{"class":214},[204,147486,147340],{"class":319},[204,147488,77604],{"class":214},[204,147490,524],{"class":263},[204,147492,12522],{"class":214},[204,147494,1030],{"class":263},[204,147496,12522],{"class":214},[204,147498,1075],{"class":263},[204,147500,12522],{"class":214},[204,147502,147357],{"class":263},[204,147504,12522],{"class":214},[204,147506,147362],{"class":263},[204,147508,4743],{"class":214},[204,147510,147511],{"class":206,"line":1307},[204,147512,147513],{"class":214},"line.set_global_opts(\n",[204,147515,147516,147519,147521,147524,147526,147528,147531],{"class":206,"line":1398},[204,147517,147518],{"class":5303},"    title_opts",[204,147520,260],{"class":210},[204,147522,147523],{"class":214},"opts.TitleOpts(",[204,147525,51493],{"class":5303},[204,147527,260],{"class":210},[204,147529,147530],{"class":319},"\"一周销售额\"",[204,147532,38133],{"class":214},[204,147534,147535,147538,147540,147543,147545,147547,147550],{"class":206,"line":1404},[204,147536,147537],{"class":5303},"    xaxis_opts",[204,147539,260],{"class":210},[204,147541,147542],{"class":214},"opts.AxisOpts(",[204,147544,79896],{"class":5303},[204,147546,260],{"class":210},[204,147548,147549],{"class":319},"\"日期\"",[204,147551,38133],{"class":214},[204,147553,147554,147557,147559,147561,147563,147565,147568],{"class":206,"line":1416},[204,147555,147556],{"class":5303},"    yaxis_opts",[204,147558,260],{"class":210},[204,147560,147542],{"class":214},[204,147562,79896],{"class":5303},[204,147564,260],{"class":210},[204,147566,147567],{"class":319},"\"金额\"",[204,147569,38133],{"class":214},[204,147571,147572,147575,147577,147580,147583,147585,147588],{"class":206,"line":1698},[204,147573,147574],{"class":5303},"    tooltip_opts",[204,147576,260],{"class":210},[204,147578,147579],{"class":214},"opts.TooltipOpts(",[204,147581,147582],{"class":5303},"trigger",[204,147584,260],{"class":210},[204,147586,147587],{"class":319},"\"axis\"",[204,147589,38133],{"class":214},[204,147591,147592],{"class":206,"line":1703},[204,147593,221],{"class":214},[204,147595,147596,147598,147600],{"class":206,"line":1709},[204,147597,147369],{"class":214},[204,147599,147372],{"class":319},[204,147601,221],{"class":214},[19,147603,147604],{},"常见全局配置：",[352,147606,147607,147616],{},[355,147608,147609],{},[358,147610,147611,147614],{},[361,147612,147613],{},"配置",[361,147615,102781],{},[398,147617,147618,147628,147638,147648,147658,147668],{},[358,147619,147620,147625],{},[403,147621,147622],{},[81,147623,147624],{},"TitleOpts",[403,147626,147627],{},"标题",[358,147629,147630,147635],{},[403,147631,147632],{},[81,147633,147634],{},"LegendOpts",[403,147636,147637],{},"图例",[358,147639,147640,147645],{},[403,147641,147642],{},[81,147643,147644],{},"TooltipOpts",[403,147646,147647],{},"提示框",[358,147649,147650,147655],{},[403,147651,147652],{},[81,147653,147654],{},"AxisOpts",[403,147656,147657],{},"坐标轴",[358,147659,147660,147665],{},[403,147661,147662],{},[81,147663,147664],{},"VisualMapOpts",[403,147666,147667],{},"视觉映射",[358,147669,147670,147675],{},[403,147671,147672],{},[81,147673,147674],{},"DataZoomOpts",[403,147676,147677],{},"区域缩放",[14,147679,147681],{"id":147680},"_106-系列配置","10.6 系列配置",[19,147683,147684],{},"系列配置作用于某一组数据。",[196,147686,147688],{"className":30464,"code":147687,"language":30466,"meta":125,"style":125},"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",[81,147689,147690,147695,147706,147735,147746,147765],{"__ignoreMap":125},[204,147691,147692],{"class":206,"line":207},[204,147693,147694],{"class":214},"line.add_yaxis(\n",[204,147696,147697,147700,147702,147704],{"class":206,"line":126},[204,147698,147699],{"class":5303},"    series_name",[204,147701,260],{"class":210},[204,147703,147340],{"class":319},[204,147705,31552],{"class":214},[204,147707,147708,147711,147713,147715,147717,147719,147721,147723,147725,147727,147729,147731,147733],{"class":206,"line":131},[204,147709,147710],{"class":5303},"    y_axis",[204,147712,260],{"class":210},[204,147714,1103],{"class":214},[204,147716,524],{"class":263},[204,147718,12522],{"class":214},[204,147720,1030],{"class":263},[204,147722,12522],{"class":214},[204,147724,1075],{"class":263},[204,147726,12522],{"class":214},[204,147728,147357],{"class":263},[204,147730,12522],{"class":214},[204,147732,147362],{"class":263},[204,147734,87922],{"class":214},[204,147736,147737,147740,147742,147744],{"class":206,"line":1281},[204,147738,147739],{"class":5303},"    is_smooth",[204,147741,260],{"class":210},[204,147743,31562],{"class":263},[204,147745,31552],{"class":214},[204,147747,147748,147751,147753,147756,147759,147761,147763],{"class":206,"line":1287},[204,147749,147750],{"class":5303},"    label_opts",[204,147752,260],{"class":210},[204,147754,147755],{"class":214},"opts.LabelOpts(",[204,147757,147758],{"class":5303},"is_show",[204,147760,260],{"class":210},[204,147762,31562],{"class":263},[204,147764,38133],{"class":214},[204,147766,147767],{"class":206,"line":1301},[204,147768,221],{"class":214},[19,147770,147771],{},"常用参数：",[161,147773,147774,147780,147786,147792,147798],{},[71,147775,147776,147779],{},[81,147777,147778],{},"series_name","：系列名称。",[71,147781,147782,147785],{},[81,147783,147784],{},"y_axis","：y 轴数据。",[71,147787,147788,147791],{},[81,147789,147790],{},"is_smooth","：是否平滑曲线。",[71,147793,147794,147797],{},[81,147795,147796],{},"label_opts","：标签配置。",[71,147799,147800,147803],{},[81,147801,147802],{},"symbol_size","：标记点大小。",[14,147805,147807],{"id":147806},"_107-多条折线","10.7 多条折线",[196,147809,147811],{"className":30464,"code":147810,"language":30466,"meta":125,"style":125},"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",[81,147812,147813,147827,147837,147841,147870,147874,147882,147887,147925,147962,147966,147983,147999,148003],{"__ignoreMap":125},[204,147814,147815,147817,147819,147821,147823,147825],{"class":206,"line":207},[204,147816,30823],{"class":210},[204,147818,147424],{"class":214},[204,147820,30478],{"class":210},[204,147822,147429],{"class":214},[204,147824,31469],{"class":210},[204,147826,147434],{"class":214},[204,147828,147829,147831,147833,147835],{"class":206,"line":126},[204,147830,30823],{"class":210},[204,147832,147283],{"class":214},[204,147834,30478],{"class":210},[204,147836,147288],{"class":214},[204,147838,147839],{"class":206,"line":131},[204,147840,2486],{"emptyLinePlaceholder":135},[204,147842,147843,147846,147848,147850,147852,147854,147856,147858,147860,147862,147864,147866,147868],{"class":206,"line":1281},[204,147844,147845],{"class":214},"dates ",[204,147847,260],{"class":210},[204,147849,52312],{"class":214},[204,147851,147310],{"class":319},[204,147853,12522],{"class":214},[204,147855,147315],{"class":319},[204,147857,12522],{"class":214},[204,147859,147320],{"class":319},[204,147861,12522],{"class":214},[204,147863,147325],{"class":319},[204,147865,12522],{"class":214},[204,147867,147330],{"class":319},[204,147869,33332],{"class":214},[204,147871,147872],{"class":206,"line":1287},[204,147873,2486],{"emptyLinePlaceholder":135},[204,147875,147876,147878,147880],{"class":206,"line":1301},[204,147877,147297],{"class":214},[204,147879,260],{"class":210},[204,147881,147302],{"class":214},[204,147883,147884],{"class":206,"line":1307},[204,147885,147886],{"class":214},"line.add_xaxis(dates)\n",[204,147888,147889,147891,147894,147896,147898,147900,147903,147905,147907,147909,147911,147913,147915,147917,147919,147921,147923],{"class":206,"line":1398},[204,147890,147337],{"class":214},[204,147892,147893],{"class":319},"\"线上销售\"",[204,147895,77604],{"class":214},[204,147897,524],{"class":263},[204,147899,12522],{"class":214},[204,147901,147902],{"class":263},"130",[204,147904,12522],{"class":214},[204,147906,1030],{"class":263},[204,147908,12522],{"class":214},[204,147910,21135],{"class":263},[204,147912,12522],{"class":214},[204,147914,1808],{"class":263},[204,147916,112287],{"class":214},[204,147918,147790],{"class":5303},[204,147920,260],{"class":210},[204,147922,31562],{"class":263},[204,147924,221],{"class":214},[204,147926,147927,147929,147932,147934,147936,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956,147958,147960],{"class":206,"line":1404},[204,147928,147337],{"class":214},[204,147930,147931],{"class":319},"\"线下销售\"",[204,147933,77604],{"class":214},[204,147935,825],{"class":263},[204,147937,12522],{"class":214},[204,147939,1075],{"class":263},[204,147941,12522],{"class":214},[204,147943,524],{"class":263},[204,147945,12522],{"class":214},[204,147947,1030],{"class":263},[204,147949,12522],{"class":214},[204,147951,147357],{"class":263},[204,147953,112287],{"class":214},[204,147955,147790],{"class":5303},[204,147957,260],{"class":210},[204,147959,31562],{"class":263},[204,147961,221],{"class":214},[204,147963,147964],{"class":206,"line":1416},[204,147965,147513],{"class":214},[204,147967,147968,147970,147972,147974,147976,147978,147981],{"class":206,"line":1698},[204,147969,147518],{"class":5303},[204,147971,260],{"class":210},[204,147973,147523],{"class":214},[204,147975,51493],{"class":5303},[204,147977,260],{"class":210},[204,147979,147980],{"class":319},"\"线上线下销售趋势\"",[204,147982,38133],{"class":214},[204,147984,147985,147987,147989,147991,147993,147995,147997],{"class":206,"line":1703},[204,147986,147574],{"class":5303},[204,147988,260],{"class":210},[204,147990,147579],{"class":214},[204,147992,147582],{"class":5303},[204,147994,260],{"class":210},[204,147996,147587],{"class":319},[204,147998,38133],{"class":214},[204,148000,148001],{"class":206,"line":1709},[204,148002,221],{"class":214},[204,148004,148005,148007,148010],{"class":206,"line":1714},[204,148006,147369],{"class":214},[204,148008,148009],{"class":319},"\"sales.html\"",[204,148011,221],{"class":214},[19,148013,148014],{},"多条折线适合比较不同指标或不同地区。",[14,148016,148018],{"id":148017},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148020,148021,148022,24705],{},"假设 ",[81,148023,148024],{},"sales.json",[196,148026,148028],{"className":147090,"code":148027,"language":145837,"meta":125,"style":125},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[81,148029,148030,148035,148067,148095,148123],{"__ignoreMap":125},[204,148031,148032],{"class":206,"line":207},[204,148033,148034],{"class":214},"[\n",[204,148036,148037,148040,148043,148045,148047,148049,148052,148054,148056,148058,148061,148063,148065],{"class":206,"line":126},[204,148038,148039],{"class":214},"  {",[204,148041,148042],{"class":263},"\"date\"",[204,148044,51523],{"class":214},[204,148046,147310],{"class":319},[204,148048,12522],{"class":214},[204,148050,148051],{"class":263},"\"online\"",[204,148053,51523],{"class":214},[204,148055,524],{"class":263},[204,148057,12522],{"class":214},[204,148059,148060],{"class":263},"\"offline\"",[204,148062,51523],{"class":214},[204,148064,825],{"class":263},[204,148066,5016],{"class":214},[204,148068,148069,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089,148091,148093],{"class":206,"line":131},[204,148070,148039],{"class":214},[204,148072,148042],{"class":263},[204,148074,51523],{"class":214},[204,148076,147315],{"class":319},[204,148078,12522],{"class":214},[204,148080,148051],{"class":263},[204,148082,51523],{"class":214},[204,148084,147902],{"class":263},[204,148086,12522],{"class":214},[204,148088,148060],{"class":263},[204,148090,51523],{"class":214},[204,148092,1075],{"class":263},[204,148094,5016],{"class":214},[204,148096,148097,148099,148101,148103,148105,148107,148109,148111,148113,148115,148117,148119,148121],{"class":206,"line":1281},[204,148098,148039],{"class":214},[204,148100,148042],{"class":263},[204,148102,51523],{"class":214},[204,148104,147320],{"class":319},[204,148106,12522],{"class":214},[204,148108,148051],{"class":263},[204,148110,51523],{"class":214},[204,148112,1030],{"class":263},[204,148114,12522],{"class":214},[204,148116,148060],{"class":263},[204,148118,51523],{"class":214},[204,148120,524],{"class":263},[204,148122,1651],{"class":214},[204,148124,148125],{"class":206,"line":1287},[204,148126,33332],{"class":214},[19,148128,148129],{},"读取并绘图：",[196,148131,148133],{"className":30464,"code":148132,"language":30466,"meta":125,"style":125},"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",[81,148134,148135,148141,148155,148165,148169,148201,148214,148218,148226,148235,148244,148248,148260,148269,148278,148287,148291,148299,148303,148320,148337,148341,148358,148374,148378],{"__ignoreMap":125},[204,148136,148137,148139],{"class":206,"line":207},[204,148138,30478],{"class":210},[204,148140,147136],{"class":214},[204,148142,148143,148145,148147,148149,148151,148153],{"class":206,"line":126},[204,148144,30823],{"class":210},[204,148146,147424],{"class":214},[204,148148,30478],{"class":210},[204,148150,147429],{"class":214},[204,148152,31469],{"class":210},[204,148154,147434],{"class":214},[204,148156,148157,148159,148161,148163],{"class":206,"line":131},[204,148158,30823],{"class":210},[204,148160,147283],{"class":214},[204,148162,30478],{"class":210},[204,148164,147288],{"class":214},[204,148166,148167],{"class":206,"line":1281},[204,148168,2486],{"emptyLinePlaceholder":135},[204,148170,148171,148173,148175,148177,148180,148182,148184,148186,148188,148190,148192,148194,148196,148199],{"class":206,"line":1287},[204,148172,107918],{"class":210},[204,148174,146836],{"class":263},[204,148176,215],{"class":214},[204,148178,148179],{"class":319},"\"sales.json\"",[204,148181,12522],{"class":214},[204,148183,146846],{"class":319},[204,148185,12522],{"class":214},[204,148187,146851],{"class":5303},[204,148189,260],{"class":210},[204,148191,146856],{"class":319},[204,148193,13801],{"class":214},[204,148195,31469],{"class":210},[204,148197,148198],{"class":5303}," file",[204,148200,3825],{"class":214},[204,148202,148203,148205,148207,148210,148212],{"class":206,"line":1301},[204,148204,101506],{"class":214},[204,148206,260],{"class":210},[204,148208,148209],{"class":214}," json.load(",[204,148211,45440],{"class":5303},[204,148213,221],{"class":214},[204,148215,148216],{"class":206,"line":1307},[204,148217,2486],{"emptyLinePlaceholder":135},[204,148219,148220,148222,148224],{"class":206,"line":1398},[204,148221,147845],{"class":214},[204,148223,260],{"class":210},[204,148225,51924],{"class":214},[204,148227,148228,148231,148233],{"class":206,"line":1404},[204,148229,148230],{"class":214},"online_sales ",[204,148232,260],{"class":210},[204,148234,51924],{"class":214},[204,148236,148237,148240,148242],{"class":206,"line":1416},[204,148238,148239],{"class":214},"offline_sales ",[204,148241,260],{"class":210},[204,148243,51924],{"class":214},[204,148245,148246],{"class":206,"line":1698},[204,148247,2486],{"emptyLinePlaceholder":135},[204,148249,148250,148252,148255,148257],{"class":206,"line":1703},[204,148251,3111],{"class":210},[204,148253,148254],{"class":214}," item ",[204,148256,26129],{"class":210},[204,148258,148259],{"class":214}," data:\n",[204,148261,148262,148265,148267],{"class":206,"line":1709},[204,148263,148264],{"class":214},"    dates.append(item[",[204,148266,148042],{"class":319},[204,148268,4743],{"class":214},[204,148270,148271,148274,148276],{"class":206,"line":1714},[204,148272,148273],{"class":214},"    online_sales.append(item[",[204,148275,148051],{"class":319},[204,148277,4743],{"class":214},[204,148279,148280,148283,148285],{"class":206,"line":1728},[204,148281,148282],{"class":214},"    offline_sales.append(item[",[204,148284,148060],{"class":319},[204,148286,4743],{"class":214},[204,148288,148289],{"class":206,"line":1733},[204,148290,2486],{"emptyLinePlaceholder":135},[204,148292,148293,148295,148297],{"class":206,"line":1739},[204,148294,147297],{"class":214},[204,148296,260],{"class":210},[204,148298,147302],{"class":214},[204,148300,148301],{"class":206,"line":1760},[204,148302,147886],{"class":214},[204,148304,148305,148307,148309,148312,148314,148316,148318],{"class":206,"line":1765},[204,148306,147337],{"class":214},[204,148308,147893],{"class":319},[204,148310,148311],{"class":214},", online_sales, ",[204,148313,147790],{"class":5303},[204,148315,260],{"class":210},[204,148317,31562],{"class":263},[204,148319,221],{"class":214},[204,148321,148322,148324,148326,148329,148331,148333,148335],{"class":206,"line":1779},[204,148323,147337],{"class":214},[204,148325,147931],{"class":319},[204,148327,148328],{"class":214},", offline_sales, ",[204,148330,147790],{"class":5303},[204,148332,260],{"class":210},[204,148334,31562],{"class":263},[204,148336,221],{"class":214},[204,148338,148339],{"class":206,"line":1784},[204,148340,147513],{"class":214},[204,148342,148343,148345,148347,148349,148351,148353,148356],{"class":206,"line":1813},[204,148344,147518],{"class":5303},[204,148346,260],{"class":210},[204,148348,147523],{"class":214},[204,148350,51493],{"class":5303},[204,148352,260],{"class":210},[204,148354,148355],{"class":319},"\"销售趋势\"",[204,148357,38133],{"class":214},[204,148359,148360,148362,148364,148366,148368,148370,148372],{"class":206,"line":1818},[204,148361,147574],{"class":5303},[204,148363,260],{"class":210},[204,148365,147579],{"class":214},[204,148367,147582],{"class":5303},[204,148369,260],{"class":210},[204,148371,147587],{"class":319},[204,148373,38133],{"class":214},[204,148375,148376],{"class":206,"line":1835},[204,148377,221],{"class":214},[204,148379,148380,148382,148384],{"class":206,"line":1840},[204,148381,147369],{"class":214},[204,148383,148009],{"class":319},[204,148385,221],{"class":214},[14,148387,148389],{"id":148388},"_109-数据清洗","10.9 数据清洗",[19,148391,148392],{},"真实数据经常不整齐，需要清洗。",[19,148394,148395],{},"常见问题：",[161,148397,148398,148401,148404,148407],{},[71,148399,148400],{},"数字是字符串。",[71,148402,148403],{},"字段缺失。",[71,148405,148406],{},"空值。",[71,148408,148409],{},"日期格式不统一。",[19,148411,15222],{},[196,148413,148415],{"className":30464,"code":148414,"language":30466,"meta":125,"style":125},"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",[81,148416,148417,148426,148449,148469,148490,148494,148498,148506,148515,148519,148530,148544,148553,148558,148562,148570,148580,148584,148591],{"__ignoreMap":125},[204,148418,148419,148422,148424],{"class":206,"line":207},[204,148420,148421],{"class":214},"raw_data ",[204,148423,260],{"class":210},[204,148425,55533],{"class":214},[204,148427,148428,148431,148433,148435,148437,148439,148442,148444,148447],{"class":206,"line":126},[204,148429,148430],{"class":214},"    {",[204,148432,148042],{"class":319},[204,148434,51523],{"class":214},[204,148436,147310],{"class":319},[204,148438,12522],{"class":214},[204,148440,148441],{"class":319},"\"sales\"",[204,148443,51523],{"class":214},[204,148445,148446],{"class":319},"\"100\"",[204,148448,5016],{"class":214},[204,148450,148451,148453,148455,148457,148459,148461,148463,148465,148467],{"class":206,"line":131},[204,148452,148430],{"class":214},[204,148454,148042],{"class":319},[204,148456,51523],{"class":214},[204,148458,147315],{"class":319},[204,148460,12522],{"class":214},[204,148462,148441],{"class":319},[204,148464,51523],{"class":214},[204,148466,7739],{"class":319},[204,148468,5016],{"class":214},[204,148470,148471,148473,148475,148477,148479,148481,148483,148485,148488],{"class":206,"line":1281},[204,148472,148430],{"class":214},[204,148474,148042],{"class":319},[204,148476,51523],{"class":214},[204,148478,147320],{"class":319},[204,148480,12522],{"class":214},[204,148482,148441],{"class":319},[204,148484,51523],{"class":214},[204,148486,148487],{"class":319},"\"120\"",[204,148489,5016],{"class":214},[204,148491,148492],{"class":206,"line":1287},[204,148493,33332],{"class":214},[204,148495,148496],{"class":206,"line":1301},[204,148497,2486],{"emptyLinePlaceholder":135},[204,148499,148500,148502,148504],{"class":206,"line":1307},[204,148501,147845],{"class":214},[204,148503,260],{"class":210},[204,148505,51924],{"class":214},[204,148507,148508,148511,148513],{"class":206,"line":1398},[204,148509,148510],{"class":214},"sales ",[204,148512,260],{"class":210},[204,148514,51924],{"class":214},[204,148516,148517],{"class":206,"line":1404},[204,148518,2486],{"emptyLinePlaceholder":135},[204,148520,148521,148523,148525,148527],{"class":206,"line":1416},[204,148522,3111],{"class":210},[204,148524,148254],{"class":214},[204,148526,26129],{"class":210},[204,148528,148529],{"class":214}," raw_data:\n",[204,148531,148532,148535,148537,148540,148542],{"class":206,"line":1698},[204,148533,148534],{"class":214},"    value ",[204,148536,260],{"class":210},[204,148538,148539],{"class":214}," item.get(",[204,148541,148441],{"class":319},[204,148543,221],{"class":214},[204,148545,148546,148548,148550],{"class":206,"line":1703},[204,148547,3187],{"class":210},[204,148549,39016],{"class":210},[204,148551,148552],{"class":214}," value:\n",[204,148554,148555],{"class":206,"line":1709},[204,148556,148557],{"class":210},"        continue\n",[204,148559,148560],{"class":206,"line":1714},[204,148561,2486],{"emptyLinePlaceholder":135},[204,148563,148564,148566,148568],{"class":206,"line":1728},[204,148565,148264],{"class":214},[204,148567,148042],{"class":319},[204,148569,4743],{"class":214},[204,148571,148572,148575,148577],{"class":206,"line":1733},[204,148573,148574],{"class":214},"    sales.append(",[204,148576,218],{"class":263},[204,148578,148579],{"class":214},"(value))\n",[204,148581,148582],{"class":206,"line":1739},[204,148583,2486],{"emptyLinePlaceholder":135},[204,148585,148586,148588],{"class":206,"line":1760},[204,148587,30501],{"class":263},[204,148589,148590],{"class":214},"(dates)\n",[204,148592,148593,148595],{"class":206,"line":1765},[204,148594,30501],{"class":263},[204,148596,148597],{"class":214},"(sales)\n",[14,148599,148601],{"id":148600},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[196,148603,148605],{"className":30464,"code":148604,"language":30466,"meta":125,"style":125},"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",[81,148606,148607,148621,148631,148635,148643,148664,148686,148708,148730,148752,148756,148760,148782,148803,148807,148815,148819,148823,148833,148842,148852,148868,148872,148876,148893,148909,148925,148941,148951,148955],{"__ignoreMap":125},[204,148608,148609,148611,148613,148615,148617,148619],{"class":206,"line":207},[204,148610,30823],{"class":210},[204,148612,147424],{"class":214},[204,148614,30478],{"class":210},[204,148616,147429],{"class":214},[204,148618,31469],{"class":210},[204,148620,147434],{"class":214},[204,148622,148623,148625,148627,148629],{"class":206,"line":126},[204,148624,30823],{"class":210},[204,148626,147283],{"class":214},[204,148628,30478],{"class":210},[204,148630,147288],{"class":214},[204,148632,148633],{"class":206,"line":131},[204,148634,2486],{"emptyLinePlaceholder":135},[204,148636,148637,148639,148641],{"class":206,"line":1281},[204,148638,148510],{"class":214},[204,148640,260],{"class":210},[204,148642,55533],{"class":214},[204,148644,148645,148647,148649,148651,148654,148656,148658,148660,148662],{"class":206,"line":1287},[204,148646,148430],{"class":214},[204,148648,148042],{"class":319},[204,148650,51523],{"class":214},[204,148652,148653],{"class":319},"\"2024-10-01\"",[204,148655,12522],{"class":214},[204,148657,84170],{"class":319},[204,148659,51523],{"class":214},[204,148661,92109],{"class":263},[204,148663,5016],{"class":214},[204,148665,148666,148668,148670,148672,148675,148677,148679,148681,148684],{"class":206,"line":1301},[204,148667,148430],{"class":214},[204,148669,148042],{"class":319},[204,148671,51523],{"class":214},[204,148673,148674],{"class":319},"\"2024-10-02\"",[204,148676,12522],{"class":214},[204,148678,84170],{"class":319},[204,148680,51523],{"class":214},[204,148682,148683],{"class":263},"1800",[204,148685,5016],{"class":214},[204,148687,148688,148690,148692,148694,148697,148699,148701,148703,148706],{"class":206,"line":1307},[204,148689,148430],{"class":214},[204,148691,148042],{"class":319},[204,148693,51523],{"class":214},[204,148695,148696],{"class":319},"\"2024-10-03\"",[204,148698,12522],{"class":214},[204,148700,84170],{"class":319},[204,148702,51523],{"class":214},[204,148704,148705],{"class":263},"1500",[204,148707,5016],{"class":214},[204,148709,148710,148712,148714,148716,148719,148721,148723,148725,148728],{"class":206,"line":1398},[204,148711,148430],{"class":214},[204,148713,148042],{"class":319},[204,148715,51523],{"class":214},[204,148717,148718],{"class":319},"\"2024-10-04\"",[204,148720,12522],{"class":214},[204,148722,84170],{"class":319},[204,148724,51523],{"class":214},[204,148726,148727],{"class":263},"2100",[204,148729,5016],{"class":214},[204,148731,148732,148734,148736,148738,148741,148743,148745,148747,148750],{"class":206,"line":1404},[204,148733,148430],{"class":214},[204,148735,148042],{"class":319},[204,148737,51523],{"class":214},[204,148739,148740],{"class":319},"\"2024-10-05\"",[204,148742,12522],{"class":214},[204,148744,84170],{"class":319},[204,148746,51523],{"class":214},[204,148748,148749],{"class":263},"2600",[204,148751,5016],{"class":214},[204,148753,148754],{"class":206,"line":1416},[204,148755,33332],{"class":214},[204,148757,148758],{"class":206,"line":1698},[204,148759,2486],{"emptyLinePlaceholder":135},[204,148761,148762,148764,148766,148769,148771,148773,148775,148777,148779],{"class":206,"line":1703},[204,148763,147845],{"class":214},[204,148765,260],{"class":210},[204,148767,148768],{"class":214}," [item[",[204,148770,148042],{"class":319},[204,148772,4529],{"class":214},[204,148774,3111],{"class":210},[204,148776,148254],{"class":214},[204,148778,26129],{"class":210},[204,148780,148781],{"class":214}," sales]\n",[204,148783,148784,148787,148789,148791,148793,148795,148797,148799,148801],{"class":206,"line":1709},[204,148785,148786],{"class":214},"amounts ",[204,148788,260],{"class":210},[204,148790,148768],{"class":214},[204,148792,84170],{"class":319},[204,148794,4529],{"class":214},[204,148796,3111],{"class":210},[204,148798,148254],{"class":214},[204,148800,26129],{"class":210},[204,148802,148781],{"class":214},[204,148804,148805],{"class":206,"line":1714},[204,148806,2486],{"emptyLinePlaceholder":135},[204,148808,148809,148811,148813],{"class":206,"line":1728},[204,148810,147297],{"class":214},[204,148812,260],{"class":210},[204,148814,147302],{"class":214},[204,148816,148817],{"class":206,"line":1733},[204,148818,147886],{"class":214},[204,148820,148821],{"class":206,"line":1739},[204,148822,147694],{"class":214},[204,148824,148825,148827,148829,148831],{"class":206,"line":1760},[204,148826,147699],{"class":5303},[204,148828,260],{"class":210},[204,148830,147340],{"class":319},[204,148832,31552],{"class":214},[204,148834,148835,148837,148839],{"class":206,"line":1765},[204,148836,147710],{"class":5303},[204,148838,260],{"class":210},[204,148840,148841],{"class":214},"amounts,\n",[204,148843,148844,148846,148848,148850],{"class":206,"line":1779},[204,148845,147739],{"class":5303},[204,148847,260],{"class":210},[204,148849,31562],{"class":263},[204,148851,31552],{"class":214},[204,148853,148854,148856,148858,148860,148862,148864,148866],{"class":206,"line":1784},[204,148855,147750],{"class":5303},[204,148857,260],{"class":210},[204,148859,147755],{"class":214},[204,148861,147758],{"class":5303},[204,148863,260],{"class":210},[204,148865,31562],{"class":263},[204,148867,38133],{"class":214},[204,148869,148870],{"class":206,"line":1813},[204,148871,221],{"class":214},[204,148873,148874],{"class":206,"line":1818},[204,148875,147513],{"class":214},[204,148877,148878,148880,148882,148884,148886,148888,148891],{"class":206,"line":1835},[204,148879,147518],{"class":5303},[204,148881,260],{"class":210},[204,148883,147523],{"class":214},[204,148885,51493],{"class":5303},[204,148887,260],{"class":210},[204,148889,148890],{"class":319},"\"每日销售额\"",[204,148892,38133],{"class":214},[204,148894,148895,148897,148899,148901,148903,148905,148907],{"class":206,"line":1840},[204,148896,147537],{"class":5303},[204,148898,260],{"class":210},[204,148900,147542],{"class":214},[204,148902,79896],{"class":5303},[204,148904,260],{"class":210},[204,148906,147549],{"class":319},[204,148908,38133],{"class":214},[204,148910,148911,148913,148915,148917,148919,148921,148923],{"class":206,"line":1845},[204,148912,147556],{"class":5303},[204,148914,260],{"class":210},[204,148916,147542],{"class":214},[204,148918,79896],{"class":5303},[204,148920,260],{"class":210},[204,148922,147567],{"class":319},[204,148924,38133],{"class":214},[204,148926,148927,148929,148931,148933,148935,148937,148939],{"class":206,"line":1850},[204,148928,147574],{"class":5303},[204,148930,260],{"class":210},[204,148932,147579],{"class":214},[204,148934,147582],{"class":5303},[204,148936,260],{"class":210},[204,148938,147587],{"class":319},[204,148940,38133],{"class":214},[204,148942,148943,148946,148948],{"class":206,"line":1864},[204,148944,148945],{"class":5303},"    datazoom_opts",[204,148947,260],{"class":210},[204,148949,148950],{"class":214},"[opts.DataZoomOpts()],\n",[204,148952,148953],{"class":206,"line":1869},[204,148954,221],{"class":214},[204,148956,148957,148959,148962],{"class":206,"line":2663},[204,148958,147369],{"class":214},[204,148960,148961],{"class":319},"\"daily_sales.html\"",[204,148963,221],{"class":214},[19,148965,148966,148969],{},[81,148967,148968],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,148971,148973],{"id":148972},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,148975,148976],{},"如果数据结构如下：",[196,148978,148980],{"className":30464,"code":148979,"language":30466,"meta":125,"style":125},"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",[81,148981,148982,148990,148998,149020,149041,149046,149053,149073,149093,149097],{"__ignoreMap":125},[204,148983,148984,148986,148988],{"class":206,"line":207},[204,148985,101743],{"class":214},[204,148987,260],{"class":210},[204,148989,15659],{"class":214},[204,148991,148992,148995],{"class":206,"line":126},[204,148993,148994],{"class":319},"    \"北京\"",[204,148996,148997],{"class":214},": [\n",[204,148999,149000,149002,149004,149006,149009,149011,149014,149016,149018],{"class":206,"line":131},[204,149001,5003],{"class":214},[204,149003,148042],{"class":319},[204,149005,51523],{"class":214},[204,149007,149008],{"class":319},"\"2024-01-01\"",[204,149010,12522],{"class":214},[204,149012,149013],{"class":319},"\"confirm\"",[204,149015,51523],{"class":214},[204,149017,659],{"class":263},[204,149019,5016],{"class":214},[204,149021,149022,149024,149026,149028,149031,149033,149035,149037,149039],{"class":206,"line":1281},[204,149023,5003],{"class":214},[204,149025,148042],{"class":319},[204,149027,51523],{"class":214},[204,149029,149030],{"class":319},"\"2024-01-02\"",[204,149032,12522],{"class":214},[204,149034,149013],{"class":319},[204,149036,51523],{"class":214},[204,149038,711],{"class":263},[204,149040,5016],{"class":214},[204,149042,149043],{"class":206,"line":1287},[204,149044,149045],{"class":214},"    ],\n",[204,149047,149048,149051],{"class":206,"line":1301},[204,149049,149050],{"class":319},"    \"上海\"",[204,149052,148997],{"class":214},[204,149054,149055,149057,149059,149061,149063,149065,149067,149069,149071],{"class":206,"line":1307},[204,149056,5003],{"class":214},[204,149058,148042],{"class":319},[204,149060,51523],{"class":214},[204,149062,149008],{"class":319},[204,149064,12522],{"class":214},[204,149066,149013],{"class":319},[204,149068,51523],{"class":214},[204,149070,608],{"class":263},[204,149072,5016],{"class":214},[204,149074,149075,149077,149079,149081,149083,149085,149087,149089,149091],{"class":206,"line":1398},[204,149076,5003],{"class":214},[204,149078,148042],{"class":319},[204,149080,51523],{"class":214},[204,149082,149030],{"class":319},[204,149084,12522],{"class":214},[204,149086,149013],{"class":319},[204,149088,51523],{"class":214},[204,149090,736],{"class":263},[204,149092,5016],{"class":214},[204,149094,149095],{"class":206,"line":1404},[204,149096,149045],{"class":214},[204,149098,149099],{"class":206,"line":1416},[204,149100,1651],{"class":214},[19,149102,149103],{},"绘制多地区趋势：",[196,149105,149107],{"className":30464,"code":149106,"language":30466,"meta":125,"style":125},"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",[81,149108,149109,149123,149133,149137,149162,149166,149174,149178,149182,149194,149216,149229,149233,149237,149254,149270,149274],{"__ignoreMap":125},[204,149110,149111,149113,149115,149117,149119,149121],{"class":206,"line":207},[204,149112,30823],{"class":210},[204,149114,147424],{"class":214},[204,149116,30478],{"class":210},[204,149118,147429],{"class":214},[204,149120,31469],{"class":210},[204,149122,147434],{"class":214},[204,149124,149125,149127,149129,149131],{"class":206,"line":126},[204,149126,30823],{"class":210},[204,149128,147283],{"class":214},[204,149130,30478],{"class":210},[204,149132,147288],{"class":214},[204,149134,149135],{"class":206,"line":131},[204,149136,2486],{"emptyLinePlaceholder":135},[204,149138,149139,149141,149143,149145,149147,149149,149151,149153,149155,149158,149160],{"class":206,"line":1281},[204,149140,147845],{"class":214},[204,149142,260],{"class":210},[204,149144,148768],{"class":214},[204,149146,148042],{"class":319},[204,149148,4529],{"class":214},[204,149150,3111],{"class":210},[204,149152,148254],{"class":214},[204,149154,26129],{"class":210},[204,149156,149157],{"class":214}," data[",[204,149159,69355],{"class":319},[204,149161,77613],{"class":214},[204,149163,149164],{"class":206,"line":1287},[204,149165,2486],{"emptyLinePlaceholder":135},[204,149167,149168,149170,149172],{"class":206,"line":1301},[204,149169,147297],{"class":214},[204,149171,260],{"class":210},[204,149173,147302],{"class":214},[204,149175,149176],{"class":206,"line":1307},[204,149177,147886],{"class":214},[204,149179,149180],{"class":206,"line":1398},[204,149181,2486],{"emptyLinePlaceholder":135},[204,149183,149184,149186,149189,149191],{"class":206,"line":1404},[204,149185,3111],{"class":210},[204,149187,149188],{"class":214}," city, records ",[204,149190,26129],{"class":210},[204,149192,149193],{"class":214}," data.items():\n",[204,149195,149196,149199,149201,149203,149205,149207,149209,149211,149213],{"class":206,"line":1416},[204,149197,149198],{"class":214},"    values ",[204,149200,260],{"class":210},[204,149202,148768],{"class":214},[204,149204,149013],{"class":319},[204,149206,4529],{"class":214},[204,149208,3111],{"class":210},[204,149210,148254],{"class":214},[204,149212,26129],{"class":210},[204,149214,149215],{"class":214}," records]\n",[204,149217,149218,149221,149223,149225,149227],{"class":206,"line":1698},[204,149219,149220],{"class":214},"    line.add_yaxis(city, values, ",[204,149222,147790],{"class":5303},[204,149224,260],{"class":210},[204,149226,31562],{"class":263},[204,149228,221],{"class":214},[204,149230,149231],{"class":206,"line":1703},[204,149232,2486],{"emptyLinePlaceholder":135},[204,149234,149235],{"class":206,"line":1709},[204,149236,147513],{"class":214},[204,149238,149239,149241,149243,149245,149247,149249,149252],{"class":206,"line":1714},[204,149240,147518],{"class":5303},[204,149242,260],{"class":210},[204,149244,147523],{"class":214},[204,149246,51493],{"class":5303},[204,149248,260],{"class":210},[204,149250,149251],{"class":319},"\"多地区趋势图\"",[204,149253,38133],{"class":214},[204,149255,149256,149258,149260,149262,149264,149266,149268],{"class":206,"line":1728},[204,149257,147574],{"class":5303},[204,149259,260],{"class":210},[204,149261,147579],{"class":214},[204,149263,147582],{"class":5303},[204,149265,260],{"class":210},[204,149267,147587],{"class":319},[204,149269,38133],{"class":214},[204,149271,149272],{"class":206,"line":1733},[204,149273,221],{"class":214},[204,149275,149276,149278,149281],{"class":206,"line":1739},[204,149277,147369],{"class":214},[204,149279,149280],{"class":319},"\"trend.html\"",[204,149282,221],{"class":214},[19,149284,149285],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149287,149289],{"id":149288},"_1012-易错点","10.12 易错点",[161,149291,149292,149298,149304,149314,149320],{},[71,149293,149294,149297],{},[81,149295,149296],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[71,149299,149300,149303],{},[81,149301,149302],{},"render()"," 生成的是 HTML，不是图片。",[71,149305,149306,149307,149310,149311,28471],{},"JSON 字符串用 ",[81,149308,149309],{},"json.loads()","，JSON 文件用 ",[81,149312,149313],{},"json.load()",[71,149315,149316,149317,28471],{},"中文 JSON 保存时加 ",[81,149318,149319],{},"ensure_ascii=False",[71,149321,149322],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149324,149326],{"id":149325},"_1013-本章练习","10.13 本章练习",[161,149328,149329,149332,149335,149338,149341],{},[71,149330,149331],{},"安装 pyecharts 并生成第一个折线图。",[71,149333,149334],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[71,149336,149337],{},"绘制两条折线，对比线上和线下销售额。",[71,149339,149340],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[71,149342,149343],{},"对含有空值的销售数据进行清洗后再绘图。",[5213,149345,149346],{},"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":125,"searchDepth":126,"depth":126,"links":149348},[149349,149350,149351,149352,149353,149354,149355,149356,149357,149358,149359,149360,149361],{"id":146965,"depth":126,"text":146966},{"id":147040,"depth":126,"text":147041},{"id":147219,"depth":126,"text":147220},{"id":147270,"depth":126,"text":147271},{"id":147404,"depth":126,"text":147405},{"id":147680,"depth":126,"text":147681},{"id":147806,"depth":126,"text":147807},{"id":148017,"depth":126,"text":148018},{"id":148388,"depth":126,"text":148389},{"id":148600,"depth":126,"text":148601},{"id":148972,"depth":126,"text":148973},{"id":149288,"depth":126,"text":149289},{"id":149325,"depth":126,"text":149326},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146957,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149368,"title":149369,"body":149370,"description":132,"extension":133,"meta":151730,"navigation":135,"path":151731,"seo":151732,"stem":151733,"__hash__":151734},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149371,"toc":151707},[149372,149375,149379,149382,149385,149461,149464,149555,149558,149562,149565,149609,149622,149626,149629,149696,149699,149703,149706,149790,149798,149802,149807,149948,149951,149962,149968,149974,150088,150092,150095,150098,150351,150354,150358,150361,150465,150468,150472,150623,150627,150634,150747,150751,150754,150860,150863,150867,150870,150901,150904,151009,151012,151016,151020,151030,151098,151102,151109,151173,151176,151180,151186,151282,151291,151295,151619,151628,151632,151660,151664,151704],[10,149373,149369],{"id":149374},"_11-面向对象基础",[14,149376,149378],{"id":149377},"_111-什么是面向对象","11.1 什么是面向对象",[19,149380,149381],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149383,149384],{},"面向过程：",[196,149386,149388],{"className":30464,"code":149387,"language":30466,"meta":125,"style":125},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[81,149389,149390,149399,149407,149411,149421,149452,149456],{"__ignoreMap":125},[204,149391,149392,149394,149396],{"class":206,"line":207},[204,149393,146581],{"class":214},[204,149395,260],{"class":210},[204,149397,149398],{"class":319}," \"小明\"\n",[204,149400,149401,149403,149405],{"class":206,"line":126},[204,149402,146591],{"class":214},[204,149404,260],{"class":210},[204,149406,146596],{"class":263},[204,149408,149409],{"class":206,"line":131},[204,149410,2486],{"emptyLinePlaceholder":135},[204,149412,149413,149415,149418],{"class":206,"line":1281},[204,149414,32033],{"class":210},[204,149416,149417],{"class":2049}," introduce",[204,149419,149420],{"class":214},"(name, age):\n",[204,149422,149423,149425,149427,149429,149432,149434,149436,149438,149441,149443,149445,149447,149450],{"class":206,"line":1287},[204,149424,31385],{"class":263},[204,149426,215],{"class":214},[204,149428,267],{"class":210},[204,149430,149431],{"class":319},"\"我叫",[204,149433,1109],{"class":263},[204,149435,79896],{"class":214},[204,149437,1159],{"class":263},[204,149439,149440],{"class":319},"，今年",[204,149442,1109],{"class":263},[204,149444,70307],{"class":214},[204,149446,1159],{"class":263},[204,149448,149449],{"class":319},"岁\"",[204,149451,221],{"class":214},[204,149453,149454],{"class":206,"line":1301},[204,149455,2486],{"emptyLinePlaceholder":135},[204,149457,149458],{"class":206,"line":1307},[204,149459,149460],{"class":214},"introduce(name, age)\n",[19,149462,149463],{},"面向对象：",[196,149465,149467],{"className":30464,"code":149466,"language":30466,"meta":125,"style":125},"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",[81,149468,149469,149477,149485,149514,149518,149522,149532,149541,149550],{"__ignoreMap":125},[204,149470,149471,149473,149475],{"class":206,"line":207},[204,149472,14781],{"class":210},[204,149474,7985],{"class":2049},[204,149476,3825],{"class":214},[204,149478,149479,149481,149483],{"class":206,"line":126},[204,149480,30887],{"class":210},[204,149482,149417],{"class":2049},[204,149484,30893],{"class":214},[204,149486,149487,149489,149491,149493,149495,149498,149500,149502,149504,149506,149508,149510,149512],{"class":206,"line":131},[204,149488,32537],{"class":263},[204,149490,215],{"class":214},[204,149492,267],{"class":210},[204,149494,149431],{"class":319},[204,149496,149497],{"class":263},"{self",[204,149499,80387],{"class":214},[204,149501,1159],{"class":263},[204,149503,149440],{"class":319},[204,149505,149497],{"class":263},[204,149507,80399],{"class":214},[204,149509,1159],{"class":263},[204,149511,149449],{"class":319},[204,149513,221],{"class":214},[204,149515,149516],{"class":206,"line":1281},[204,149517,2486],{"emptyLinePlaceholder":135},[204,149519,149520],{"class":206,"line":1287},[204,149521,2486],{"emptyLinePlaceholder":135},[204,149523,149524,149527,149529],{"class":206,"line":1301},[204,149525,149526],{"class":214},"student ",[204,149528,260],{"class":210},[204,149530,149531],{"class":214}," Student()\n",[204,149533,149534,149537,149539],{"class":206,"line":1307},[204,149535,149536],{"class":214},"student.name ",[204,149538,260],{"class":210},[204,149540,149398],{"class":319},[204,149542,149543,149546,149548],{"class":206,"line":1398},[204,149544,149545],{"class":214},"student.age ",[204,149547,260],{"class":210},[204,149549,146596],{"class":263},[204,149551,149552],{"class":206,"line":1404},[204,149553,149554],{"class":214},"student.introduce()\n",[19,149556,149557],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149559,149561],{"id":149560},"_112-类和对象","11.2 类和对象",[19,149563,149564],{},"类是模板，对象是根据模板创建出来的具体实例。",[196,149566,149568],{"className":30464,"code":149567,"language":30466,"meta":125,"style":125},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[81,149569,149570,149578,149583,149587,149591,149600],{"__ignoreMap":125},[204,149571,149572,149574,149576],{"class":206,"line":207},[204,149573,14781],{"class":210},[204,149575,7985],{"class":2049},[204,149577,3825],{"class":214},[204,149579,149580],{"class":206,"line":126},[204,149581,149582],{"class":210},"    pass\n",[204,149584,149585],{"class":206,"line":131},[204,149586,2486],{"emptyLinePlaceholder":135},[204,149588,149589],{"class":206,"line":1281},[204,149590,2486],{"emptyLinePlaceholder":135},[204,149592,149593,149596,149598],{"class":206,"line":1287},[204,149594,149595],{"class":214},"student1 ",[204,149597,260],{"class":210},[204,149599,149531],{"class":214},[204,149601,149602,149605,149607],{"class":206,"line":1301},[204,149603,149604],{"class":214},"student2 ",[204,149606,260],{"class":210},[204,149608,149531],{"class":214},[19,149610,149611,149614,149615,43,149618,149621],{},[81,149612,149613],{},"Student"," 是类，",[81,149616,149617],{},"student1",[81,149619,149620],{},"student2"," 是对象。",[14,149623,149625],{"id":149624},"_113-属性","11.3 属性",[19,149627,149628],{},"属性是对象保存的数据。",[196,149630,149632],{"className":30464,"code":149631,"language":30466,"meta":125,"style":125},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[81,149633,149634,149642,149646,149650,149654,149662,149670,149678,149682,149689],{"__ignoreMap":125},[204,149635,149636,149638,149640],{"class":206,"line":207},[204,149637,14781],{"class":210},[204,149639,7985],{"class":2049},[204,149641,3825],{"class":214},[204,149643,149644],{"class":206,"line":126},[204,149645,149582],{"class":210},[204,149647,149648],{"class":206,"line":131},[204,149649,2486],{"emptyLinePlaceholder":135},[204,149651,149652],{"class":206,"line":1281},[204,149653,2486],{"emptyLinePlaceholder":135},[204,149655,149656,149658,149660],{"class":206,"line":1287},[204,149657,149526],{"class":214},[204,149659,260],{"class":210},[204,149661,149531],{"class":214},[204,149663,149664,149666,149668],{"class":206,"line":1301},[204,149665,149536],{"class":214},[204,149667,260],{"class":210},[204,149669,149398],{"class":319},[204,149671,149672,149674,149676],{"class":206,"line":1307},[204,149673,149545],{"class":214},[204,149675,260],{"class":210},[204,149677,146596],{"class":263},[204,149679,149680],{"class":206,"line":1398},[204,149681,2486],{"emptyLinePlaceholder":135},[204,149683,149684,149686],{"class":206,"line":1404},[204,149685,30501],{"class":263},[204,149687,149688],{"class":214},"(student.name)\n",[204,149690,149691,149693],{"class":206,"line":1416},[204,149692,30501],{"class":263},[204,149694,149695],{"class":214},"(student.age)\n",[19,149697,149698],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149700,149702],{"id":149701},"_114-方法","11.4 方法",[19,149704,149705],{},"类中的函数叫方法。",[196,149707,149708],{"className":30464,"code":149466,"language":30466,"meta":125,"style":125},[81,149709,149710,149718,149726,149754,149758,149762,149770,149778,149786],{"__ignoreMap":125},[204,149711,149712,149714,149716],{"class":206,"line":207},[204,149713,14781],{"class":210},[204,149715,7985],{"class":2049},[204,149717,3825],{"class":214},[204,149719,149720,149722,149724],{"class":206,"line":126},[204,149721,30887],{"class":210},[204,149723,149417],{"class":2049},[204,149725,30893],{"class":214},[204,149727,149728,149730,149732,149734,149736,149738,149740,149742,149744,149746,149748,149750,149752],{"class":206,"line":131},[204,149729,32537],{"class":263},[204,149731,215],{"class":214},[204,149733,267],{"class":210},[204,149735,149431],{"class":319},[204,149737,149497],{"class":263},[204,149739,80387],{"class":214},[204,149741,1159],{"class":263},[204,149743,149440],{"class":319},[204,149745,149497],{"class":263},[204,149747,80399],{"class":214},[204,149749,1159],{"class":263},[204,149751,149449],{"class":319},[204,149753,221],{"class":214},[204,149755,149756],{"class":206,"line":1281},[204,149757,2486],{"emptyLinePlaceholder":135},[204,149759,149760],{"class":206,"line":1287},[204,149761,2486],{"emptyLinePlaceholder":135},[204,149763,149764,149766,149768],{"class":206,"line":1301},[204,149765,149526],{"class":214},[204,149767,260],{"class":210},[204,149769,149531],{"class":214},[204,149771,149772,149774,149776],{"class":206,"line":1307},[204,149773,149536],{"class":214},[204,149775,260],{"class":210},[204,149777,149398],{"class":319},[204,149779,149780,149782,149784],{"class":206,"line":1398},[204,149781,149545],{"class":214},[204,149783,260],{"class":210},[204,149785,146596],{"class":263},[204,149787,149788],{"class":206,"line":1404},[204,149789,149554],{"class":214},[19,149791,149792,149794,149795,149797],{},[81,149793,30909],{}," 表示当前对象。调用方法时不需要手动传入 ",[81,149796,30909],{},"，Python 会自动传。",[14,149799,149801],{"id":149800},"_115-构造方法__init__","11.5 构造方法__init__",[19,149803,149804,149806],{},[81,149805,30915],{}," 在对象创建时自动执行，用于初始化属性。",[196,149808,149810],{"className":30464,"code":149809,"language":30466,"meta":125,"style":125},"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",[81,149811,149812,149820,149829,149841,149853,149864,149868,149876,149914,149918,149922,149944],{"__ignoreMap":125},[204,149813,149814,149816,149818],{"class":206,"line":207},[204,149815,14781],{"class":210},[204,149817,7985],{"class":2049},[204,149819,3825],{"class":214},[204,149821,149822,149824,149826],{"class":206,"line":126},[204,149823,30887],{"class":210},[204,149825,30890],{"class":263},[204,149827,149828],{"class":214},"(self, name, age, score):\n",[204,149830,149831,149833,149836,149838],{"class":206,"line":131},[204,149832,30931],{"class":263},[204,149834,149835],{"class":214},".name ",[204,149837,260],{"class":210},[204,149839,149840],{"class":214}," name\n",[204,149842,149843,149845,149848,149850],{"class":206,"line":1281},[204,149844,30931],{"class":263},[204,149846,149847],{"class":214},".age ",[204,149849,260],{"class":210},[204,149851,149852],{"class":214}," age\n",[204,149854,149855,149857,149860,149862],{"class":206,"line":1287},[204,149856,30931],{"class":263},[204,149858,149859],{"class":214},".score ",[204,149861,260],{"class":210},[204,149863,1665],{"class":214},[204,149865,149866],{"class":206,"line":1301},[204,149867,2486],{"emptyLinePlaceholder":135},[204,149869,149870,149872,149874],{"class":206,"line":1307},[204,149871,30887],{"class":210},[204,149873,149417],{"class":2049},[204,149875,30893],{"class":214},[204,149877,149878,149880,149882,149884,149886,149888,149890,149892,149894,149896,149898,149900,149903,149905,149908,149910,149912],{"class":206,"line":1398},[204,149879,32537],{"class":263},[204,149881,215],{"class":214},[204,149883,267],{"class":210},[204,149885,149431],{"class":319},[204,149887,149497],{"class":263},[204,149889,80387],{"class":214},[204,149891,1159],{"class":263},[204,149893,149440],{"class":319},[204,149895,149497],{"class":263},[204,149897,80399],{"class":214},[204,149899,1159],{"class":263},[204,149901,149902],{"class":319},"岁，成绩",[204,149904,149497],{"class":263},[204,149906,149907],{"class":214},".score",[204,149909,1159],{"class":263},[204,149911,464],{"class":319},[204,149913,221],{"class":214},[204,149915,149916],{"class":206,"line":1404},[204,149917,2486],{"emptyLinePlaceholder":135},[204,149919,149920],{"class":206,"line":1416},[204,149921,2486],{"emptyLinePlaceholder":135},[204,149923,149924,149926,149928,149931,149934,149936,149938,149940,149942],{"class":206,"line":1698},[204,149925,149526],{"class":214},[204,149927,260],{"class":210},[204,149929,149930],{"class":214}," Student(",[204,149932,149933],{"class":319},"\"小明\"",[204,149935,12522],{"class":214},[204,149937,863],{"class":263},[204,149939,12522],{"class":214},[204,149941,1202],{"class":263},[204,149943,221],{"class":214},[204,149945,149946],{"class":206,"line":1703},[204,149947,149554],{"class":214},[19,149949,149950],{},"构造方法的好处：",[161,149952,149953,149956,149959],{},[71,149954,149955],{},"创建对象时必须提供必要数据。",[71,149957,149958],{},"属性初始化集中，不容易漏。",[71,149960,149961],{},"对象状态更完整。",[14,149963,149965,149966],{"id":149964},"_116-str","11.6 ",[30,149967,1386],{},[19,149969,149970,149971,28471],{},"直接打印对象时，默认输出不直观。可以定义 ",[81,149972,149973],{},"__str__",[196,149975,149977],{"className":30464,"code":149976,"language":30466,"meta":125,"style":125},"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",[81,149978,149979,149987,149996,150006,150016,150020,150029,150057,150061,150065,150081],{"__ignoreMap":125},[204,149980,149981,149983,149985],{"class":206,"line":207},[204,149982,14781],{"class":210},[204,149984,7985],{"class":2049},[204,149986,3825],{"class":214},[204,149988,149989,149991,149993],{"class":206,"line":126},[204,149990,30887],{"class":210},[204,149992,30890],{"class":263},[204,149994,149995],{"class":214},"(self, name, age):\n",[204,149997,149998,150000,150002,150004],{"class":206,"line":131},[204,149999,30931],{"class":263},[204,150001,149835],{"class":214},[204,150003,260],{"class":210},[204,150005,149840],{"class":214},[204,150007,150008,150010,150012,150014],{"class":206,"line":1281},[204,150009,30931],{"class":263},[204,150011,149847],{"class":214},[204,150013,260],{"class":210},[204,150015,149852],{"class":214},[204,150017,150018],{"class":206,"line":1287},[204,150019,2486],{"emptyLinePlaceholder":135},[204,150021,150022,150024,150027],{"class":206,"line":1301},[204,150023,30887],{"class":210},[204,150025,150026],{"class":263}," __str__",[204,150028,30893],{"class":214},[204,150030,150031,150033,150036,150039,150041,150043,150045,150048,150050,150052,150054],{"class":206,"line":1307},[204,150032,14839],{"class":210},[204,150034,150035],{"class":210}," f",[204,150037,150038],{"class":319},"\"Student(name=",[204,150040,149497],{"class":263},[204,150042,80387],{"class":214},[204,150044,1159],{"class":263},[204,150046,150047],{"class":319},", age=",[204,150049,149497],{"class":263},[204,150051,80399],{"class":214},[204,150053,1159],{"class":263},[204,150055,150056],{"class":319},")\"\n",[204,150058,150059],{"class":206,"line":1398},[204,150060,2486],{"emptyLinePlaceholder":135},[204,150062,150063],{"class":206,"line":1404},[204,150064,2486],{"emptyLinePlaceholder":135},[204,150066,150067,150069,150071,150073,150075,150077,150079],{"class":206,"line":1416},[204,150068,149526],{"class":214},[204,150070,260],{"class":210},[204,150072,149930],{"class":214},[204,150074,149933],{"class":319},[204,150076,12522],{"class":214},[204,150078,863],{"class":263},[204,150080,221],{"class":214},[204,150082,150083,150085],{"class":206,"line":1698},[204,150084,30501],{"class":263},[204,150086,150087],{"class":214},"(student)\n",[14,150089,150091],{"id":150090},"_117-封装","11.7 封装",[19,150093,150094],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150096,150097],{},"Python 中以双下划线开头的属性通常视为私有属性。",[196,150099,150101],{"className":30464,"code":150100,"language":30466,"meta":125,"style":125},"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",[81,150102,150103,150112,150121,150133,150145,150149,150158,150167,150171,150181,150194,150205,150210,150221,150225,150234,150246,150257,150261,150274,150285,150289,150300,150304,150308,150326,150335,150344],{"__ignoreMap":125},[204,150104,150105,150107,150110],{"class":206,"line":207},[204,150106,14781],{"class":210},[204,150108,150109],{"class":2049}," Account",[204,150111,3825],{"class":214},[204,150113,150114,150116,150118],{"class":206,"line":126},[204,150115,30887],{"class":210},[204,150117,30890],{"class":263},[204,150119,150120],{"class":214},"(self, owner, balance):\n",[204,150122,150123,150125,150128,150130],{"class":206,"line":131},[204,150124,30931],{"class":263},[204,150126,150127],{"class":214},".owner ",[204,150129,260],{"class":210},[204,150131,150132],{"class":214}," owner\n",[204,150134,150135,150137,150140,150142],{"class":206,"line":1281},[204,150136,30931],{"class":263},[204,150138,150139],{"class":214},".__balance ",[204,150141,260],{"class":210},[204,150143,150144],{"class":214}," balance\n",[204,150146,150147],{"class":206,"line":1287},[204,150148,2486],{"emptyLinePlaceholder":135},[204,150150,150151,150153,150156],{"class":206,"line":1301},[204,150152,30887],{"class":210},[204,150154,150155],{"class":2049}," get_balance",[204,150157,30893],{"class":214},[204,150159,150160,150162,150164],{"class":206,"line":1307},[204,150161,14839],{"class":210},[204,150163,38959],{"class":263},[204,150165,150166],{"class":214},".__balance\n",[204,150168,150169],{"class":206,"line":1398},[204,150170,2486],{"emptyLinePlaceholder":135},[204,150172,150173,150175,150178],{"class":206,"line":1404},[204,150174,30887],{"class":210},[204,150176,150177],{"class":2049}," deposit",[204,150179,150180],{"class":214},"(self, money):\n",[204,150182,150183,150185,150188,150190,150192],{"class":206,"line":1416},[204,150184,2583],{"class":210},[204,150186,150187],{"class":214}," money ",[204,150189,1674],{"class":210},[204,150191,4179],{"class":263},[204,150193,3825],{"class":214},[204,150195,150196,150198,150200,150203],{"class":206,"line":1698},[204,150197,34736],{"class":263},[204,150199,215],{"class":214},[204,150201,150202],{"class":319},"\"存款金额必须大于0\"",[204,150204,221],{"class":214},[204,150206,150207],{"class":206,"line":1703},[204,150208,150209],{"class":210},"            return\n",[204,150211,150212,150214,150216,150218],{"class":206,"line":1709},[204,150213,30931],{"class":263},[204,150215,150139],{"class":214},[204,150217,9564],{"class":210},[204,150219,150220],{"class":214}," money\n",[204,150222,150223],{"class":206,"line":1714},[204,150224,2486],{"emptyLinePlaceholder":135},[204,150226,150227,150229,150232],{"class":206,"line":1728},[204,150228,30887],{"class":210},[204,150230,150231],{"class":2049}," withdraw",[204,150233,150180],{"class":214},[204,150235,150236,150238,150240,150242,150244],{"class":206,"line":1733},[204,150237,2583],{"class":210},[204,150239,150187],{"class":214},[204,150241,1674],{"class":210},[204,150243,4179],{"class":263},[204,150245,3825],{"class":214},[204,150247,150248,150250,150252,150255],{"class":206,"line":1739},[204,150249,34736],{"class":263},[204,150251,215],{"class":214},[204,150253,150254],{"class":319},"\"取款金额必须大于0\"",[204,150256,221],{"class":214},[204,150258,150259],{"class":206,"line":1760},[204,150260,150209],{"class":210},[204,150262,150263,150265,150267,150269,150271],{"class":206,"line":1765},[204,150264,2583],{"class":210},[204,150266,150187],{"class":214},[204,150268,1173],{"class":210},[204,150270,38959],{"class":263},[204,150272,150273],{"class":214},".__balance:\n",[204,150275,150276,150278,150280,150283],{"class":206,"line":1779},[204,150277,34736],{"class":263},[204,150279,215],{"class":214},[204,150281,150282],{"class":319},"\"余额不足\"",[204,150284,221],{"class":214},[204,150286,150287],{"class":206,"line":1784},[204,150288,150209],{"class":210},[204,150290,150291,150293,150295,150298],{"class":206,"line":1813},[204,150292,30931],{"class":263},[204,150294,150139],{"class":214},[204,150296,150297],{"class":210},"-=",[204,150299,150220],{"class":214},[204,150301,150302],{"class":206,"line":1818},[204,150303,2486],{"emptyLinePlaceholder":135},[204,150305,150306],{"class":206,"line":1835},[204,150307,2486],{"emptyLinePlaceholder":135},[204,150309,150310,150313,150315,150318,150320,150322,150324],{"class":206,"line":1840},[204,150311,150312],{"class":214},"account ",[204,150314,260],{"class":210},[204,150316,150317],{"class":214}," Account(",[204,150319,149933],{"class":319},[204,150321,12522],{"class":214},[204,150323,6497],{"class":263},[204,150325,221],{"class":214},[204,150327,150328,150331,150333],{"class":206,"line":1845},[204,150329,150330],{"class":214},"account.deposit(",[204,150332,1808],{"class":263},[204,150334,221],{"class":214},[204,150336,150337,150340,150342],{"class":206,"line":1850},[204,150338,150339],{"class":214},"account.withdraw(",[204,150341,524],{"class":263},[204,150343,221],{"class":214},[204,150345,150346,150348],{"class":206,"line":1864},[204,150347,30501],{"class":263},[204,150349,150350],{"class":214},"(account.get_balance())\n",[19,150352,150353],{},"封装的意义是避免外部随意修改内部状态。",[14,150355,150357],{"id":150356},"_118-继承","11.8 继承",[19,150359,150360],{},"继承可以让子类复用父类的属性和方法。",[196,150362,150364],{"className":30464,"code":150363,"language":30466,"meta":125,"style":125},"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",[81,150365,150366,150375,150384,150395,150399,150403,150417,150426,150437,150441,150445,150455,150460],{"__ignoreMap":125},[204,150367,150368,150370,150373],{"class":206,"line":207},[204,150369,14781],{"class":210},[204,150371,150372],{"class":2049}," Animal",[204,150374,3825],{"class":214},[204,150376,150377,150379,150382],{"class":206,"line":126},[204,150378,30887],{"class":210},[204,150380,150381],{"class":2049}," eat",[204,150383,30893],{"class":214},[204,150385,150386,150388,150390,150393],{"class":206,"line":131},[204,150387,32537],{"class":263},[204,150389,215],{"class":214},[204,150391,150392],{"class":319},"\"吃东西\"",[204,150394,221],{"class":214},[204,150396,150397],{"class":206,"line":1281},[204,150398,2486],{"emptyLinePlaceholder":135},[204,150400,150401],{"class":206,"line":1287},[204,150402,2486],{"emptyLinePlaceholder":135},[204,150404,150405,150407,150410,150412,150415],{"class":206,"line":1301},[204,150406,14781],{"class":210},[204,150408,150409],{"class":2049}," Dog",[204,150411,215],{"class":214},[204,150413,150414],{"class":2049},"Animal",[204,150416,30872],{"class":214},[204,150418,150419,150421,150424],{"class":206,"line":1307},[204,150420,30887],{"class":210},[204,150422,150423],{"class":2049}," bark",[204,150425,30893],{"class":214},[204,150427,150428,150430,150432,150435],{"class":206,"line":1398},[204,150429,32537],{"class":263},[204,150431,215],{"class":214},[204,150433,150434],{"class":319},"\"汪汪\"",[204,150436,221],{"class":214},[204,150438,150439],{"class":206,"line":1404},[204,150440,2486],{"emptyLinePlaceholder":135},[204,150442,150443],{"class":206,"line":1416},[204,150444,2486],{"emptyLinePlaceholder":135},[204,150446,150447,150450,150452],{"class":206,"line":1698},[204,150448,150449],{"class":214},"dog ",[204,150451,260],{"class":210},[204,150453,150454],{"class":214}," Dog()\n",[204,150456,150457],{"class":206,"line":1703},[204,150458,150459],{"class":214},"dog.eat()\n",[204,150461,150462],{"class":206,"line":1709},[204,150463,150464],{"class":214},"dog.bark()\n",[19,150466,150467],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150469,150471],{"id":150470},"_119-方法重写","11.9 方法重写",[196,150473,150475],{"className":30464,"code":150474,"language":30466,"meta":125,"style":125},"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",[81,150476,150477,150485,150494,150505,150509,150513,150525,150533,150543,150547,150551,150564,150572,150583,150587,150591,150599,150609,150613,150618],{"__ignoreMap":125},[204,150478,150479,150481,150483],{"class":206,"line":207},[204,150480,14781],{"class":210},[204,150482,150372],{"class":2049},[204,150484,3825],{"class":214},[204,150486,150487,150489,150492],{"class":206,"line":126},[204,150488,30887],{"class":210},[204,150490,150491],{"class":2049}," speak",[204,150493,30893],{"class":214},[204,150495,150496,150498,150500,150503],{"class":206,"line":131},[204,150497,32537],{"class":263},[204,150499,215],{"class":214},[204,150501,150502],{"class":319},"\"动物叫\"",[204,150504,221],{"class":214},[204,150506,150507],{"class":206,"line":1281},[204,150508,2486],{"emptyLinePlaceholder":135},[204,150510,150511],{"class":206,"line":1287},[204,150512,2486],{"emptyLinePlaceholder":135},[204,150514,150515,150517,150519,150521,150523],{"class":206,"line":1301},[204,150516,14781],{"class":210},[204,150518,150409],{"class":2049},[204,150520,215],{"class":214},[204,150522,150414],{"class":2049},[204,150524,30872],{"class":214},[204,150526,150527,150529,150531],{"class":206,"line":1307},[204,150528,30887],{"class":210},[204,150530,150491],{"class":2049},[204,150532,30893],{"class":214},[204,150534,150535,150537,150539,150541],{"class":206,"line":1398},[204,150536,32537],{"class":263},[204,150538,215],{"class":214},[204,150540,150434],{"class":319},[204,150542,221],{"class":214},[204,150544,150545],{"class":206,"line":1404},[204,150546,2486],{"emptyLinePlaceholder":135},[204,150548,150549],{"class":206,"line":1416},[204,150550,2486],{"emptyLinePlaceholder":135},[204,150552,150553,150555,150558,150560,150562],{"class":206,"line":1698},[204,150554,14781],{"class":210},[204,150556,150557],{"class":2049}," Cat",[204,150559,215],{"class":214},[204,150561,150414],{"class":2049},[204,150563,30872],{"class":214},[204,150565,150566,150568,150570],{"class":206,"line":1703},[204,150567,30887],{"class":210},[204,150569,150491],{"class":2049},[204,150571,30893],{"class":214},[204,150573,150574,150576,150578,150581],{"class":206,"line":1709},[204,150575,32537],{"class":263},[204,150577,215],{"class":214},[204,150579,150580],{"class":319},"\"喵喵\"",[204,150582,221],{"class":214},[204,150584,150585],{"class":206,"line":1714},[204,150586,2486],{"emptyLinePlaceholder":135},[204,150588,150589],{"class":206,"line":1728},[204,150590,2486],{"emptyLinePlaceholder":135},[204,150592,150593,150595,150597],{"class":206,"line":1733},[204,150594,150449],{"class":214},[204,150596,260],{"class":210},[204,150598,150454],{"class":214},[204,150600,150601,150604,150606],{"class":206,"line":1739},[204,150602,150603],{"class":214},"cat ",[204,150605,260],{"class":210},[204,150607,150608],{"class":214}," Cat()\n",[204,150610,150611],{"class":206,"line":1760},[204,150612,2486],{"emptyLinePlaceholder":135},[204,150614,150615],{"class":206,"line":1765},[204,150616,150617],{"class":214},"dog.speak()\n",[204,150619,150620],{"class":206,"line":1779},[204,150621,150622],{"class":214},"cat.speak()\n",[14,150624,150626],{"id":150625},"_1110-super","11.10 super",[19,150628,150629,150630,150633],{},"子类可以通过 ",[81,150631,150632],{},"super()"," 调用父类方法。",[196,150635,150637],{"className":30464,"code":150636,"language":30466,"meta":125,"style":125},"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",[81,150638,150639,150647,150656,150666,150670,150674,150686,150695,150706,150716,150720,150724,150740],{"__ignoreMap":125},[204,150640,150641,150643,150645],{"class":206,"line":207},[204,150642,14781],{"class":210},[204,150644,15656],{"class":2049},[204,150646,3825],{"class":214},[204,150648,150649,150651,150653],{"class":206,"line":126},[204,150650,30887],{"class":210},[204,150652,30890],{"class":263},[204,150654,150655],{"class":214},"(self, name):\n",[204,150657,150658,150660,150662,150664],{"class":206,"line":131},[204,150659,30931],{"class":263},[204,150661,149835],{"class":214},[204,150663,260],{"class":210},[204,150665,149840],{"class":214},[204,150667,150668],{"class":206,"line":1281},[204,150669,2486],{"emptyLinePlaceholder":135},[204,150671,150672],{"class":206,"line":1287},[204,150673,2486],{"emptyLinePlaceholder":135},[204,150675,150676,150678,150680,150682,150684],{"class":206,"line":1301},[204,150677,14781],{"class":210},[204,150679,7985],{"class":2049},[204,150681,215],{"class":214},[204,150683,19133],{"class":2049},[204,150685,30872],{"class":214},[204,150687,150688,150690,150692],{"class":206,"line":1307},[204,150689,30887],{"class":210},[204,150691,30890],{"class":263},[204,150693,150694],{"class":214},"(self, name, score):\n",[204,150696,150697,150699,150701,150703],{"class":206,"line":1398},[204,150698,30903],{"class":263},[204,150700,17348],{"class":214},[204,150702,30915],{"class":263},[204,150704,150705],{"class":214},"(name)\n",[204,150707,150708,150710,150712,150714],{"class":206,"line":1404},[204,150709,30931],{"class":263},[204,150711,149859],{"class":214},[204,150713,260],{"class":210},[204,150715,1665],{"class":214},[204,150717,150718],{"class":206,"line":1416},[204,150719,2486],{"emptyLinePlaceholder":135},[204,150721,150722],{"class":206,"line":1698},[204,150723,2486],{"emptyLinePlaceholder":135},[204,150725,150726,150728,150730,150732,150734,150736,150738],{"class":206,"line":1703},[204,150727,149526],{"class":214},[204,150729,260],{"class":210},[204,150731,149930],{"class":214},[204,150733,149933],{"class":319},[204,150735,12522],{"class":214},[204,150737,1202],{"class":263},[204,150739,221],{"class":214},[204,150741,150742,150744],{"class":206,"line":1709},[204,150743,30501],{"class":263},[204,150745,150746],{"class":214},"(student.name, student.score)\n",[14,150748,150750],{"id":150749},"_1111-多态","11.11 多态",[19,150752,150753],{},"多态指不同对象响应同一个方法，表现出不同结果。",[196,150755,150757],{"className":30464,"code":150756,"language":30466,"meta":125,"style":125},"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",[81,150758,150759,150767,150775,150785,150789,150793,150801,150809,150819,150823,150827,150837,150842,150846,150850,150855],{"__ignoreMap":125},[204,150760,150761,150763,150765],{"class":206,"line":207},[204,150762,14781],{"class":210},[204,150764,150409],{"class":2049},[204,150766,3825],{"class":214},[204,150768,150769,150771,150773],{"class":206,"line":126},[204,150770,30887],{"class":210},[204,150772,150491],{"class":2049},[204,150774,30893],{"class":214},[204,150776,150777,150779,150781,150783],{"class":206,"line":131},[204,150778,32537],{"class":263},[204,150780,215],{"class":214},[204,150782,150434],{"class":319},[204,150784,221],{"class":214},[204,150786,150787],{"class":206,"line":1281},[204,150788,2486],{"emptyLinePlaceholder":135},[204,150790,150791],{"class":206,"line":1287},[204,150792,2486],{"emptyLinePlaceholder":135},[204,150794,150795,150797,150799],{"class":206,"line":1301},[204,150796,14781],{"class":210},[204,150798,150557],{"class":2049},[204,150800,3825],{"class":214},[204,150802,150803,150805,150807],{"class":206,"line":1307},[204,150804,30887],{"class":210},[204,150806,150491],{"class":2049},[204,150808,30893],{"class":214},[204,150810,150811,150813,150815,150817],{"class":206,"line":1398},[204,150812,32537],{"class":263},[204,150814,215],{"class":214},[204,150816,150580],{"class":319},[204,150818,221],{"class":214},[204,150820,150821],{"class":206,"line":1404},[204,150822,2486],{"emptyLinePlaceholder":135},[204,150824,150825],{"class":206,"line":1416},[204,150826,2486],{"emptyLinePlaceholder":135},[204,150828,150829,150831,150834],{"class":206,"line":1698},[204,150830,32033],{"class":210},[204,150832,150833],{"class":2049}," make_sound",[204,150835,150836],{"class":214},"(animal):\n",[204,150838,150839],{"class":206,"line":1703},[204,150840,150841],{"class":214},"    animal.speak()\n",[204,150843,150844],{"class":206,"line":1709},[204,150845,2486],{"emptyLinePlaceholder":135},[204,150847,150848],{"class":206,"line":1714},[204,150849,2486],{"emptyLinePlaceholder":135},[204,150851,150852],{"class":206,"line":1728},[204,150853,150854],{"class":214},"make_sound(Dog())\n",[204,150856,150857],{"class":206,"line":1733},[204,150858,150859],{"class":214},"make_sound(Cat())\n",[19,150861,150862],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150864,150866],{"id":150865},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150868,150869],{},"实例属性属于对象：",[196,150871,150873],{"className":30464,"code":150872,"language":30466,"meta":125,"style":125},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[81,150874,150875,150883,150891],{"__ignoreMap":125},[204,150876,150877,150879,150881],{"class":206,"line":207},[204,150878,14781],{"class":210},[204,150880,7985],{"class":2049},[204,150882,3825],{"class":214},[204,150884,150885,150887,150889],{"class":206,"line":126},[204,150886,30887],{"class":210},[204,150888,30890],{"class":263},[204,150890,150655],{"class":214},[204,150892,150893,150895,150897,150899],{"class":206,"line":131},[204,150894,30931],{"class":263},[204,150896,149835],{"class":214},[204,150898,260],{"class":210},[204,150900,149840],{"class":214},[19,150902,150903],{},"类属性属于类，所有对象共享：",[196,150905,150907],{"className":30464,"code":150906,"language":30466,"meta":125,"style":125},"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",[81,150908,150909,150917,150927,150931,150939,150949,150953,150957,150970,150984,150988,150995,151002],{"__ignoreMap":125},[204,150910,150911,150913,150915],{"class":206,"line":207},[204,150912,14781],{"class":210},[204,150914,7985],{"class":2049},[204,150916,3825],{"class":214},[204,150918,150919,150922,150924],{"class":206,"line":126},[204,150920,150921],{"class":214},"    school ",[204,150923,260],{"class":210},[204,150925,150926],{"class":319}," \"黑马学校\"\n",[204,150928,150929],{"class":206,"line":131},[204,150930,2486],{"emptyLinePlaceholder":135},[204,150932,150933,150935,150937],{"class":206,"line":1281},[204,150934,30887],{"class":210},[204,150936,30890],{"class":263},[204,150938,150655],{"class":214},[204,150940,150941,150943,150945,150947],{"class":206,"line":1287},[204,150942,30931],{"class":263},[204,150944,149835],{"class":214},[204,150946,260],{"class":210},[204,150948,149840],{"class":214},[204,150950,150951],{"class":206,"line":1301},[204,150952,2486],{"emptyLinePlaceholder":135},[204,150954,150955],{"class":206,"line":1307},[204,150956,2486],{"emptyLinePlaceholder":135},[204,150958,150959,150962,150964,150966,150968],{"class":206,"line":1398},[204,150960,150961],{"class":214},"s1 ",[204,150963,260],{"class":210},[204,150965,149930],{"class":214},[204,150967,149933],{"class":319},[204,150969,221],{"class":214},[204,150971,150972,150975,150977,150979,150982],{"class":206,"line":1404},[204,150973,150974],{"class":214},"s2 ",[204,150976,260],{"class":210},[204,150978,149930],{"class":214},[204,150980,150981],{"class":319},"\"小红\"",[204,150983,221],{"class":214},[204,150985,150986],{"class":206,"line":1416},[204,150987,2486],{"emptyLinePlaceholder":135},[204,150989,150990,150992],{"class":206,"line":1698},[204,150991,30501],{"class":263},[204,150993,150994],{"class":214},"(s1.school)\n",[204,150996,150997,150999],{"class":206,"line":1703},[204,150998,30501],{"class":263},[204,151000,151001],{"class":214},"(s2.school)\n",[204,151003,151004,151006],{"class":206,"line":1709},[204,151005,30501],{"class":263},[204,151007,151008],{"class":214},"(Student.school)\n",[19,151010,151011],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151013,151015],{"id":151014},"_1113-类方法和静态方法","11.13 类方法和静态方法",[49,151017,151019],{"id":151018},"_11131-类方法","11.13.1 类方法",[19,151021,151022,151023,151026,151027,28471],{},"类方法使用 ",[81,151024,151025],{},"@classmethod","，第一个参数通常是 ",[81,151028,151029],{},"cls",[196,151031,151033],{"className":30464,"code":151032,"language":30466,"meta":125,"style":125},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[81,151034,151035,151043,151051,151055,151063,151073,151083,151087,151091],{"__ignoreMap":125},[204,151036,151037,151039,151041],{"class":206,"line":207},[204,151038,14781],{"class":210},[204,151040,7985],{"class":2049},[204,151042,3825],{"class":214},[204,151044,151045,151047,151049],{"class":206,"line":126},[204,151046,150921],{"class":214},[204,151048,260],{"class":210},[204,151050,150926],{"class":319},[204,151052,151053],{"class":206,"line":131},[204,151054,2486],{"emptyLinePlaceholder":135},[204,151056,151057,151060],{"class":206,"line":1281},[204,151058,151059],{"class":2049},"    @",[204,151061,151062],{"class":263},"classmethod\n",[204,151064,151065,151067,151070],{"class":206,"line":1287},[204,151066,30887],{"class":210},[204,151068,151069],{"class":2049}," get_school",[204,151071,151072],{"class":214},"(cls):\n",[204,151074,151075,151077,151080],{"class":206,"line":1301},[204,151076,14839],{"class":210},[204,151078,151079],{"class":263}," cls",[204,151081,151082],{"class":214},".school\n",[204,151084,151085],{"class":206,"line":1307},[204,151086,2486],{"emptyLinePlaceholder":135},[204,151088,151089],{"class":206,"line":1398},[204,151090,2486],{"emptyLinePlaceholder":135},[204,151092,151093,151095],{"class":206,"line":1404},[204,151094,30501],{"class":263},[204,151096,151097],{"class":214},"(Student.get_school())\n",[49,151099,151101],{"id":151100},"_11132-静态方法","11.13.2 静态方法",[19,151103,151104,151105,151108],{},"静态方法使用 ",[81,151106,151107],{},"@staticmethod","，不需要访问实例和类。",[196,151110,151112],{"className":30464,"code":151111,"language":30466,"meta":125,"style":125},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[81,151113,151114,151123,151130,151139,151150,151154,151158],{"__ignoreMap":125},[204,151115,151116,151118,151121],{"class":206,"line":207},[204,151117,14781],{"class":210},[204,151119,151120],{"class":2049}," MathUtils",[204,151122,3825],{"class":214},[204,151124,151125,151127],{"class":206,"line":126},[204,151126,151059],{"class":2049},[204,151128,151129],{"class":263},"staticmethod\n",[204,151131,151132,151134,151136],{"class":206,"line":131},[204,151133,30887],{"class":210},[204,151135,5296],{"class":2049},[204,151137,151138],{"class":214},"(a, b):\n",[204,151140,151141,151143,151145,151147],{"class":206,"line":1281},[204,151142,14839],{"class":210},[204,151144,10956],{"class":214},[204,151146,694],{"class":210},[204,151148,151149],{"class":214}," b\n",[204,151151,151152],{"class":206,"line":1287},[204,151153,2486],{"emptyLinePlaceholder":135},[204,151155,151156],{"class":206,"line":1301},[204,151157,2486],{"emptyLinePlaceholder":135},[204,151159,151160,151162,151165,151167,151169,151171],{"class":206,"line":1307},[204,151161,30501],{"class":263},[204,151163,151164],{"class":214},"(MathUtils.add(",[204,151166,431],{"class":263},[204,151168,12522],{"class":214},[204,151170,292],{"class":263},[204,151172,30583],{"class":214},[19,151174,151175],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151177,151179],{"id":151178},"_1114-dataclass","11.14 dataclass",[19,151181,151182,151185],{},[81,151183,151184],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[196,151187,151189],{"className":30464,"code":151188,"language":30466,"meta":125,"style":125},"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",[81,151190,151191,151203,151207,151211,151216,151224,151232,151240,151248,151252,151256,151276],{"__ignoreMap":125},[204,151192,151193,151195,151198,151200],{"class":206,"line":207},[204,151194,30823],{"class":210},[204,151196,151197],{"class":214}," dataclasses ",[204,151199,30478],{"class":210},[204,151201,151202],{"class":214}," dataclass\n",[204,151204,151205],{"class":206,"line":126},[204,151206,2486],{"emptyLinePlaceholder":135},[204,151208,151209],{"class":206,"line":131},[204,151210,2486],{"emptyLinePlaceholder":135},[204,151212,151213],{"class":206,"line":1281},[204,151214,151215],{"class":2049},"@dataclass\n",[204,151217,151218,151220,151222],{"class":206,"line":1287},[204,151219,14781],{"class":210},[204,151221,7985],{"class":2049},[204,151223,3825],{"class":214},[204,151225,151226,151229],{"class":206,"line":1301},[204,151227,151228],{"class":214},"    name: ",[204,151230,151231],{"class":263},"str\n",[204,151233,151234,151237],{"class":206,"line":1307},[204,151235,151236],{"class":214},"    age: ",[204,151238,151239],{"class":263},"int\n",[204,151241,151242,151245],{"class":206,"line":1398},[204,151243,151244],{"class":214},"    score: ",[204,151246,151247],{"class":263},"float\n",[204,151249,151250],{"class":206,"line":1404},[204,151251,2486],{"emptyLinePlaceholder":135},[204,151253,151254],{"class":206,"line":1416},[204,151255,2486],{"emptyLinePlaceholder":135},[204,151257,151258,151260,151262,151264,151266,151268,151270,151272,151274],{"class":206,"line":1698},[204,151259,149526],{"class":214},[204,151261,260],{"class":210},[204,151263,149930],{"class":214},[204,151265,149933],{"class":319},[204,151267,12522],{"class":214},[204,151269,863],{"class":263},[204,151271,12522],{"class":214},[204,151273,1202],{"class":263},[204,151275,221],{"class":214},[204,151277,151278,151280],{"class":206,"line":1703},[204,151279,30501],{"class":263},[204,151281,150087],{"class":214},[19,151283,151284,151285,426,151287,151290],{},"它会自动生成 ",[81,151286,30915],{},[81,151288,151289],{},"__repr__"," 等方法。适合数据模型类。",[14,151292,151294],{"id":151293},"_1115-小案例学生类","11.15 小案例：学生类",[196,151296,151298],{"className":30464,"code":151297,"language":30466,"meta":125,"style":125},"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",[81,151299,151300,151308,151317,151329,151339,151349,151359,151363,151372,151385,151389,151398,151404,151416,151428,151440,151452,151456,151460,151466,151476,151485,151495,151503,151511,151520,151524,151528,151536,151572,151576,151580,151605,151612],{"__ignoreMap":125},[204,151301,151302,151304,151306],{"class":206,"line":207},[204,151303,14781],{"class":210},[204,151305,7985],{"class":2049},[204,151307,3825],{"class":214},[204,151309,151310,151312,151314],{"class":206,"line":126},[204,151311,30887],{"class":210},[204,151313,30890],{"class":263},[204,151315,151316],{"class":214},"(self, student_id, name, age, score):\n",[204,151318,151319,151321,151324,151326],{"class":206,"line":131},[204,151320,30931],{"class":263},[204,151322,151323],{"class":214},".student_id ",[204,151325,260],{"class":210},[204,151327,151328],{"class":214}," student_id\n",[204,151330,151331,151333,151335,151337],{"class":206,"line":1281},[204,151332,30931],{"class":263},[204,151334,149835],{"class":214},[204,151336,260],{"class":210},[204,151338,149840],{"class":214},[204,151340,151341,151343,151345,151347],{"class":206,"line":1287},[204,151342,30931],{"class":263},[204,151344,149847],{"class":214},[204,151346,260],{"class":210},[204,151348,149852],{"class":214},[204,151350,151351,151353,151355,151357],{"class":206,"line":1301},[204,151352,30931],{"class":263},[204,151354,149859],{"class":214},[204,151356,260],{"class":210},[204,151358,1665],{"class":214},[204,151360,151361],{"class":206,"line":1307},[204,151362,2486],{"emptyLinePlaceholder":135},[204,151364,151365,151367,151370],{"class":206,"line":1398},[204,151366,30887],{"class":210},[204,151368,151369],{"class":2049}," is_passed",[204,151371,30893],{"class":214},[204,151373,151374,151376,151378,151380,151382],{"class":206,"line":1404},[204,151375,14839],{"class":210},[204,151377,38959],{"class":263},[204,151379,149859],{"class":214},[204,151381,1796],{"class":210},[204,151383,151384],{"class":263}," 60\n",[204,151386,151387],{"class":206,"line":1416},[204,151388,2486],{"emptyLinePlaceholder":135},[204,151390,151391,151393,151396],{"class":206,"line":1698},[204,151392,30887],{"class":210},[204,151394,151395],{"class":2049}," to_dict",[204,151397,30893],{"class":214},[204,151399,151400,151402],{"class":206,"line":1703},[204,151401,14839],{"class":210},[204,151403,15659],{"class":214},[204,151405,151406,151409,151411,151413],{"class":206,"line":1709},[204,151407,151408],{"class":319},"            \"student_id\"",[204,151410,51523],{"class":214},[204,151412,30909],{"class":263},[204,151414,151415],{"class":214},".student_id,\n",[204,151417,151418,151421,151423,151425],{"class":206,"line":1714},[204,151419,151420],{"class":319},"            \"name\"",[204,151422,51523],{"class":214},[204,151424,30909],{"class":263},[204,151426,151427],{"class":214},".name,\n",[204,151429,151430,151433,151435,151437],{"class":206,"line":1728},[204,151431,151432],{"class":319},"            \"age\"",[204,151434,51523],{"class":214},[204,151436,30909],{"class":263},[204,151438,151439],{"class":214},".age,\n",[204,151441,151442,151445,151447,151449],{"class":206,"line":1733},[204,151443,151444],{"class":319},"            \"score\"",[204,151446,51523],{"class":214},[204,151448,30909],{"class":263},[204,151450,151451],{"class":214},".score,\n",[204,151453,151454],{"class":206,"line":1739},[204,151455,2615],{"class":214},[204,151457,151458],{"class":206,"line":1760},[204,151459,2486],{"emptyLinePlaceholder":135},[204,151461,151462,151464],{"class":206,"line":1765},[204,151463,151059],{"class":2049},[204,151465,151062],{"class":263},[204,151467,151468,151470,151473],{"class":206,"line":1779},[204,151469,30887],{"class":210},[204,151471,151472],{"class":2049}," from_dict",[204,151474,151475],{"class":214},"(cls, data):\n",[204,151477,151478,151480,151482],{"class":206,"line":1784},[204,151479,14839],{"class":210},[204,151481,151079],{"class":263},[204,151483,151484],{"class":214},"(\n",[204,151486,151487,151490,151493],{"class":206,"line":1813},[204,151488,151489],{"class":214},"            data[",[204,151491,151492],{"class":319},"\"student_id\"",[204,151494,87922],{"class":214},[204,151496,151497,151499,151501],{"class":206,"line":1818},[204,151498,151489],{"class":214},[204,151500,62765],{"class":319},[204,151502,87922],{"class":214},[204,151504,151505,151507,151509],{"class":206,"line":1835},[204,151506,151489],{"class":214},[204,151508,69210],{"class":319},[204,151510,87922],{"class":214},[204,151512,151513,151515,151518],{"class":206,"line":1840},[204,151514,151489],{"class":214},[204,151516,151517],{"class":319},"\"score\"",[204,151519,87922],{"class":214},[204,151521,151522],{"class":206,"line":1845},[204,151523,38212],{"class":214},[204,151525,151526],{"class":206,"line":1850},[204,151527,2486],{"emptyLinePlaceholder":135},[204,151529,151530,151532,151534],{"class":206,"line":1864},[204,151531,30887],{"class":210},[204,151533,150026],{"class":263},[204,151535,30893],{"class":214},[204,151537,151538,151540,151542,151544,151546,151549,151551,151554,151556,151558,151560,151562,151564,151566,151568,151570],{"class":206,"line":1869},[204,151539,14839],{"class":210},[204,151541,150035],{"class":210},[204,151543,464],{"class":319},[204,151545,149497],{"class":263},[204,151547,151548],{"class":214},".student_id",[204,151550,1159],{"class":263},[204,151552,151553],{"class":263}," {self",[204,151555,80387],{"class":214},[204,151557,1159],{"class":263},[204,151559,151553],{"class":263},[204,151561,80399],{"class":214},[204,151563,1159],{"class":263},[204,151565,151553],{"class":263},[204,151567,149907],{"class":214},[204,151569,1159],{"class":263},[204,151571,25220],{"class":319},[204,151573,151574],{"class":206,"line":2663},[204,151575,2486],{"emptyLinePlaceholder":135},[204,151577,151578],{"class":206,"line":2677},[204,151579,2486],{"emptyLinePlaceholder":135},[204,151581,151582,151584,151586,151588,151591,151593,151595,151597,151599,151601,151603],{"class":206,"line":2685},[204,151583,149526],{"class":214},[204,151585,260],{"class":210},[204,151587,149930],{"class":214},[204,151589,151590],{"class":319},"\"001\"",[204,151592,12522],{"class":214},[204,151594,149933],{"class":319},[204,151596,12522],{"class":214},[204,151598,863],{"class":263},[204,151600,12522],{"class":214},[204,151602,1202],{"class":263},[204,151604,221],{"class":214},[204,151606,151607,151609],{"class":206,"line":2690},[204,151608,30501],{"class":263},[204,151610,151611],{"class":214},"(student.is_passed())\n",[204,151613,151614,151616],{"class":206,"line":2696},[204,151615,30501],{"class":263},[204,151617,151618],{"class":214},"(student.to_dict())\n",[19,151620,151621,43,151624,151627],{},[81,151622,151623],{},"to_dict()",[81,151625,151626],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151629,151631],{"id":151630},"_1116-易错点","11.16 易错点",[161,151633,151634,151640,151646,151651,151654,151657],{},[71,151635,151636,151637,28471],{},"类名推荐使用大驼峰，如 ",[81,151638,151639],{},"StudentManager",[71,151641,151642,151643,151645],{},"方法第一个参数必须写 ",[81,151644,30909],{},"，调用时不用传。",[71,151647,151648,151650],{},[81,151649,30915],{}," 不是普通方法，它在创建对象时自动执行。",[71,151652,151653],{},"私有属性不是绝对安全，只是约定和名称改写。",[71,151655,151656],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[71,151658,151659],{},"类中方法太多时，说明职责可能过重。",[14,151661,151663],{"id":151662},"_1117-本章练习","11.17 本章练习",[161,151665,151666,151672,151678,151683,151696],{},[71,151667,151668,151669,151671],{},"定义 ",[81,151670,149613],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[71,151673,151668,151674,151677],{},[81,151675,151676],{},"Account"," 类，实现存款、取款、查询余额。",[71,151679,151668,151680,151682],{},[81,151681,17313],{}," 类，计算圆的周长和面积。",[71,151684,151668,151685,426,151688,151691,151692,151695],{},[81,151686,151687],{},"Dog",[81,151689,151690],{},"Cat"," 类，并用同一个函数调用它们的 ",[81,151693,151694],{},"speak()"," 方法。",[71,151697,104451,151698,151700,151701,28471],{},[81,151699,151184],{}," 定义一个商品类 ",[81,151702,151703],{},"Product",[5213,151705,151706],{},"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":125,"searchDepth":126,"depth":126,"links":151708},[151709,151710,151711,151712,151713,151714,151716,151717,151718,151719,151720,151721,151722,151726,151727,151728,151729],{"id":149377,"depth":126,"text":149378},{"id":149560,"depth":126,"text":149561},{"id":149624,"depth":126,"text":149625},{"id":149701,"depth":126,"text":149702},{"id":149800,"depth":126,"text":149801},{"id":149964,"depth":126,"text":151715},"11.6 str",{"id":150090,"depth":126,"text":150091},{"id":150356,"depth":126,"text":150357},{"id":150470,"depth":126,"text":150471},{"id":150625,"depth":126,"text":150626},{"id":150749,"depth":126,"text":150750},{"id":150865,"depth":126,"text":150866},{"id":151014,"depth":126,"text":151015,"children":151723},[151724,151725],{"id":151018,"depth":131,"text":151019},{"id":151100,"depth":131,"text":151101},{"id":151178,"depth":126,"text":151179},{"id":151293,"depth":126,"text":151294},{"id":151630,"depth":126,"text":151631},{"id":151662,"depth":126,"text":151663},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149369,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151736,"title":151737,"body":151738,"description":132,"extension":133,"meta":155051,"navigation":135,"path":155052,"seo":155053,"stem":155054,"__hash__":155055},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151739,"toc":155027},[151740,151743,151747,151750,151753,151782,151785,151793,151797,151801,151804,151827,151830,151836,151840,153286,153289,153310,153314,153317,153329,153332,153516,153519,153645,153648,153652,153656,153792,153796,153882,153886,153968,153972,154009,154013,154202,154206,154209,154439,154443,154446,154627,154630,154634,154637,154643,154646,154672,154676,154679,154693,154696,154721,154724,154738,154741,154758,154761,154778,154781,154798,154802,154828,154832,154855,154859,154862,154864,154870,154872,154893,154896,154902,154908,154912,154915,154991,154994,154998,155024],[10,151741,151737],{"id":151742},"_12-综合案例与复习路线",[14,151744,151746],{"id":151745},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151748,151749],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151751,151752],{},"一个合格的入门综合项目最好覆盖：",[161,151754,151755,151758,151761,151764,151767,151770,151773,151776,151779],{},[71,151756,151757],{},"输入输出。",[71,151759,151760],{},"判断和循环。",[71,151762,151763],{},"函数拆分。",[71,151765,151766],{},"列表、字典等容器。",[71,151768,151769],{},"文件持久化。",[71,151771,151772],{},"异常处理。",[71,151774,151775],{},"模块拆分。",[71,151777,151778],{},"可选：面向对象。",[71,151780,151781],{},"可选：数据可视化。",[19,151783,151784],{},"本章整理两个方向：",[161,151786,151787,151790],{},[71,151788,151789],{},"学生管理系统。",[71,151791,151792],{},"销售数据统计和可视化。",[14,151794,151796],{"id":151795},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[49,151798,151800],{"id":151799},"_1221-需求","12.2.1 需求",[19,151802,151803],{},"实现一个命令行学生管理系统：",[161,151805,151806,151809,151812,151815,151818,151821,151824],{},[71,151807,151808],{},"添加学生。",[71,151810,151811],{},"删除学生。",[71,151813,151814],{},"修改学生。",[71,151816,151817],{},"查询学生。",[71,151819,151820],{},"显示所有学生。",[71,151822,151823],{},"保存到 JSON 文件。",[71,151825,151826],{},"程序启动时自动读取 JSON 文件。",[19,151828,151829],{},"学生字段：",[196,151831,151834],{"className":151832,"code":151833,"language":5274,"meta":125},[5272],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[81,151835,151833],{"__ignoreMap":125},[14,151837,151839],{"id":151838},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[196,151841,151843],{"className":30464,"code":151842,"language":30466,"meta":125,"style":125},"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",[81,151844,151845,151851,151861,151865,151879,151883,151887,151896,151908,151914,151918,151924,151955,151965,151972,151983,151989,151993,151997,152007,152038,152064,152068,152072,152081,152092,152103,152114,152125,152136,152147,152158,152162,152166,152176,152188,152204,152211,152218,152222,152226,152236,152244,152251,152264,152274,152285,152289,152293,152302,152310,152316,152328,152336,152347,152351,152355,152364,152380,152384,152391,152402,152407,152411,152427,152442,152457,152461,152466,152474,152482,152490,152498,152502,152507,152518,152522,152526,152535,152550,152560,152564,152576,152587,152591,152595,152600,152604,152615,152619,152623,152632,152647,152655,152659,152671,152681,152685,152689,152704,152717,152730,152734,152747,152759,152771,152775,152779,152790,152794,152798,152807,152822,152830,152834,152846,152856,152860,152864,152869,152873,152877,152887,152893,152915,152934,152953,152972,152977,152981,152985,152994,153002,153013,153017,153021,153047,153057,153062,153066,153070,153078,153088,153092,153100,153105,153121,153125,153139,153144,153158,153163,153176,153181,153194,153199,153212,153217,153230,153241,153245,153251,153262,153266,153270,153282],{"__ignoreMap":125},[204,151846,151847,151849],{"class":206,"line":207},[204,151848,30478],{"class":210},[204,151850,147136],{"class":214},[204,151852,151853,151855,151857,151859],{"class":206,"line":126},[204,151854,30823],{"class":210},[204,151856,108396],{"class":214},[204,151858,30478],{"class":210},[204,151860,108401],{"class":214},[204,151862,151863],{"class":206,"line":131},[204,151864,2486],{"emptyLinePlaceholder":135},[204,151866,151867,151870,151872,151874,151877],{"class":206,"line":1281},[204,151868,151869],{"class":263},"DATA_FILE",[204,151871,13651],{"class":210},[204,151873,108630],{"class":214},[204,151875,151876],{"class":319},"\"students.json\"",[204,151878,221],{"class":214},[204,151880,151881],{"class":206,"line":1287},[204,151882,2486],{"emptyLinePlaceholder":135},[204,151884,151885],{"class":206,"line":1301},[204,151886,2486],{"emptyLinePlaceholder":135},[204,151888,151889,151891,151894],{"class":206,"line":1307},[204,151890,32033],{"class":210},[204,151892,151893],{"class":2049}," load_students",[204,151895,32039],{"class":214},[204,151897,151898,151900,151902,151905],{"class":206,"line":1398},[204,151899,3187],{"class":210},[204,151901,39016],{"class":210},[204,151903,151904],{"class":263}," DATA_FILE",[204,151906,151907],{"class":214},".exists():\n",[204,151909,151910,151912],{"class":206,"line":1404},[204,151911,14839],{"class":210},[204,151913,51924],{"class":214},[204,151915,151916],{"class":206,"line":1416},[204,151917,2486],{"emptyLinePlaceholder":135},[204,151919,151920,151922],{"class":206,"line":1698},[204,151921,125869],{"class":210},[204,151923,3825],{"class":214},[204,151925,151926,151929,151931,151933,151935,151937,151939,151941,151943,151945,151947,151949,151951,151953],{"class":206,"line":1703},[204,151927,151928],{"class":210},"        with",[204,151930,146836],{"class":263},[204,151932,215],{"class":214},[204,151934,151869],{"class":263},[204,151936,12522],{"class":214},[204,151938,146846],{"class":319},[204,151940,12522],{"class":214},[204,151942,146851],{"class":5303},[204,151944,260],{"class":210},[204,151946,146856],{"class":319},[204,151948,13801],{"class":214},[204,151950,31469],{"class":210},[204,151952,148198],{"class":5303},[204,151954,3825],{"class":214},[204,151956,151957,151959,151961,151963],{"class":206,"line":1709},[204,151958,15819],{"class":210},[204,151960,148209],{"class":214},[204,151962,45440],{"class":5303},[204,151964,221],{"class":214},[204,151966,151967,151969],{"class":206,"line":1714},[204,151968,125897],{"class":210},[204,151970,151971],{"class":214}," json.JSONDecodeError:\n",[204,151973,151974,151976,151978,151981],{"class":206,"line":1728},[204,151975,32537],{"class":263},[204,151977,215],{"class":214},[204,151979,151980],{"class":319},"\"数据文件格式错误，已使用空数据启动\"",[204,151982,221],{"class":214},[204,151984,151985,151987],{"class":206,"line":1733},[204,151986,14839],{"class":210},[204,151988,51924],{"class":214},[204,151990,151991],{"class":206,"line":1739},[204,151992,2486],{"emptyLinePlaceholder":135},[204,151994,151995],{"class":206,"line":1760},[204,151996,2486],{"emptyLinePlaceholder":135},[204,151998,151999,152001,152004],{"class":206,"line":1765},[204,152000,32033],{"class":210},[204,152002,152003],{"class":2049}," save_students",[204,152005,152006],{"class":214},"(students):\n",[204,152008,152009,152011,152013,152015,152017,152019,152022,152024,152026,152028,152030,152032,152034,152036],{"class":206,"line":1779},[204,152010,34264],{"class":210},[204,152012,146836],{"class":263},[204,152014,215],{"class":214},[204,152016,151869],{"class":263},[204,152018,12522],{"class":214},[204,152020,152021],{"class":319},"\"w\"",[204,152023,12522],{"class":214},[204,152025,146851],{"class":5303},[204,152027,260],{"class":210},[204,152029,146856],{"class":319},[204,152031,13801],{"class":214},[204,152033,31469],{"class":210},[204,152035,148198],{"class":5303},[204,152037,3825],{"class":214},[204,152039,152040,152043,152045,152047,152049,152051,152053,152055,152058,152060,152062],{"class":206,"line":1784},[204,152041,152042],{"class":214},"        json.dump(students, ",[204,152044,45440],{"class":5303},[204,152046,12522],{"class":214},[204,152048,147182],{"class":5303},[204,152050,260],{"class":210},[204,152052,34073],{"class":263},[204,152054,12522],{"class":214},[204,152056,152057],{"class":5303},"indent",[204,152059,260],{"class":210},[204,152061,292],{"class":263},[204,152063,221],{"class":214},[204,152065,152066],{"class":206,"line":1813},[204,152067,2486],{"emptyLinePlaceholder":135},[204,152069,152070],{"class":206,"line":1818},[204,152071,2486],{"emptyLinePlaceholder":135},[204,152073,152074,152076,152079],{"class":206,"line":1835},[204,152075,32033],{"class":210},[204,152077,152078],{"class":2049}," show_menu",[204,152080,32039],{"class":214},[204,152082,152083,152085,152087,152090],{"class":206,"line":1840},[204,152084,31385],{"class":263},[204,152086,215],{"class":214},[204,152088,152089],{"class":319},"\"====== 学生管理系统 ======\"",[204,152091,221],{"class":214},[204,152093,152094,152096,152098,152101],{"class":206,"line":1845},[204,152095,31385],{"class":263},[204,152097,215],{"class":214},[204,152099,152100],{"class":319},"\"1. 添加学生\"",[204,152102,221],{"class":214},[204,152104,152105,152107,152109,152112],{"class":206,"line":1850},[204,152106,31385],{"class":263},[204,152108,215],{"class":214},[204,152110,152111],{"class":319},"\"2. 删除学生\"",[204,152113,221],{"class":214},[204,152115,152116,152118,152120,152123],{"class":206,"line":1864},[204,152117,31385],{"class":263},[204,152119,215],{"class":214},[204,152121,152122],{"class":319},"\"3. 修改学生\"",[204,152124,221],{"class":214},[204,152126,152127,152129,152131,152134],{"class":206,"line":1869},[204,152128,31385],{"class":263},[204,152130,215],{"class":214},[204,152132,152133],{"class":319},"\"4. 查询学生\"",[204,152135,221],{"class":214},[204,152137,152138,152140,152142,152145],{"class":206,"line":2663},[204,152139,31385],{"class":263},[204,152141,215],{"class":214},[204,152143,152144],{"class":319},"\"5. 显示所有学生\"",[204,152146,221],{"class":214},[204,152148,152149,152151,152153,152156],{"class":206,"line":2677},[204,152150,31385],{"class":263},[204,152152,215],{"class":214},[204,152154,152155],{"class":319},"\"0. 退出系统\"",[204,152157,221],{"class":214},[204,152159,152160],{"class":206,"line":2685},[204,152161,2486],{"emptyLinePlaceholder":135},[204,152163,152164],{"class":206,"line":2690},[204,152165,2486],{"emptyLinePlaceholder":135},[204,152167,152168,152170,152173],{"class":206,"line":2696},[204,152169,32033],{"class":210},[204,152171,152172],{"class":2049}," find_student",[204,152174,152175],{"class":214},"(students, student_id):\n",[204,152177,152178,152180,152183,152185],{"class":206,"line":2702},[204,152179,3287],{"class":210},[204,152181,152182],{"class":214}," student ",[204,152184,26129],{"class":210},[204,152186,152187],{"class":214}," students:\n",[204,152189,152190,152192,152195,152197,152199,152201],{"class":206,"line":2707},[204,152191,2583],{"class":210},[204,152193,152194],{"class":214}," student[",[204,152196,151492],{"class":319},[204,152198,4529],{"class":214},[204,152200,3035],{"class":210},[204,152202,152203],{"class":214}," student_id:\n",[204,152205,152206,152208],{"class":206,"line":8035},[204,152207,15819],{"class":210},[204,152209,152210],{"class":214}," student\n",[204,152212,152213,152215],{"class":206,"line":8059},[204,152214,4176],{"class":210},[204,152216,152217],{"class":263}," None\n",[204,152219,152220],{"class":206,"line":8064},[204,152221,2486],{"emptyLinePlaceholder":135},[204,152223,152224],{"class":206,"line":8070},[204,152225,2486],{"emptyLinePlaceholder":135},[204,152227,152228,152230,152233],{"class":206,"line":8097},[204,152229,32033],{"class":210},[204,152231,152232],{"class":2049}," input_int",[204,152234,152235],{"class":214},"(prompt):\n",[204,152237,152238,152240,152242],{"class":206,"line":8102},[204,152239,2337],{"class":210},[204,152241,95378],{"class":263},[204,152243,3825],{"class":214},[204,152245,152246,152249],{"class":206,"line":8108},[204,152247,152248],{"class":210},"        try",[204,152250,3825],{"class":214},[204,152252,152253,152255,152257,152259,152261],{"class":206,"line":8120},[204,152254,15819],{"class":210},[204,152256,2468],{"class":263},[204,152258,215],{"class":214},[204,152260,53907],{"class":263},[204,152262,152263],{"class":214},"(prompt))\n",[204,152265,152266,152269,152272],{"class":206,"line":8132},[204,152267,152268],{"class":210},"        except",[204,152270,152271],{"class":263}," ValueError",[204,152273,3825],{"class":214},[204,152275,152276,152278,152280,152283],{"class":206,"line":8144},[204,152277,34736],{"class":263},[204,152279,215],{"class":214},[204,152281,152282],{"class":319},"\"请输入整数\"",[204,152284,221],{"class":214},[204,152286,152287],{"class":206,"line":9803},[204,152288,2486],{"emptyLinePlaceholder":135},[204,152290,152291],{"class":206,"line":9828},[204,152292,2486],{"emptyLinePlaceholder":135},[204,152294,152295,152297,152300],{"class":206,"line":9851},[204,152296,32033],{"class":210},[204,152298,152299],{"class":2049}," input_float",[204,152301,152235],{"class":214},[204,152303,152304,152306,152308],{"class":206,"line":9875},[204,152305,2337],{"class":210},[204,152307,95378],{"class":263},[204,152309,3825],{"class":214},[204,152311,152312,152314],{"class":206,"line":9880},[204,152313,152248],{"class":210},[204,152315,3825],{"class":214},[204,152317,152318,152320,152322,152324,152326],{"class":206,"line":9885},[204,152319,15819],{"class":210},[204,152321,109882],{"class":263},[204,152323,215],{"class":214},[204,152325,53907],{"class":263},[204,152327,152263],{"class":214},[204,152329,152330,152332,152334],{"class":206,"line":9890},[204,152331,152268],{"class":210},[204,152333,152271],{"class":263},[204,152335,3825],{"class":214},[204,152337,152338,152340,152342,152345],{"class":206,"line":9899},[204,152339,34736],{"class":263},[204,152341,215],{"class":214},[204,152343,152344],{"class":319},"\"请输入数字\"",[204,152346,221],{"class":214},[204,152348,152349],{"class":206,"line":9904},[204,152350,2486],{"emptyLinePlaceholder":135},[204,152352,152353],{"class":206,"line":9910},[204,152354,2486],{"emptyLinePlaceholder":135},[204,152356,152357,152359,152362],{"class":206,"line":9931},[204,152358,32033],{"class":210},[204,152360,152361],{"class":2049}," add_student",[204,152363,152006],{"class":214},[204,152365,152366,152369,152371,152373,152375,152378],{"class":206,"line":9937},[204,152367,152368],{"class":214},"    student_id ",[204,152370,260],{"class":210},[204,152372,60691],{"class":263},[204,152374,215],{"class":214},[204,152376,152377],{"class":319},"\"请输入学号:\"",[204,152379,221],{"class":214},[204,152381,152382],{"class":206,"line":9951},[204,152383,2486],{"emptyLinePlaceholder":135},[204,152385,152386,152388],{"class":206,"line":9957},[204,152387,3187],{"class":210},[204,152389,152390],{"class":214}," find_student(students, student_id):\n",[204,152392,152393,152395,152397,152400],{"class":206,"line":9984},[204,152394,32537],{"class":263},[204,152396,215],{"class":214},[204,152398,152399],{"class":319},"\"学号已存在\"",[204,152401,221],{"class":214},[204,152403,152404],{"class":206,"line":9993},[204,152405,152406],{"class":210},"        return\n",[204,152408,152409],{"class":206,"line":9999},[204,152410,2486],{"emptyLinePlaceholder":135},[204,152412,152413,152416,152418,152420,152422,152425],{"class":206,"line":10007},[204,152414,152415],{"class":214},"    name ",[204,152417,260],{"class":210},[204,152419,60691],{"class":263},[204,152421,215],{"class":214},[204,152423,152424],{"class":319},"\"请输入姓名:\"",[204,152426,221],{"class":214},[204,152428,152429,152432,152434,152437,152440],{"class":206,"line":10012},[204,152430,152431],{"class":214},"    age ",[204,152433,260],{"class":210},[204,152435,152436],{"class":214}," input_int(",[204,152438,152439],{"class":319},"\"请输入年龄:\"",[204,152441,221],{"class":214},[204,152443,152444,152447,152449,152452,152455],{"class":206,"line":16691},[204,152445,152446],{"class":214},"    score ",[204,152448,260],{"class":210},[204,152450,152451],{"class":214}," input_float(",[204,152453,152454],{"class":319},"\"请输入成绩:\"",[204,152456,221],{"class":214},[204,152458,152459],{"class":206,"line":16697},[204,152460,2486],{"emptyLinePlaceholder":135},[204,152462,152463],{"class":206,"line":16720},[204,152464,152465],{"class":214},"    students.append({\n",[204,152467,152468,152471],{"class":206,"line":16726},[204,152469,152470],{"class":319},"        \"student_id\"",[204,152472,152473],{"class":214},": student_id,\n",[204,152475,152476,152479],{"class":206,"line":16749},[204,152477,152478],{"class":319},"        \"name\"",[204,152480,152481],{"class":214},": name,\n",[204,152483,152484,152487],{"class":206,"line":16763},[204,152485,152486],{"class":319},"        \"age\"",[204,152488,152489],{"class":214},": age,\n",[204,152491,152492,152495],{"class":206,"line":16783},[204,152493,152494],{"class":319},"        \"score\"",[204,152496,152497],{"class":214},": score,\n",[204,152499,152500],{"class":206,"line":16789},[204,152501,33547],{"class":214},[204,152503,152504],{"class":206,"line":16800},[204,152505,152506],{"class":214},"    save_students(students)\n",[204,152508,152509,152511,152513,152516],{"class":206,"line":16823},[204,152510,31385],{"class":263},[204,152512,215],{"class":214},[204,152514,152515],{"class":319},"\"添加成功\"",[204,152517,221],{"class":214},[204,152519,152520],{"class":206,"line":16845},[204,152521,2486],{"emptyLinePlaceholder":135},[204,152523,152524],{"class":206,"line":16850},[204,152525,2486],{"emptyLinePlaceholder":135},[204,152527,152528,152530,152533],{"class":206,"line":16856},[204,152529,32033],{"class":210},[204,152531,152532],{"class":2049}," delete_student",[204,152534,152006],{"class":214},[204,152536,152537,152539,152541,152543,152545,152548],{"class":206,"line":16870},[204,152538,152368],{"class":214},[204,152540,260],{"class":210},[204,152542,60691],{"class":263},[204,152544,215],{"class":214},[204,152546,152547],{"class":319},"\"请输入要删除的学号:\"",[204,152549,221],{"class":214},[204,152551,152552,152555,152557],{"class":206,"line":16883},[204,152553,152554],{"class":214},"    student ",[204,152556,260],{"class":210},[204,152558,152559],{"class":214}," find_student(students, student_id)\n",[204,152561,152562],{"class":206,"line":16888},[204,152563,2486],{"emptyLinePlaceholder":135},[204,152565,152566,152568,152570,152572,152574],{"class":206,"line":16902},[204,152567,3187],{"class":210},[204,152569,152182],{"class":214},[204,152571,39013],{"class":210},[204,152573,39019],{"class":263},[204,152575,3825],{"class":214},[204,152577,152578,152580,152582,152585],{"class":206,"line":16907},[204,152579,32537],{"class":263},[204,152581,215],{"class":214},[204,152583,152584],{"class":319},"\"学生不存在\"",[204,152586,221],{"class":214},[204,152588,152589],{"class":206,"line":16913},[204,152590,152406],{"class":210},[204,152592,152593],{"class":206,"line":16918},[204,152594,2486],{"emptyLinePlaceholder":135},[204,152596,152597],{"class":206,"line":16932},[204,152598,152599],{"class":214},"    students.remove(student)\n",[204,152601,152602],{"class":206,"line":16937},[204,152603,152506],{"class":214},[204,152605,152606,152608,152610,152613],{"class":206,"line":16942},[204,152607,31385],{"class":263},[204,152609,215],{"class":214},[204,152611,152612],{"class":319},"\"删除成功\"",[204,152614,221],{"class":214},[204,152616,152617],{"class":206,"line":16956},[204,152618,2486],{"emptyLinePlaceholder":135},[204,152620,152621],{"class":206,"line":16968},[204,152622,2486],{"emptyLinePlaceholder":135},[204,152624,152625,152627,152630],{"class":206,"line":16973},[204,152626,32033],{"class":210},[204,152628,152629],{"class":2049}," update_student",[204,152631,152006],{"class":214},[204,152633,152634,152636,152638,152640,152642,152645],{"class":206,"line":16986},[204,152635,152368],{"class":214},[204,152637,260],{"class":210},[204,152639,60691],{"class":263},[204,152641,215],{"class":214},[204,152643,152644],{"class":319},"\"请输入要修改的学号:\"",[204,152646,221],{"class":214},[204,152648,152649,152651,152653],{"class":206,"line":16991},[204,152650,152554],{"class":214},[204,152652,260],{"class":210},[204,152654,152559],{"class":214},[204,152656,152657],{"class":206,"line":16996},[204,152658,2486],{"emptyLinePlaceholder":135},[204,152660,152661,152663,152665,152667,152669],{"class":206,"line":17001},[204,152662,3187],{"class":210},[204,152664,152182],{"class":214},[204,152666,39013],{"class":210},[204,152668,39019],{"class":263},[204,152670,3825],{"class":214},[204,152672,152673,152675,152677,152679],{"class":206,"line":17014},[204,152674,32537],{"class":263},[204,152676,215],{"class":214},[204,152678,152584],{"class":319},[204,152680,221],{"class":214},[204,152682,152683],{"class":206,"line":17019},[204,152684,152406],{"class":210},[204,152686,152687],{"class":206,"line":32719},[204,152688,2486],{"emptyLinePlaceholder":135},[204,152690,152691,152693,152695,152697,152699,152702],{"class":206,"line":32725},[204,152692,152415],{"class":214},[204,152694,260],{"class":210},[204,152696,60691],{"class":263},[204,152698,215],{"class":214},[204,152700,152701],{"class":319},"\"请输入新姓名:\"",[204,152703,221],{"class":214},[204,152705,152706,152708,152710,152712,152715],{"class":206,"line":32731},[204,152707,152431],{"class":214},[204,152709,260],{"class":210},[204,152711,152436],{"class":214},[204,152713,152714],{"class":319},"\"请输入新年龄:\"",[204,152716,221],{"class":214},[204,152718,152719,152721,152723,152725,152728],{"class":206,"line":32737},[204,152720,152446],{"class":214},[204,152722,260],{"class":210},[204,152724,152451],{"class":214},[204,152726,152727],{"class":319},"\"请输入新成绩:\"",[204,152729,221],{"class":214},[204,152731,152732],{"class":206,"line":32743},[204,152733,2486],{"emptyLinePlaceholder":135},[204,152735,152736,152739,152741,152743,152745],{"class":206,"line":32754},[204,152737,152738],{"class":214},"    student[",[204,152740,62765],{"class":319},[204,152742,4529],{"class":214},[204,152744,260],{"class":210},[204,152746,149840],{"class":214},[204,152748,152749,152751,152753,152755,152757],{"class":206,"line":32760},[204,152750,152738],{"class":214},[204,152752,69210],{"class":319},[204,152754,4529],{"class":214},[204,152756,260],{"class":210},[204,152758,149852],{"class":214},[204,152760,152761,152763,152765,152767,152769],{"class":206,"line":32780},[204,152762,152738],{"class":214},[204,152764,151517],{"class":319},[204,152766,4529],{"class":214},[204,152768,260],{"class":210},[204,152770,1665],{"class":214},[204,152772,152773],{"class":206,"line":32786},[204,152774,2486],{"emptyLinePlaceholder":135},[204,152776,152777],{"class":206,"line":32797},[204,152778,152506],{"class":214},[204,152780,152781,152783,152785,152788],{"class":206,"line":32803},[204,152782,31385],{"class":263},[204,152784,215],{"class":214},[204,152786,152787],{"class":319},"\"修改成功\"",[204,152789,221],{"class":214},[204,152791,152792],{"class":206,"line":32809},[204,152793,2486],{"emptyLinePlaceholder":135},[204,152795,152796],{"class":206,"line":32815},[204,152797,2486],{"emptyLinePlaceholder":135},[204,152799,152800,152802,152805],{"class":206,"line":32821},[204,152801,32033],{"class":210},[204,152803,152804],{"class":2049}," query_student",[204,152806,152006],{"class":214},[204,152808,152809,152811,152813,152815,152817,152820],{"class":206,"line":32827},[204,152810,152368],{"class":214},[204,152812,260],{"class":210},[204,152814,60691],{"class":263},[204,152816,215],{"class":214},[204,152818,152819],{"class":319},"\"请输入要查询的学号:\"",[204,152821,221],{"class":214},[204,152823,152824,152826,152828],{"class":206,"line":32833},[204,152825,152554],{"class":214},[204,152827,260],{"class":210},[204,152829,152559],{"class":214},[204,152831,152832],{"class":206,"line":32839},[204,152833,2486],{"emptyLinePlaceholder":135},[204,152835,152836,152838,152840,152842,152844],{"class":206,"line":32859},[204,152837,3187],{"class":210},[204,152839,152182],{"class":214},[204,152841,39013],{"class":210},[204,152843,39019],{"class":263},[204,152845,3825],{"class":214},[204,152847,152848,152850,152852,152854],{"class":206,"line":32865},[204,152849,32537],{"class":263},[204,152851,215],{"class":214},[204,152853,152584],{"class":319},[204,152855,221],{"class":214},[204,152857,152858],{"class":206,"line":32881},[204,152859,152406],{"class":210},[204,152861,152862],{"class":206,"line":32887},[204,152863,2486],{"emptyLinePlaceholder":135},[204,152865,152866],{"class":206,"line":32901},[204,152867,152868],{"class":214},"    print_student(student)\n",[204,152870,152871],{"class":206,"line":32907},[204,152872,2486],{"emptyLinePlaceholder":135},[204,152874,152875],{"class":206,"line":32922},[204,152876,2486],{"emptyLinePlaceholder":135},[204,152878,152879,152881,152884],{"class":206,"line":32928},[204,152880,32033],{"class":210},[204,152882,152883],{"class":2049}," print_student",[204,152885,152886],{"class":214},"(student):\n",[204,152888,152889,152891],{"class":206,"line":32937},[204,152890,31385],{"class":263},[204,152892,151484],{"class":214},[204,152894,152895,152898,152900,152902,152905,152908,152910,152913],{"class":206,"line":32943},[204,152896,152897],{"class":210},"        f",[204,152899,464],{"class":319},[204,152901,1109],{"class":263},[204,152903,152904],{"class":214},"student[",[204,152906,152907],{"class":319},"'student_id'",[204,152909,1153],{"class":214},[204,152911,152912],{"class":263},"}\\t",[204,152914,25220],{"class":319},[204,152916,152917,152919,152921,152923,152925,152928,152930,152932],{"class":206,"line":32952},[204,152918,152897],{"class":210},[204,152920,464],{"class":319},[204,152922,1109],{"class":263},[204,152924,152904],{"class":214},[204,152926,152927],{"class":319},"'name'",[204,152929,1153],{"class":214},[204,152931,152912],{"class":263},[204,152933,25220],{"class":319},[204,152935,152936,152938,152940,152942,152944,152947,152949,152951],{"class":206,"line":32958},[204,152937,152897],{"class":210},[204,152939,464],{"class":319},[204,152941,1109],{"class":263},[204,152943,152904],{"class":214},[204,152945,152946],{"class":319},"'age'",[204,152948,1153],{"class":214},[204,152950,152912],{"class":263},[204,152952,25220],{"class":319},[204,152954,152955,152957,152959,152961,152963,152966,152968,152970],{"class":206,"line":32964},[204,152956,152897],{"class":210},[204,152958,464],{"class":319},[204,152960,1109],{"class":263},[204,152962,152904],{"class":214},[204,152964,152965],{"class":319},"'score'",[204,152967,1153],{"class":214},[204,152969,1159],{"class":263},[204,152971,25220],{"class":319},[204,152973,152974],{"class":206,"line":32973},[204,152975,152976],{"class":214},"    )\n",[204,152978,152979],{"class":206,"line":32979},[204,152980,2486],{"emptyLinePlaceholder":135},[204,152982,152983],{"class":206,"line":32990},[204,152984,2486],{"emptyLinePlaceholder":135},[204,152986,152987,152989,152992],{"class":206,"line":32996},[204,152988,32033],{"class":210},[204,152990,152991],{"class":2049}," show_all_students",[204,152993,152006],{"class":214},[204,152995,152996,152998,153000],{"class":206,"line":33015},[204,152997,3187],{"class":210},[204,152999,39016],{"class":210},[204,153001,152187],{"class":214},[204,153003,153004,153006,153008,153011],{"class":206,"line":33021},[204,153005,32537],{"class":263},[204,153007,215],{"class":214},[204,153009,153010],{"class":319},"\"暂无学生\"",[204,153012,221],{"class":214},[204,153014,153015],{"class":206,"line":33032},[204,153016,152406],{"class":210},[204,153018,153019],{"class":206,"line":33038},[204,153020,2486],{"emptyLinePlaceholder":135},[204,153022,153023,153025,153027,153030,153032,153035,153037,153040,153042,153045],{"class":206,"line":33058},[204,153024,31385],{"class":263},[204,153026,215],{"class":214},[204,153028,153029],{"class":319},"\"学号",[204,153031,1317],{"class":263},[204,153033,153034],{"class":319},"姓名",[204,153036,1317],{"class":263},[204,153038,153039],{"class":319},"年龄",[204,153041,1317],{"class":263},[204,153043,153044],{"class":319},"成绩\"",[204,153046,221],{"class":214},[204,153048,153049,153051,153053,153055],{"class":206,"line":33074},[204,153050,3287],{"class":210},[204,153052,152182],{"class":214},[204,153054,26129],{"class":210},[204,153056,152187],{"class":214},[204,153058,153059],{"class":206,"line":33080},[204,153060,153061],{"class":214},"        print_student(student)\n",[204,153063,153064],{"class":206,"line":33094},[204,153065,2486],{"emptyLinePlaceholder":135},[204,153067,153068],{"class":206,"line":33100},[204,153069,2486],{"emptyLinePlaceholder":135},[204,153071,153072,153074,153076],{"class":206,"line":33106},[204,153073,32033],{"class":210},[204,153075,2059],{"class":2049},[204,153077,32039],{"class":214},[204,153079,153080,153083,153085],{"class":206,"line":33117},[204,153081,153082],{"class":214},"    students ",[204,153084,260],{"class":210},[204,153086,153087],{"class":214}," load_students()\n",[204,153089,153090],{"class":206,"line":33123},[204,153091,2486],{"emptyLinePlaceholder":135},[204,153093,153094,153096,153098],{"class":206,"line":33129},[204,153095,2337],{"class":210},[204,153097,95378],{"class":263},[204,153099,3825],{"class":214},[204,153101,153102],{"class":206,"line":33139},[204,153103,153104],{"class":214},"        show_menu()\n",[204,153106,153107,153110,153112,153114,153116,153119],{"class":206,"line":33145},[204,153108,153109],{"class":214},"        choice ",[204,153111,260],{"class":210},[204,153113,60691],{"class":263},[204,153115,215],{"class":214},[204,153117,153118],{"class":319},"\"请输入操作:\"",[204,153120,221],{"class":214},[204,153122,153123],{"class":206,"line":33156},[204,153124,2486],{"emptyLinePlaceholder":135},[204,153126,153127,153129,153132,153134,153137],{"class":206,"line":33162},[204,153128,2583],{"class":210},[204,153130,153131],{"class":214}," choice ",[204,153133,3035],{"class":210},[204,153135,153136],{"class":319}," \"1\"",[204,153138,3825],{"class":214},[204,153140,153141],{"class":206,"line":33172},[204,153142,153143],{"class":214},"            add_student(students)\n",[204,153145,153146,153149,153151,153153,153156],{"class":206,"line":33177},[204,153147,153148],{"class":210},"        elif",[204,153150,153131],{"class":214},[204,153152,3035],{"class":210},[204,153154,153155],{"class":319}," \"2\"",[204,153157,3825],{"class":214},[204,153159,153160],{"class":206,"line":33183},[204,153161,153162],{"class":214},"            delete_student(students)\n",[204,153164,153165,153167,153169,153171,153174],{"class":206,"line":33232},[204,153166,153148],{"class":210},[204,153168,153131],{"class":214},[204,153170,3035],{"class":210},[204,153172,153173],{"class":319}," \"3\"",[204,153175,3825],{"class":214},[204,153177,153178],{"class":206,"line":33279},[204,153179,153180],{"class":214},"            update_student(students)\n",[204,153182,153183,153185,153187,153189,153192],{"class":206,"line":33284},[204,153184,153148],{"class":210},[204,153186,153131],{"class":214},[204,153188,3035],{"class":210},[204,153190,153191],{"class":319}," \"4\"",[204,153193,3825],{"class":214},[204,153195,153196],{"class":206,"line":33290},[204,153197,153198],{"class":214},"            query_student(students)\n",[204,153200,153201,153203,153205,153207,153210],{"class":206,"line":33309},[204,153202,153148],{"class":210},[204,153204,153131],{"class":214},[204,153206,3035],{"class":210},[204,153208,153209],{"class":319}," \"5\"",[204,153211,3825],{"class":214},[204,153213,153214],{"class":206,"line":33315},[204,153215,153216],{"class":214},"            show_all_students(students)\n",[204,153218,153219,153221,153223,153225,153228],{"class":206,"line":33335},[204,153220,153148],{"class":210},[204,153222,153131],{"class":214},[204,153224,3035],{"class":210},[204,153226,153227],{"class":319}," \"0\"",[204,153229,3825],{"class":214},[204,153231,153232,153234,153236,153239],{"class":206,"line":33341},[204,153233,34736],{"class":263},[204,153235,215],{"class":214},[204,153237,153238],{"class":319},"\"退出系统\"",[204,153240,221],{"class":214},[204,153242,153243],{"class":206,"line":33347},[204,153244,115183],{"class":210},[204,153246,153247,153249],{"class":206,"line":33357},[204,153248,2620],{"class":210},[204,153250,3825],{"class":214},[204,153252,153253,153255,153257,153260],{"class":206,"line":33362},[204,153254,34736],{"class":263},[204,153256,215],{"class":214},[204,153258,153259],{"class":319},"\"输入错误\"",[204,153261,221],{"class":214},[204,153263,153264],{"class":206,"line":33368},[204,153265,2486],{"emptyLinePlaceholder":135},[204,153267,153268],{"class":206,"line":33384},[204,153269,2486],{"emptyLinePlaceholder":135},[204,153271,153272,153274,153276,153278,153280],{"class":206,"line":33429},[204,153273,1617],{"class":210},[204,153275,31306],{"class":263},[204,153277,101644],{"class":210},[204,153279,101647],{"class":319},[204,153281,3825],{"class":214},[204,153283,153284],{"class":206,"line":33435},[204,153285,101654],{"class":214},[19,153287,153288],{},"这个项目串联了：",[161,153290,153291,153294,153297,153300,153303,153305],{},[71,153292,153293],{},"菜单循环。",[71,153295,153296],{},"函数封装。",[71,153298,153299],{},"列表字典。",[71,153301,153302],{},"JSON 读写。",[71,153304,151772],{},[71,153306,153307,28471],{},[81,153308,153309],{},"if __name__ == \"__main__\"",[14,153311,153313],{"id":153312},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153315,153316],{},"可以进一步拆成两个类：",[161,153318,153319,153324],{},[71,153320,153321,153323],{},[81,153322,149613],{},"：表示单个学生。",[71,153325,153326,153328],{},[81,153327,151639],{},"：负责学生增删改查和文件保存。",[19,153330,153331],{},"示意代码：",[196,153333,153335],{"className":30464,"code":153334,"language":30466,"meta":125,"style":125},"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",[81,153336,153337,153347,153351,153355,153359,153367,153374,153380,153386,153392,153396,153404,153410,153420,153430,153440,153450,153454,153458,153464,153472,153480,153488,153496,153504,153512],{"__ignoreMap":125},[204,153338,153339,153341,153343,153345],{"class":206,"line":207},[204,153340,30823],{"class":210},[204,153342,151197],{"class":214},[204,153344,30478],{"class":210},[204,153346,151202],{"class":214},[204,153348,153349],{"class":206,"line":126},[204,153350,2486],{"emptyLinePlaceholder":135},[204,153352,153353],{"class":206,"line":131},[204,153354,2486],{"emptyLinePlaceholder":135},[204,153356,153357],{"class":206,"line":1281},[204,153358,151215],{"class":2049},[204,153360,153361,153363,153365],{"class":206,"line":1287},[204,153362,14781],{"class":210},[204,153364,7985],{"class":2049},[204,153366,3825],{"class":214},[204,153368,153369,153372],{"class":206,"line":1301},[204,153370,153371],{"class":214},"    student_id: ",[204,153373,151231],{"class":263},[204,153375,153376,153378],{"class":206,"line":1307},[204,153377,151228],{"class":214},[204,153379,151231],{"class":263},[204,153381,153382,153384],{"class":206,"line":1398},[204,153383,151236],{"class":214},[204,153385,151239],{"class":263},[204,153387,153388,153390],{"class":206,"line":1404},[204,153389,151244],{"class":214},[204,153391,151247],{"class":263},[204,153393,153394],{"class":206,"line":1416},[204,153395,2486],{"emptyLinePlaceholder":135},[204,153397,153398,153400,153402],{"class":206,"line":1698},[204,153399,30887],{"class":210},[204,153401,151395],{"class":2049},[204,153403,30893],{"class":214},[204,153405,153406,153408],{"class":206,"line":1703},[204,153407,14839],{"class":210},[204,153409,15659],{"class":214},[204,153411,153412,153414,153416,153418],{"class":206,"line":1709},[204,153413,151408],{"class":319},[204,153415,51523],{"class":214},[204,153417,30909],{"class":263},[204,153419,151415],{"class":214},[204,153421,153422,153424,153426,153428],{"class":206,"line":1714},[204,153423,151420],{"class":319},[204,153425,51523],{"class":214},[204,153427,30909],{"class":263},[204,153429,151427],{"class":214},[204,153431,153432,153434,153436,153438],{"class":206,"line":1728},[204,153433,151432],{"class":319},[204,153435,51523],{"class":214},[204,153437,30909],{"class":263},[204,153439,151439],{"class":214},[204,153441,153442,153444,153446,153448],{"class":206,"line":1733},[204,153443,151444],{"class":319},[204,153445,51523],{"class":214},[204,153447,30909],{"class":263},[204,153449,151451],{"class":214},[204,153451,153452],{"class":206,"line":1739},[204,153453,2615],{"class":214},[204,153455,153456],{"class":206,"line":1760},[204,153457,2486],{"emptyLinePlaceholder":135},[204,153459,153460,153462],{"class":206,"line":1765},[204,153461,151059],{"class":2049},[204,153463,151062],{"class":263},[204,153465,153466,153468,153470],{"class":206,"line":1779},[204,153467,30887],{"class":210},[204,153469,151472],{"class":2049},[204,153471,151475],{"class":214},[204,153473,153474,153476,153478],{"class":206,"line":1784},[204,153475,14839],{"class":210},[204,153477,151079],{"class":263},[204,153479,151484],{"class":214},[204,153481,153482,153484,153486],{"class":206,"line":1813},[204,153483,151489],{"class":214},[204,153485,151492],{"class":319},[204,153487,87922],{"class":214},[204,153489,153490,153492,153494],{"class":206,"line":1818},[204,153491,151489],{"class":214},[204,153493,62765],{"class":319},[204,153495,87922],{"class":214},[204,153497,153498,153500,153502],{"class":206,"line":1835},[204,153499,151489],{"class":214},[204,153501,69210],{"class":319},[204,153503,87922],{"class":214},[204,153505,153506,153508,153510],{"class":206,"line":1840},[204,153507,151489],{"class":214},[204,153509,151517],{"class":319},[204,153511,87922],{"class":214},[204,153513,153514],{"class":206,"line":1845},[204,153515,38212],{"class":214},[19,153517,153518],{},"管理器示意：",[196,153520,153522],{"className":30464,"code":153521,"language":30466,"meta":125,"style":125},"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",[81,153523,153524,153533,153541,153552,153556,153566,153579,153590,153597,153603,153607,153616,153625,153631,153638],{"__ignoreMap":125},[204,153525,153526,153528,153531],{"class":206,"line":207},[204,153527,14781],{"class":210},[204,153529,153530],{"class":2049}," StudentManager",[204,153532,3825],{"class":214},[204,153534,153535,153537,153539],{"class":206,"line":126},[204,153536,30887],{"class":210},[204,153538,30890],{"class":263},[204,153540,30893],{"class":214},[204,153542,153543,153545,153548,153550],{"class":206,"line":131},[204,153544,30931],{"class":263},[204,153546,153547],{"class":214},".students ",[204,153549,260],{"class":210},[204,153551,51924],{"class":214},[204,153553,153554],{"class":206,"line":1281},[204,153555,2486],{"emptyLinePlaceholder":135},[204,153557,153558,153560,153563],{"class":206,"line":1287},[204,153559,30887],{"class":210},[204,153561,153562],{"class":2049}," find_by_id",[204,153564,153565],{"class":214},"(self, student_id):\n",[204,153567,153568,153570,153572,153574,153576],{"class":206,"line":1301},[204,153569,3489],{"class":210},[204,153571,152182],{"class":214},[204,153573,26129],{"class":210},[204,153575,38959],{"class":263},[204,153577,153578],{"class":214},".students:\n",[204,153580,153581,153583,153586,153588],{"class":206,"line":1307},[204,153582,4728],{"class":210},[204,153584,153585],{"class":214}," student.student_id ",[204,153587,3035],{"class":210},[204,153589,152203],{"class":214},[204,153591,153592,153595],{"class":206,"line":1398},[204,153593,153594],{"class":210},"                return",[204,153596,152210],{"class":214},[204,153598,153599,153601],{"class":206,"line":1404},[204,153600,14839],{"class":210},[204,153602,152217],{"class":263},[204,153604,153605],{"class":206,"line":1416},[204,153606,2486],{"emptyLinePlaceholder":135},[204,153608,153609,153611,153613],{"class":206,"line":1698},[204,153610,30887],{"class":210},[204,153612,5296],{"class":2049},[204,153614,153615],{"class":214},"(self, student):\n",[204,153617,153618,153620,153622],{"class":206,"line":1703},[204,153619,2583],{"class":210},[204,153621,38959],{"class":263},[204,153623,153624],{"class":214},".find_by_id(student.student_id):\n",[204,153626,153627,153629],{"class":206,"line":1709},[204,153628,15819],{"class":210},[204,153630,125892],{"class":263},[204,153632,153633,153635],{"class":206,"line":1714},[204,153634,30931],{"class":263},[204,153636,153637],{"class":214},".students.append(student)\n",[204,153639,153640,153642],{"class":206,"line":1728},[204,153641,14839],{"class":210},[204,153643,153644],{"class":263}," True\n",[19,153646,153647],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153649,153651],{"id":153650},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[49,153653,153655],{"id":153654},"_1251-数据结构","12.5.1 数据结构",[196,153657,153659],{"className":30464,"code":153658,"language":30466,"meta":125,"style":125},"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",[81,153660,153661,153669,153700,153730,153759,153788],{"__ignoreMap":125},[204,153662,153663,153665,153667],{"class":206,"line":207},[204,153664,148510],{"class":214},[204,153666,260],{"class":210},[204,153668,55533],{"class":214},[204,153670,153671,153673,153675,153677,153679,153681,153684,153686,153689,153691,153693,153695,153698],{"class":206,"line":126},[204,153672,148430],{"class":214},[204,153674,148042],{"class":319},[204,153676,51523],{"class":214},[204,153678,148653],{"class":319},[204,153680,12522],{"class":214},[204,153682,153683],{"class":319},"\"category\"",[204,153685,51523],{"class":214},[204,153687,153688],{"class":319},"\"手机\"",[204,153690,12522],{"class":214},[204,153692,84170],{"class":319},[204,153694,51523],{"class":214},[204,153696,153697],{"class":263},"12000",[204,153699,5016],{"class":214},[204,153701,153702,153704,153706,153708,153710,153712,153714,153716,153719,153721,153723,153725,153728],{"class":206,"line":131},[204,153703,148430],{"class":214},[204,153705,148042],{"class":319},[204,153707,51523],{"class":214},[204,153709,148653],{"class":319},[204,153711,12522],{"class":214},[204,153713,153683],{"class":319},[204,153715,51523],{"class":214},[204,153717,153718],{"class":319},"\"电脑\"",[204,153720,12522],{"class":214},[204,153722,84170],{"class":319},[204,153724,51523],{"class":214},[204,153726,153727],{"class":263},"18000",[204,153729,5016],{"class":214},[204,153731,153732,153734,153736,153738,153740,153742,153744,153746,153748,153750,153752,153754,153757],{"class":206,"line":1281},[204,153733,148430],{"class":214},[204,153735,148042],{"class":319},[204,153737,51523],{"class":214},[204,153739,148674],{"class":319},[204,153741,12522],{"class":214},[204,153743,153683],{"class":319},[204,153745,51523],{"class":214},[204,153747,153688],{"class":319},[204,153749,12522],{"class":214},[204,153751,84170],{"class":319},[204,153753,51523],{"class":214},[204,153755,153756],{"class":263},"15000",[204,153758,5016],{"class":214},[204,153760,153761,153763,153765,153767,153769,153771,153773,153775,153777,153779,153781,153783,153786],{"class":206,"line":1287},[204,153762,148430],{"class":214},[204,153764,148042],{"class":319},[204,153766,51523],{"class":214},[204,153768,148674],{"class":319},[204,153770,12522],{"class":214},[204,153772,153683],{"class":319},[204,153774,51523],{"class":214},[204,153776,153718],{"class":319},[204,153778,12522],{"class":214},[204,153780,84170],{"class":319},[204,153782,51523],{"class":214},[204,153784,153785],{"class":263},"16000",[204,153787,5016],{"class":214},[204,153789,153790],{"class":206,"line":1301},[204,153791,33332],{"class":214},[49,153793,153795],{"id":153794},"_1252-按日期统计","12.5.2 按日期统计",[196,153797,153799],{"className":30464,"code":153798,"language":30466,"meta":125,"style":125},"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",[81,153800,153801,153810,153814,153825,153839,153852,153871,153875],{"__ignoreMap":125},[204,153802,153803,153806,153808],{"class":206,"line":207},[204,153804,153805],{"class":214},"daily_total ",[204,153807,260],{"class":210},[204,153809,87954],{"class":214},[204,153811,153812],{"class":206,"line":126},[204,153813,2486],{"emptyLinePlaceholder":135},[204,153815,153816,153818,153820,153822],{"class":206,"line":131},[204,153817,3111],{"class":210},[204,153819,148254],{"class":214},[204,153821,26129],{"class":210},[204,153823,153824],{"class":214}," sales:\n",[204,153826,153827,153830,153832,153835,153837],{"class":206,"line":1281},[204,153828,153829],{"class":214},"    date ",[204,153831,260],{"class":210},[204,153833,153834],{"class":214}," item[",[204,153836,148042],{"class":319},[204,153838,33332],{"class":214},[204,153840,153841,153844,153846,153848,153850],{"class":206,"line":1287},[204,153842,153843],{"class":214},"    amount ",[204,153845,260],{"class":210},[204,153847,153834],{"class":214},[204,153849,84170],{"class":319},[204,153851,33332],{"class":214},[204,153853,153854,153857,153859,153862,153864,153866,153868],{"class":206,"line":1301},[204,153855,153856],{"class":214},"    daily_total[date] ",[204,153858,260],{"class":210},[204,153860,153861],{"class":214}," daily_total.get(date, ",[204,153863,405],{"class":263},[204,153865,13801],{"class":214},[204,153867,694],{"class":210},[204,153869,153870],{"class":214}," amount\n",[204,153872,153873],{"class":206,"line":1307},[204,153874,2486],{"emptyLinePlaceholder":135},[204,153876,153877,153879],{"class":206,"line":1398},[204,153878,30501],{"class":263},[204,153880,153881],{"class":214},"(daily_total)\n",[49,153883,153885],{"id":153884},"_1253-按类别统计","12.5.3 按类别统计",[196,153887,153889],{"className":30464,"code":153888,"language":30466,"meta":125,"style":125},"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",[81,153890,153891,153900,153904,153914,153927,153939,153957,153961],{"__ignoreMap":125},[204,153892,153893,153896,153898],{"class":206,"line":207},[204,153894,153895],{"class":214},"category_total ",[204,153897,260],{"class":210},[204,153899,87954],{"class":214},[204,153901,153902],{"class":206,"line":126},[204,153903,2486],{"emptyLinePlaceholder":135},[204,153905,153906,153908,153910,153912],{"class":206,"line":131},[204,153907,3111],{"class":210},[204,153909,148254],{"class":214},[204,153911,26129],{"class":210},[204,153913,153824],{"class":214},[204,153915,153916,153919,153921,153923,153925],{"class":206,"line":1281},[204,153917,153918],{"class":214},"    category ",[204,153920,260],{"class":210},[204,153922,153834],{"class":214},[204,153924,153683],{"class":319},[204,153926,33332],{"class":214},[204,153928,153929,153931,153933,153935,153937],{"class":206,"line":1287},[204,153930,153843],{"class":214},[204,153932,260],{"class":210},[204,153934,153834],{"class":214},[204,153936,84170],{"class":319},[204,153938,33332],{"class":214},[204,153940,153941,153944,153946,153949,153951,153953,153955],{"class":206,"line":1301},[204,153942,153943],{"class":214},"    category_total[category] ",[204,153945,260],{"class":210},[204,153947,153948],{"class":214}," category_total.get(category, ",[204,153950,405],{"class":263},[204,153952,13801],{"class":214},[204,153954,694],{"class":210},[204,153956,153870],{"class":214},[204,153958,153959],{"class":206,"line":1307},[204,153960,2486],{"emptyLinePlaceholder":135},[204,153962,153963,153965],{"class":206,"line":1398},[204,153964,30501],{"class":263},[204,153966,153967],{"class":214},"(category_total)\n",[49,153969,153971],{"id":153970},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[196,153973,153975],{"className":30464,"code":153974,"language":30466,"meta":125,"style":125},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[81,153976,153977,154002],{"__ignoreMap":125},[204,153978,153979,153982,153984,153986,153989,153992,153995,153998,154000],{"class":206,"line":207},[204,153980,153981],{"class":214},"top_date, top_amount ",[204,153983,260],{"class":210},[204,153985,6038],{"class":263},[204,153987,153988],{"class":214},"(daily_total.items(), ",[204,153990,153991],{"class":5303},"key",[204,153993,153994],{"class":210},"=lambda",[204,153996,153997],{"class":214}," item: item[",[204,153999,431],{"class":263},[204,154001,4743],{"class":214},[204,154003,154004,154006],{"class":206,"line":126},[204,154005,30501],{"class":263},[204,154007,154008],{"class":214},"(top_date, top_amount)\n",[14,154010,154012],{"id":154011},"_126-绘制柱状图","12.6 绘制柱状图",[196,154014,154016],{"className":30464,"code":154015,"language":30466,"meta":125,"style":125},"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",[81,154017,154018,154032,154043,154047,154055,154067,154079,154090,154094,154098,154108,154119,154133,154138,154155,154172,154188,154192],{"__ignoreMap":125},[204,154019,154020,154022,154024,154026,154028,154030],{"class":206,"line":207},[204,154021,30823],{"class":210},[204,154023,147424],{"class":214},[204,154025,30478],{"class":210},[204,154027,147429],{"class":214},[204,154029,31469],{"class":210},[204,154031,147434],{"class":214},[204,154033,154034,154036,154038,154040],{"class":206,"line":126},[204,154035,30823],{"class":210},[204,154037,147283],{"class":214},[204,154039,30478],{"class":210},[204,154041,154042],{"class":214}," Bar\n",[204,154044,154045],{"class":206,"line":131},[204,154046,2486],{"emptyLinePlaceholder":135},[204,154048,154049,154051,154053],{"class":206,"line":1281},[204,154050,153895],{"class":214},[204,154052,260],{"class":210},[204,154054,15659],{"class":214},[204,154056,154057,154060,154062,154065],{"class":206,"line":1287},[204,154058,154059],{"class":319},"    \"手机\"",[204,154061,51523],{"class":214},[204,154063,154064],{"class":263},"27000",[204,154066,31552],{"class":214},[204,154068,154069,154072,154074,154077],{"class":206,"line":1301},[204,154070,154071],{"class":319},"    \"电脑\"",[204,154073,51523],{"class":214},[204,154075,154076],{"class":263},"34000",[204,154078,31552],{"class":214},[204,154080,154081,154084,154086,154088],{"class":206,"line":1307},[204,154082,154083],{"class":319},"    \"耳机\"",[204,154085,51523],{"class":214},[204,154087,124484],{"class":263},[204,154089,31552],{"class":214},[204,154091,154092],{"class":206,"line":1398},[204,154093,1651],{"class":214},[204,154095,154096],{"class":206,"line":1404},[204,154097,2486],{"emptyLinePlaceholder":135},[204,154099,154100,154103,154105],{"class":206,"line":1416},[204,154101,154102],{"class":214},"bar ",[204,154104,260],{"class":210},[204,154106,154107],{"class":214}," Bar()\n",[204,154109,154110,154113,154116],{"class":206,"line":1698},[204,154111,154112],{"class":214},"bar.add_xaxis(",[204,154114,154115],{"class":263},"list",[204,154117,154118],{"class":214},"(category_total.keys()))\n",[204,154120,154121,154124,154126,154128,154130],{"class":206,"line":1703},[204,154122,154123],{"class":214},"bar.add_yaxis(",[204,154125,147340],{"class":319},[204,154127,12522],{"class":214},[204,154129,154115],{"class":263},[204,154131,154132],{"class":214},"(category_total.values()))\n",[204,154134,154135],{"class":206,"line":1709},[204,154136,154137],{"class":214},"bar.set_global_opts(\n",[204,154139,154140,154142,154144,154146,154148,154150,154153],{"class":206,"line":1714},[204,154141,147518],{"class":5303},[204,154143,260],{"class":210},[204,154145,147523],{"class":214},[204,154147,51493],{"class":5303},[204,154149,260],{"class":210},[204,154151,154152],{"class":319},"\"品类销售额\"",[204,154154,38133],{"class":214},[204,154156,154157,154159,154161,154163,154165,154167,154170],{"class":206,"line":1728},[204,154158,147537],{"class":5303},[204,154160,260],{"class":210},[204,154162,147542],{"class":214},[204,154164,79896],{"class":5303},[204,154166,260],{"class":210},[204,154168,154169],{"class":319},"\"品类\"",[204,154171,38133],{"class":214},[204,154173,154174,154176,154178,154180,154182,154184,154186],{"class":206,"line":1733},[204,154175,147556],{"class":5303},[204,154177,260],{"class":210},[204,154179,147542],{"class":214},[204,154181,79896],{"class":5303},[204,154183,260],{"class":210},[204,154185,147340],{"class":319},[204,154187,38133],{"class":214},[204,154189,154190],{"class":206,"line":1739},[204,154191,221],{"class":214},[204,154193,154194,154197,154200],{"class":206,"line":1760},[204,154195,154196],{"class":214},"bar.render(",[204,154198,154199],{"class":319},"\"category_sales.html\"",[204,154201,221],{"class":214},[14,154203,154205],{"id":154204},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154207,154208],{},"时间线适合展示不同日期、月份、年份的数据变化。",[196,154210,154212],{"className":30464,"code":154211,"language":30466,"meta":125,"style":125},"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",[81,154213,154214,154228,154239,154243,154251,154275,154298,154323,154327,154331,154341,154345,154356,154365,154375,154389,154420,154425,154429],{"__ignoreMap":125},[204,154215,154216,154218,154220,154222,154224,154226],{"class":206,"line":207},[204,154217,30823],{"class":210},[204,154219,147424],{"class":214},[204,154221,30478],{"class":210},[204,154223,147429],{"class":214},[204,154225,31469],{"class":210},[204,154227,147434],{"class":214},[204,154229,154230,154232,154234,154236],{"class":206,"line":126},[204,154231,30823],{"class":210},[204,154233,147283],{"class":214},[204,154235,30478],{"class":210},[204,154237,154238],{"class":214}," Bar, Timeline\n",[204,154240,154241],{"class":206,"line":131},[204,154242,2486],{"emptyLinePlaceholder":135},[204,154244,154245,154247,154249],{"class":206,"line":1281},[204,154246,101743],{"class":214},[204,154248,260],{"class":210},[204,154250,15659],{"class":214},[204,154252,154253,154256,154259,154261,154263,154265,154267,154269,154271,154273],{"class":206,"line":1287},[204,154254,154255],{"class":319},"    \"2024-10-01\"",[204,154257,154258],{"class":214},": {",[204,154260,153688],{"class":319},[204,154262,51523],{"class":214},[204,154264,153697],{"class":263},[204,154266,12522],{"class":214},[204,154268,153718],{"class":319},[204,154270,51523],{"class":214},[204,154272,153727],{"class":263},[204,154274,5016],{"class":214},[204,154276,154277,154280,154282,154284,154286,154288,154290,154292,154294,154296],{"class":206,"line":1301},[204,154278,154279],{"class":319},"    \"2024-10-02\"",[204,154281,154258],{"class":214},[204,154283,153688],{"class":319},[204,154285,51523],{"class":214},[204,154287,153756],{"class":263},[204,154289,12522],{"class":214},[204,154291,153718],{"class":319},[204,154293,51523],{"class":214},[204,154295,153785],{"class":263},[204,154297,5016],{"class":214},[204,154299,154300,154303,154305,154307,154309,154312,154314,154316,154318,154321],{"class":206,"line":1307},[204,154301,154302],{"class":319},"    \"2024-10-03\"",[204,154304,154258],{"class":214},[204,154306,153688],{"class":319},[204,154308,51523],{"class":214},[204,154310,154311],{"class":263},"17000",[204,154313,12522],{"class":214},[204,154315,153718],{"class":319},[204,154317,51523],{"class":214},[204,154319,154320],{"class":263},"19000",[204,154322,5016],{"class":214},[204,154324,154325],{"class":206,"line":1398},[204,154326,1651],{"class":214},[204,154328,154329],{"class":206,"line":1404},[204,154330,2486],{"emptyLinePlaceholder":135},[204,154332,154333,154336,154338],{"class":206,"line":1416},[204,154334,154335],{"class":214},"timeline ",[204,154337,260],{"class":210},[204,154339,154340],{"class":214}," Timeline()\n",[204,154342,154343],{"class":206,"line":1698},[204,154344,2486],{"emptyLinePlaceholder":135},[204,154346,154347,154349,154352,154354],{"class":206,"line":1703},[204,154348,3111],{"class":210},[204,154350,154351],{"class":214}," date, category_data ",[204,154353,26129],{"class":210},[204,154355,149193],{"class":214},[204,154357,154358,154361,154363],{"class":206,"line":1709},[204,154359,154360],{"class":214},"    bar ",[204,154362,260],{"class":210},[204,154364,154107],{"class":214},[204,154366,154367,154370,154372],{"class":206,"line":1714},[204,154368,154369],{"class":214},"    bar.add_xaxis(",[204,154371,154115],{"class":263},[204,154373,154374],{"class":214},"(category_data.keys()))\n",[204,154376,154377,154380,154382,154384,154386],{"class":206,"line":1728},[204,154378,154379],{"class":214},"    bar.add_yaxis(",[204,154381,147340],{"class":319},[204,154383,12522],{"class":214},[204,154385,154115],{"class":263},[204,154387,154388],{"class":214},"(category_data.values()))\n",[204,154390,154391,154394,154397,154399,154401,154403,154405,154407,154409,154411,154413,154415,154418],{"class":206,"line":1733},[204,154392,154393],{"class":214},"    bar.set_global_opts(",[204,154395,154396],{"class":5303},"title_opts",[204,154398,260],{"class":210},[204,154400,147523],{"class":214},[204,154402,51493],{"class":5303},[204,154404,260],{"class":210},[204,154406,267],{"class":210},[204,154408,464],{"class":319},[204,154410,1109],{"class":263},[204,154412,74012],{"class":214},[204,154414,1159],{"class":263},[204,154416,154417],{"class":319},"销售额\"",[204,154419,30583],{"class":214},[204,154421,154422],{"class":206,"line":1739},[204,154423,154424],{"class":214},"    timeline.add(bar, date)\n",[204,154426,154427],{"class":206,"line":1760},[204,154428,2486],{"emptyLinePlaceholder":135},[204,154430,154431,154434,154437],{"class":206,"line":1765},[204,154432,154433],{"class":214},"timeline.render(",[204,154435,154436],{"class":319},"\"timeline_sales.html\"",[204,154438,221],{"class":214},[14,154440,154442],{"id":154441},"_128-绘制地图","12.8 绘制地图",[19,154444,154445],{},"地图适合展示地区数据。",[196,154447,154449],{"className":30464,"code":154448,"language":30466,"meta":125,"style":125},"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",[81,154450,154451,154465,154476,154480,154488,154501,154513,154526,154539,154543,154547,154557,154572,154577,154594,154613,154617],{"__ignoreMap":125},[204,154452,154453,154455,154457,154459,154461,154463],{"class":206,"line":207},[204,154454,30823],{"class":210},[204,154456,147424],{"class":214},[204,154458,30478],{"class":210},[204,154460,147429],{"class":214},[204,154462,31469],{"class":210},[204,154464,147434],{"class":214},[204,154466,154467,154469,154471,154473],{"class":206,"line":126},[204,154468,30823],{"class":210},[204,154470,147283],{"class":214},[204,154472,30478],{"class":210},[204,154474,154475],{"class":214}," Map\n",[204,154477,154478],{"class":206,"line":131},[204,154479,2486],{"emptyLinePlaceholder":135},[204,154481,154482,154484,154486],{"class":206,"line":1281},[204,154483,101743],{"class":214},[204,154485,260],{"class":210},[204,154487,55533],{"class":214},[204,154489,154490,154493,154495,154497,154499],{"class":206,"line":1287},[204,154491,154492],{"class":214},"    (",[204,154494,69355],{"class":319},[204,154496,12522],{"class":214},[204,154498,1030],{"class":263},[204,154500,38133],{"class":214},[204,154502,154503,154505,154507,154509,154511],{"class":206,"line":1301},[204,154504,154492],{"class":214},[204,154506,69375],{"class":319},[204,154508,12522],{"class":214},[204,154510,147357],{"class":263},[204,154512,38133],{"class":214},[204,154514,154515,154517,154520,154522,154524],{"class":206,"line":1307},[204,154516,154492],{"class":214},[204,154518,154519],{"class":319},"\"广东\"",[204,154521,12522],{"class":214},[204,154523,1808],{"class":263},[204,154525,38133],{"class":214},[204,154527,154528,154530,154533,154535,154537],{"class":206,"line":1398},[204,154529,154492],{"class":214},[204,154531,154532],{"class":319},"\"浙江\"",[204,154534,12522],{"class":214},[204,154536,147362],{"class":263},[204,154538,38133],{"class":214},[204,154540,154541],{"class":206,"line":1404},[204,154542,33332],{"class":214},[204,154544,154545],{"class":206,"line":1416},[204,154546,2486],{"emptyLinePlaceholder":135},[204,154548,154549,154552,154554],{"class":206,"line":1698},[204,154550,154551],{"class":214},"map_chart ",[204,154553,260],{"class":210},[204,154555,154556],{"class":214}," Map()\n",[204,154558,154559,154562,154564,154567,154570],{"class":206,"line":1703},[204,154560,154561],{"class":214},"map_chart.add(",[204,154563,147340],{"class":319},[204,154565,154566],{"class":214},", data, ",[204,154568,154569],{"class":319},"\"china\"",[204,154571,221],{"class":214},[204,154573,154574],{"class":206,"line":1709},[204,154575,154576],{"class":214},"map_chart.set_global_opts(\n",[204,154578,154579,154581,154583,154585,154587,154589,154592],{"class":206,"line":1714},[204,154580,147518],{"class":5303},[204,154582,260],{"class":210},[204,154584,147523],{"class":214},[204,154586,51493],{"class":5303},[204,154588,260],{"class":210},[204,154590,154591],{"class":319},"\"地区销售额\"",[204,154593,38133],{"class":214},[204,154595,154596,154599,154601,154604,154607,154609,154611],{"class":206,"line":1728},[204,154597,154598],{"class":5303},"    visualmap_opts",[204,154600,260],{"class":210},[204,154602,154603],{"class":214},"opts.VisualMapOpts(",[204,154605,154606],{"class":5303},"max_",[204,154608,260],{"class":210},[204,154610,1808],{"class":263},[204,154612,38133],{"class":214},[204,154614,154615],{"class":206,"line":1733},[204,154616,221],{"class":214},[204,154618,154619,154622,154625],{"class":206,"line":1739},[204,154620,154621],{"class":214},"map_chart.render(",[204,154623,154624],{"class":319},"\"map_sales.html\"",[204,154626,221],{"class":214},[19,154628,154629],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154631,154633],{"id":154632},"_129-项目拆分建议","12.9 项目拆分建议",[19,154635,154636],{},"当代码超过一个文件时，可以这样组织：",[196,154638,154641],{"className":154639,"code":154640,"language":5274,"meta":125},[5272],"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",[81,154642,154640],{"__ignoreMap":125},[19,154644,154645],{},"职责：",[161,154647,154648,154654,154660,154666],{},[71,154649,154650,154653],{},[81,154651,154652],{},"main.py","：程序入口。",[71,154655,154656,154659],{},[81,154657,154658],{},"file_utils.py","：读写 JSON。",[71,154661,154662,154665],{},[81,154663,154664],{},"sales_service.py","：统计销售数据。",[71,154667,154668,154671],{},[81,154669,154670],{},"chart_builder.py","：生成图表。",[14,154673,154675],{"id":154674},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154677,154678],{},"语法基础：",[161,154680,154681,154684,154687,154690],{},[71,154682,154683],{},"会写变量、注释、输入输出。",[71,154685,154686],{},"会使用 int、float、str、bool。",[71,154688,154689],{},"会做类型转换。",[71,154691,154692],{},"会使用 f-string 格式化输出。",[19,154694,154695],{},"流程控制：",[161,154697,154698,154704,154710,154718],{},[71,154699,154700,154701,28471],{},"会写 ",[81,154702,154703],{},"if elif else",[71,154705,154700,154706,43,154708,28471],{},[81,154707,108748],{},[81,154709,3111],{},[71,154711,154712,154713,43,154715,28471],{},"理解 ",[81,154714,2139],{},[81,154716,154717],{},"continue",[71,154719,154720],{},"能写嵌套循环。",[19,154722,154723],{},"函数：",[161,154725,154726,154729,154732,154735],{},[71,154727,154728],{},"会定义和调用函数。",[71,154730,154731],{},"理解参数和返回值。",[71,154733,154734],{},"知道局部变量和全局变量。",[71,154736,154737],{},"会使用默认参数、关键字参数、不定长参数。",[19,154739,154740],{},"容器：",[161,154742,154743,154746,154749,154752,154755],{},[71,154744,154745],{},"会使用列表增删改查。",[71,154747,154748],{},"会遍历列表、字典。",[71,154750,154751],{},"会使用切片。",[71,154753,154754],{},"会用集合去重。",[71,154756,154757],{},"会处理列表嵌套字典。",[19,154759,154760],{},"文件和模块：",[161,154762,154763,154766,154769,154772,154775],{},[71,154764,154765],{},"会读写文本文件。",[71,154767,154768],{},"会读写 JSON。",[71,154770,154771],{},"会捕获常见异常。",[71,154773,154774],{},"会导入模块和第三方包。",[71,154776,154777],{},"会创建简单包结构。",[19,154779,154780],{},"项目能力：",[161,154782,154783,154786,154789,154792,154795],{},[71,154784,154785],{},"能把代码拆成函数。",[71,154787,154788],{},"能把数据保存到文件。",[71,154790,154791],{},"能处理用户输入错误。",[71,154793,154794],{},"能写一个完整菜单程序。",[71,154796,154797],{},"能用 pyecharts 生成图表。",[14,154799,154801],{"id":154800},"_1211-推荐练习顺序","12.11 推荐练习顺序",[161,154803,154804,154807,154810,154813,154816,154819,154822,154825],{},[71,154805,154806],{},"猜数字游戏。",[71,154808,154809],{},"ATM 菜单程序。",[71,154811,154812],{},"学生成绩统计。",[71,154814,154815],{},"学生管理系统函数版。",[71,154817,154818],{},"学生管理系统文件持久化版。",[71,154820,154821],{},"学生管理系统面向对象版。",[71,154823,154824],{},"销售数据统计。",[71,154826,154827],{},"销售数据可视化。",[14,154829,154831],{"id":154830},"_1212-常见学习误区","12.12 常见学习误区",[161,154833,154834,154837,154840,154843,154846,154849,154852],{},[71,154835,154836],{},"只看视频不敲代码。",[71,154838,154839],{},"一报错就复制错误去搜，不先读报错位置。",[71,154841,154842],{},"变量名随便写，后续自己看不懂。",[71,154844,154845],{},"所有代码都写在一个文件一个函数里。",[71,154847,154848],{},"不保存练习代码，复习时没有材料。",[71,154850,154851],{},"还没掌握列表字典就急着学框架。",[71,154853,154854],{},"不会读官方文档，只依赖教程。",[14,154856,154858],{"id":154857},"_1213-如何读报错","12.13 如何读报错",[19,154860,154861],{},"报错通常从下往上看最后几行。",[19,154863,15222],{},[196,154865,154868],{"className":154866,"code":154867,"language":5274,"meta":125},[5272],"ValueError: invalid literal for int() with base 10: 'abc'\n",[81,154869,154867],{"__ignoreMap":125},[19,154871,24686],{},[161,154873,154874,154880,154890],{},[71,154875,154876,154877,28471],{},"异常类型是 ",[81,154878,154879],{},"ValueError",[71,154881,107430,154882,154885,154886,154889],{},[81,154883,154884],{},"int()"," 无法把 ",[81,154887,154888],{},"'abc'"," 转成整数。",[71,154891,154892],{},"应该检查输入内容或增加异常处理。",[19,154894,154895],{},"再看文件名和行号：",[196,154897,154900],{"className":154898,"code":154899,"language":5274,"meta":125},[5272],"File \"main.py\", line 10, in \u003Cmodule>\n",[81,154901,154899],{"__ignoreMap":125},[19,154903,154904,154905,154907],{},"表示错误发生在 ",[81,154906,154652],{}," 第 10 行。",[14,154909,154911],{"id":154910},"_1214-后续学习方向","12.14 后续学习方向",[19,154913,154914],{},"Python 基础完成后，可以按兴趣选择方向：",[161,154916,154917,154929,154938,154950,154961,154970,154980],{},[71,154918,154919,154920,426,154923,426,154926,28471],{},"自动化办公：",[81,154921,154922],{},"openpyxl",[81,154924,154925],{},"python-docx",[81,154927,154928],{},"pdfplumber",[71,154930,154931,154932,426,154934,426,154936,28471],{},"数据分析：",[81,154933,100712],{},[81,154935,146230],{},[81,154937,146238],{},[71,154939,154940,154941,426,154944,426,154947,28471],{},"Web 后端：",[81,154942,154943],{},"Flask",[81,154945,154946],{},"FastAPI",[81,154948,154949],{},"Django",[71,154951,154952,154953,426,154955,426,154958,28471],{},"爬虫：",[81,154954,146215],{},[81,154956,154957],{},"BeautifulSoup",[81,154959,154960],{},"Scrapy",[71,154962,154963,154964,426,154966,154969],{},"测试开发：",[81,154965,146262],{},[81,154967,154968],{},"selenium","、接口测试。",[71,154971,154972,154973,426,154975,426,154977,28471],{},"人工智能：",[81,154974,100712],{},[81,154976,146230],{},[81,154978,154979],{},"pytorch",[71,154981,154982,154983,426,154985,426,154988,28471],{},"运维脚本：",[81,154984,145831],{},[81,154986,154987],{},"subprocess",[81,154989,154990],{},"paramiko",[19,154992,154993],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,154995,154997],{"id":154996},"_1215-结课练习","12.15 结课练习",[161,154999,155000,155003,155006,155009,155012,155015,155018,155021],{},[71,155001,155002],{},"完成函数版学生管理系统。",[71,155004,155005],{},"给学生管理系统增加 JSON 持久化。",[71,155007,155008],{},"给学生管理系统增加异常处理。",[71,155010,155011],{},"把学生管理系统改成面向对象版。",[71,155013,155014],{},"使用 pyecharts 绘制学生成绩柱状图。",[71,155016,155017],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[71,155019,155020],{},"按品类统计销售额并绘制柱状图。",[71,155022,155023],{},"写一份自己的 Python 学习路线图。",[5213,155025,155026],{},"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":125,"searchDepth":126,"depth":126,"links":155028},[155029,155030,155033,155034,155035,155041,155042,155043,155044,155045,155046,155047,155048,155049,155050],{"id":151745,"depth":126,"text":151746},{"id":151795,"depth":126,"text":151796,"children":155031},[155032],{"id":151799,"depth":131,"text":151800},{"id":151838,"depth":126,"text":151839},{"id":153312,"depth":126,"text":153313},{"id":153650,"depth":126,"text":153651,"children":155036},[155037,155038,155039,155040],{"id":153654,"depth":131,"text":153655},{"id":153794,"depth":131,"text":153795},{"id":153884,"depth":131,"text":153885},{"id":153970,"depth":131,"text":153971},{"id":154011,"depth":126,"text":154012},{"id":154204,"depth":126,"text":154205},{"id":154441,"depth":126,"text":154442},{"id":154632,"depth":126,"text":154633},{"id":154674,"depth":126,"text":154675},{"id":154800,"depth":126,"text":154801},{"id":154830,"depth":126,"text":154831},{"id":154857,"depth":126,"text":154858},{"id":154910,"depth":126,"text":154911},{"id":154996,"depth":126,"text":154997},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151737,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155057,"title":155058,"body":155059,"description":132,"extension":133,"meta":157528,"navigation":135,"path":157529,"seo":157530,"stem":157531,"__hash__":157532},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155060,"toc":157503},[155061,155064,155068,155071,155074,155094,155097,155120,155123,155126,155148,155151,155173,155177,155180,155220,155223,155344,155348,155351,155391,155394,155418,155421,155425,155428,155442,155475,155478,155513,155516,155539,155542,155575,155578,155580,155586,155661,155664,155670,155687,155727,155731,155734,155780,155782,155820,155823,155858,155861,155896,155899,155931,155934,155953,155957,155961,156074,156076,156151,156155,156201,156204,156230,156239,156243,156246,156309,156317,156345,156349,156389,156454,156458,156461,156500,156503,156548,156551,156612,156616,156643,156646,156674,156677,156681,156685,156750,156753,156791,156794,156826,156830,156929,156933,156936,157009,157012,157060,157064,157070,157110,157113,157160,157163,157212,157216,157218,157232,157234,157415,157419,157446,157466,157473,157477,157494,157500],[10,155062,155058],{"id":155063},"_2-基础语法变量与字符串",[14,155065,155067],{"id":155066},"_21-注释","2.1 注释",[19,155069,155070],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155072,155073],{},"单行注释：",[196,155075,155077],{"className":30464,"code":155076,"language":30466,"meta":125,"style":125},"# 这是单行注释\nprint(\"hello\")\n",[81,155078,155079,155084],{"__ignoreMap":125},[204,155080,155081],{"class":206,"line":207},[204,155082,155083],{"class":273},"# 这是单行注释\n",[204,155085,155086,155088,155090,155092],{"class":206,"line":126},[204,155087,30501],{"class":263},[204,155089,215],{"class":214},[204,155091,5931],{"class":319},[204,155093,221],{"class":214},[19,155095,155096],{},"多行说明常用三引号：",[196,155098,155100],{"className":30464,"code":155099,"language":30466,"meta":125,"style":125},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[81,155101,155102,155106,155111,155116],{"__ignoreMap":125},[204,155103,155104],{"class":206,"line":207},[204,155105,95784],{"class":319},[204,155107,155108],{"class":206,"line":126},[204,155109,155110],{"class":319},"这是多行说明。\n",[204,155112,155113],{"class":206,"line":131},[204,155114,155115],{"class":319},"常用于文件顶部说明、函数说明等。\n",[204,155117,155118],{"class":206,"line":1281},[204,155119,95784],{"class":319},[19,155121,155122],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155124,155125],{},"不好：",[196,155127,155129],{"className":30464,"code":155128,"language":30466,"meta":125,"style":125},"# age 加 1\nage = age + 1\n",[81,155130,155131,155136],{"__ignoreMap":125},[204,155132,155133],{"class":206,"line":207},[204,155134,155135],{"class":273},"# age 加 1\n",[204,155137,155138,155140,155142,155144,155146],{"class":206,"line":126},[204,155139,146591],{"class":214},[204,155141,260],{"class":210},[204,155143,15794],{"class":214},[204,155145,694],{"class":210},[204,155147,55785],{"class":263},[19,155149,155150],{},"较好：",[196,155152,155154],{"className":30464,"code":155153,"language":30466,"meta":125,"style":125},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[81,155155,155156,155161],{"__ignoreMap":125},[204,155157,155158],{"class":206,"line":207},[204,155159,155160],{"class":273},"# 用户过完生日后，年龄增加一岁\n",[204,155162,155163,155165,155167,155169,155171],{"class":206,"line":126},[204,155164,146591],{"class":214},[204,155166,260],{"class":210},[204,155168,15794],{"class":214},[204,155170,694],{"class":210},[204,155172,55785],{"class":263},[14,155174,155176],{"id":155175},"_22-字面量","2.2 字面量",[19,155178,155179],{},"字面量就是代码中直接写出来的数据。",[196,155181,155183],{"className":30464,"code":155182,"language":30466,"meta":125,"style":125},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[81,155184,155185,155192,155199,155206,155213],{"__ignoreMap":125},[204,155186,155187,155189],{"class":206,"line":207},[204,155188,524],{"class":263},[204,155190,155191],{"class":273},"          # 整数\n",[204,155193,155194,155196],{"class":206,"line":126},[204,155195,264],{"class":263},[204,155197,155198],{"class":273},"         # 小数\n",[204,155200,155201,155203],{"class":206,"line":131},[204,155202,5931],{"class":319},[204,155204,155205],{"class":273},"      # 字符串\n",[204,155207,155208,155210],{"class":206,"line":1281},[204,155209,31562],{"class":263},[204,155211,155212],{"class":273},"         # 布尔值\n",[204,155214,155215,155217],{"class":206,"line":1287},[204,155216,95772],{"class":263},[204,155218,155219],{"class":273},"         # 空值\n",[19,155221,155222],{},"常见字面量类型：",[352,155224,155225,155235],{},[355,155226,155227],{},[358,155228,155229,155231,155233],{},[361,155230,23824],{},[361,155232,27578],{},[361,155234,25955],{},[398,155236,155237,155248,155259,155270,155282,155294,155306,155319,155331],{},[358,155238,155239,155241,155245],{},[403,155240,218],{},[403,155242,155243],{},[81,155244,524],{},[403,155246,155247],{},"整数",[358,155249,155250,155252,155256],{},[403,155251,254],{},[403,155253,155254],{},[81,155255,264],{},[403,155257,155258],{},"浮点数",[358,155260,155261,155263,155267],{},[403,155262,1386],{},[403,155264,155265],{},[81,155266,5931],{},[403,155268,155269],{},"字符串",[358,155271,155272,155274,155280],{},[403,155273,1441],{},[403,155275,155276,426,155278],{},[81,155277,31562],{},[81,155279,34073],{},[403,155281,66101],{},[358,155283,155284,155287,155291],{},[403,155285,155286],{},"NoneType",[403,155288,155289],{},[81,155290,95772],{},[403,155292,155293],{},"空值",[358,155295,155296,155298,155303],{},[403,155297,154115],{},[403,155299,155300],{},[81,155301,155302],{},"[1, 2, 3]",[403,155304,155305],{},"列表",[358,155307,155308,155311,155316],{},[403,155309,155310],{},"tuple",[403,155312,155313],{},[81,155314,155315],{},"(1, 2, 3)",[403,155317,155318],{},"元组",[358,155320,155321,155323,155328],{},[403,155322,114631],{},[403,155324,155325],{},[81,155326,155327],{},"{\"name\": \"张三\"}",[403,155329,155330],{},"字典",[358,155332,155333,155336,155341],{},[403,155334,155335],{},"set",[403,155337,155338],{},[81,155339,155340],{},"{1, 2, 3}",[403,155342,155343],{},"集合",[14,155345,155347],{"id":155346},"_23-变量","2.3 变量",[19,155349,155350],{},"变量是保存数据的名字。",[196,155352,155354],{"className":30464,"code":155353,"language":30466,"meta":125,"style":125},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[81,155355,155356,155364,155372,155382],{"__ignoreMap":125},[204,155357,155358,155360,155362],{"class":206,"line":207},[204,155359,146581],{"class":214},[204,155361,260],{"class":210},[204,155363,149398],{"class":319},[204,155365,155366,155368,155370],{"class":206,"line":126},[204,155367,146591],{"class":214},[204,155369,260],{"class":210},[204,155371,146596],{"class":263},[204,155373,155374,155377,155379],{"class":206,"line":131},[204,155375,155376],{"class":214},"height ",[204,155378,260],{"class":210},[204,155380,155381],{"class":263}," 1.75\n",[204,155383,155384,155387,155389],{"class":206,"line":1281},[204,155385,155386],{"class":214},"is_student ",[204,155388,260],{"class":210},[204,155390,153644],{"class":263},[19,155392,155393],{},"Python 的变量不需要提前声明类型：",[196,155395,155397],{"className":30464,"code":155396,"language":30466,"meta":125,"style":125},"score = 100\nscore = \"满分\"\n",[81,155398,155399,155409],{"__ignoreMap":125},[204,155400,155401,155404,155406],{"class":206,"line":207},[204,155402,155403],{"class":214},"score ",[204,155405,260],{"class":210},[204,155407,155408],{"class":263}," 100\n",[204,155410,155411,155413,155415],{"class":206,"line":126},[204,155412,155403],{"class":214},[204,155414,260],{"class":210},[204,155416,155417],{"class":319}," \"满分\"\n",[19,155419,155420],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155422,155424],{"id":155423},"_24-变量命名规则","2.4 变量命名规则",[19,155426,155427],{},"硬性规则：",[161,155429,155430,155433,155436,155439],{},[71,155431,155432],{},"只能由字母、数字、下划线组成。",[71,155434,155435],{},"不能以数字开头。",[71,155437,155438],{},"不能使用 Python 关键字。",[71,155440,155441],{},"区分大小写。",[196,155443,155445],{"className":30464,"code":155444,"language":30466,"meta":125,"style":125},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[81,155446,155447,155456,155465],{"__ignoreMap":125},[204,155448,155449,155452,155454],{"class":206,"line":207},[204,155450,155451],{"class":214},"user_name ",[204,155453,260],{"class":210},[204,155455,146586],{"class":319},[204,155457,155458,155461,155463],{"class":206,"line":126},[204,155459,155460],{"class":214},"age2 ",[204,155462,260],{"class":210},[204,155464,146596],{"class":263},[204,155466,155467,155470,155472],{"class":206,"line":131},[204,155468,155469],{"class":214},"_token ",[204,155471,260],{"class":210},[204,155473,155474],{"class":319}," \"abc\"\n",[19,155476,155477],{},"错误写法：",[196,155479,155481],{"className":30464,"code":155480,"language":30466,"meta":125,"style":125},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[81,155482,155483,155492,155504],{"__ignoreMap":125},[204,155484,155485,155488,155490],{"class":206,"line":207},[204,155486,155487],{"class":77489},"2age",[204,155489,13651],{"class":210},[204,155491,146596],{"class":263},[204,155493,155494,155496,155498,155500,155502],{"class":206,"line":126},[204,155495,131668],{"class":214},[204,155497,745],{"class":210},[204,155499,146581],{"class":214},[204,155501,260],{"class":210},[204,155503,146586],{"class":319},[204,155505,155506,155508,155510],{"class":206,"line":131},[204,155507,14781],{"class":210},[204,155509,13651],{"class":210},[204,155511,155512],{"class":319}," \"一班\"\n",[19,155514,155515],{},"查看关键字：",[196,155517,155519],{"className":30464,"code":155518,"language":30466,"meta":125,"style":125},"import keyword\n\nprint(keyword.kwlist)\n",[81,155520,155521,155528,155532],{"__ignoreMap":125},[204,155522,155523,155525],{"class":206,"line":207},[204,155524,30478],{"class":210},[204,155526,155527],{"class":214}," keyword\n",[204,155529,155530],{"class":206,"line":126},[204,155531,2486],{"emptyLinePlaceholder":135},[204,155533,155534,155536],{"class":206,"line":131},[204,155535,30501],{"class":263},[204,155537,155538],{"class":214},"(keyword.kwlist)\n",[19,155540,155541],{},"推荐命名风格：",[196,155543,155545],{"className":30464,"code":155544,"language":30466,"meta":125,"style":125},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[81,155546,155547,155556,155566],{"__ignoreMap":125},[204,155548,155549,155552,155554],{"class":206,"line":207},[204,155550,155551],{"class":214},"student_name ",[204,155553,260],{"class":210},[204,155555,149398],{"class":319},[204,155557,155558,155561,155563],{"class":206,"line":126},[204,155559,155560],{"class":214},"total_price ",[204,155562,260],{"class":210},[204,155564,155565],{"class":263}," 99.8\n",[204,155567,155568,155571,155573],{"class":206,"line":131},[204,155569,155570],{"class":214},"is_finished ",[204,155572,260],{"class":210},[204,155574,125892],{"class":263},[19,155576,155577],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155579,50818],{"id":50817},[19,155581,104451,155582,155585],{},[81,155583,155584],{},"type()"," 查看数据类型：",[196,155587,155589],{"className":30464,"code":155588,"language":30466,"meta":125,"style":125},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[81,155590,155591,155605,155619,155633,155647],{"__ignoreMap":125},[204,155592,155593,155595,155597,155599,155601,155603],{"class":206,"line":207},[204,155594,30501],{"class":263},[204,155596,215],{"class":214},[204,155598,103192],{"class":263},[204,155600,215],{"class":214},[204,155602,524],{"class":263},[204,155604,30583],{"class":214},[204,155606,155607,155609,155611,155613,155615,155617],{"class":206,"line":126},[204,155608,30501],{"class":263},[204,155610,215],{"class":214},[204,155612,103192],{"class":263},[204,155614,215],{"class":214},[204,155616,264],{"class":263},[204,155618,30583],{"class":214},[204,155620,155621,155623,155625,155627,155629,155631],{"class":206,"line":131},[204,155622,30501],{"class":263},[204,155624,215],{"class":214},[204,155626,103192],{"class":263},[204,155628,215],{"class":214},[204,155630,5931],{"class":319},[204,155632,30583],{"class":214},[204,155634,155635,155637,155639,155641,155643,155645],{"class":206,"line":1281},[204,155636,30501],{"class":263},[204,155638,215],{"class":214},[204,155640,103192],{"class":263},[204,155642,215],{"class":214},[204,155644,31562],{"class":263},[204,155646,30583],{"class":214},[204,155648,155649,155651,155653,155655,155657,155659],{"class":206,"line":1287},[204,155650,30501],{"class":263},[204,155652,215],{"class":214},[204,155654,103192],{"class":263},[204,155656,215],{"class":214},[204,155658,95772],{"class":263},[204,155660,30583],{"class":214},[19,155662,155663],{},"输出类似：",[196,155665,155668],{"className":155666,"code":155667,"language":5274,"meta":125},[5272],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[81,155669,155667],{"__ignoreMap":125},[19,155671,9112,155672,107368,155674,155676,155677,155679,155680,21587,155682,155679,155684,155686],{},[81,155673,1441],{},[81,155675,218],{}," 的子类，",[81,155678,31562],{}," 可以当作 ",[81,155681,431],{},[81,155683,34073],{},[81,155685,405],{},"，但业务代码中不要滥用。",[196,155688,155690],{"className":30464,"code":155689,"language":30466,"meta":125,"style":125},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[81,155691,155692,155710],{"__ignoreMap":125},[204,155693,155694,155696,155698,155700,155702,155704,155707],{"class":206,"line":207},[204,155695,30501],{"class":263},[204,155697,215],{"class":214},[204,155699,31562],{"class":263},[204,155701,45652],{"class":210},[204,155703,25205],{"class":263},[204,155705,155706],{"class":214},")   ",[204,155708,155709],{"class":273},"# 2\n",[204,155711,155712,155714,155716,155718,155720,155722,155724],{"class":206,"line":126},[204,155713,30501],{"class":263},[204,155715,215],{"class":214},[204,155717,34073],{"class":263},[204,155719,45652],{"class":210},[204,155721,25205],{"class":263},[204,155723,45894],{"class":214},[204,155725,155726],{"class":273},"# 1\n",[14,155728,155730],{"id":155729},"_26-类型转换","2.6 类型转换",[19,155732,155733],{},"常用转换函数：",[196,155735,155737],{"className":30464,"code":155736,"language":30466,"meta":125,"style":125},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[81,155738,155739,155749,155760,155770],{"__ignoreMap":125},[204,155740,155741,155743,155745,155747],{"class":206,"line":207},[204,155742,218],{"class":263},[204,155744,215],{"class":214},[204,155746,54402],{"class":319},[204,155748,221],{"class":214},[204,155750,155751,155753,155755,155758],{"class":206,"line":126},[204,155752,254],{"class":263},[204,155754,215],{"class":214},[204,155756,155757],{"class":319},"\"3.14\"",[204,155759,221],{"class":214},[204,155761,155762,155764,155766,155768],{"class":206,"line":131},[204,155763,1386],{"class":263},[204,155765,215],{"class":214},[204,155767,524],{"class":263},[204,155769,221],{"class":214},[204,155771,155772,155774,155776,155778],{"class":206,"line":1281},[204,155773,1441],{"class":263},[204,155775,215],{"class":214},[204,155777,431],{"class":263},[204,155779,221],{"class":214},[19,155781,15222],{},[196,155783,155785],{"className":30464,"code":155784,"language":30466,"meta":125,"style":125},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[81,155786,155787,155796,155807],{"__ignoreMap":125},[204,155788,155789,155791,155793],{"class":206,"line":207},[204,155790,146591],{"class":214},[204,155792,260],{"class":210},[204,155794,155795],{"class":319}," \"18\"\n",[204,155797,155798,155800,155802,155804],{"class":206,"line":126},[204,155799,146591],{"class":214},[204,155801,260],{"class":210},[204,155803,2468],{"class":263},[204,155805,155806],{"class":214},"(age)\n",[204,155808,155809,155811,155814,155816,155818],{"class":206,"line":131},[204,155810,30501],{"class":263},[204,155812,155813],{"class":214},"(age ",[204,155815,694],{"class":210},[204,155817,25205],{"class":263},[204,155819,221],{"class":214},[19,155821,155822],{},"输入得到的内容永远是字符串：",[196,155824,155826],{"className":30464,"code":155825,"language":30466,"meta":125,"style":125},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[81,155827,155828,155844],{"__ignoreMap":125},[204,155829,155830,155833,155835,155837,155839,155842],{"class":206,"line":207},[204,155831,155832],{"class":214},"num ",[204,155834,260],{"class":210},[204,155836,60691],{"class":263},[204,155838,215],{"class":214},[204,155840,155841],{"class":319},"\"请输入数字:\"",[204,155843,221],{"class":214},[204,155845,155846,155848,155850,155852,155855],{"class":206,"line":126},[204,155847,30501],{"class":263},[204,155849,215],{"class":214},[204,155851,103192],{"class":263},[204,155853,155854],{"class":214},"(num))  ",[204,155856,155857],{"class":273},"# str\n",[19,155859,155860],{},"如果要做数学运算，必须转换：",[196,155862,155864],{"className":30464,"code":155863,"language":30466,"meta":125,"style":125},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[81,155865,155866,155884],{"__ignoreMap":125},[204,155867,155868,155870,155872,155874,155876,155878,155880,155882],{"class":206,"line":207},[204,155869,155832],{"class":214},[204,155871,260],{"class":210},[204,155873,2468],{"class":263},[204,155875,215],{"class":214},[204,155877,53907],{"class":263},[204,155879,215],{"class":214},[204,155881,155841],{"class":319},[204,155883,30583],{"class":214},[204,155885,155886,155888,155890,155892,155894],{"class":206,"line":126},[204,155887,30501],{"class":263},[204,155889,45705],{"class":214},[204,155891,694],{"class":210},[204,155893,2124],{"class":263},[204,155895,221],{"class":214},[19,155897,155898],{},"常见错误：",[196,155900,155902],{"className":30464,"code":155901,"language":30466,"meta":125,"style":125},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[81,155903,155904,155917],{"__ignoreMap":125},[204,155905,155906,155908,155910,155912,155914],{"class":206,"line":207},[204,155907,218],{"class":263},[204,155909,215],{"class":214},[204,155911,155757],{"class":319},[204,155913,155706],{"class":214},[204,155915,155916],{"class":273},"# 错误\n",[204,155918,155919,155921,155923,155926,155929],{"class":206,"line":126},[204,155920,218],{"class":263},[204,155922,215],{"class":214},[204,155924,155925],{"class":319},"\"abc\"",[204,155927,155928],{"class":214},")    ",[204,155930,155916],{"class":273},[19,155932,155933],{},"正确写法：",[196,155935,155937],{"className":30464,"code":155936,"language":30466,"meta":125,"style":125},"num = float(\"3.14\")\n",[81,155938,155939],{"__ignoreMap":125},[204,155940,155941,155943,155945,155947,155949,155951],{"class":206,"line":207},[204,155942,155832],{"class":214},[204,155944,260],{"class":210},[204,155946,109882],{"class":263},[204,155948,215],{"class":214},[204,155950,155757],{"class":319},[204,155952,221],{"class":214},[14,155954,155956],{"id":155955},"_27-运算符","2.7 运算符",[49,155958,155960],{"id":155959},"_271-算术运算符","2.7.1 算术运算符",[352,155962,155963,155974],{},[355,155964,155965],{},[358,155966,155967,155970,155972],{},[361,155968,155969],{},"运算符",[361,155971,25955],{},[361,155973,27578],{},[398,155975,155976,155990,156004,156018,156032,156046,156060],{},[358,155977,155978,155982,155985],{},[403,155979,155980],{},[81,155981,694],{},[403,155983,155984],{},"加法",[403,155986,155987],{},[81,155988,155989],{},"1 + 2",[358,155991,155992,155996,155999],{},[403,155993,155994],{},[81,155995,745],{},[403,155997,155998],{},"减法",[403,156000,156001],{},[81,156002,156003],{},"5 - 3",[358,156005,156006,156010,156013],{},[403,156007,156008],{},[81,156009,668],{},[403,156011,156012],{},"乘法",[403,156014,156015],{},[81,156016,156017],{},"2 * 3",[358,156019,156020,156024,156027],{},[403,156021,156022],{},[81,156023,797],{},[403,156025,156026],{},"除法，结果是浮点数",[403,156028,156029],{},[81,156030,156031],{},"5 \u002F 2",[358,156033,156034,156038,156041],{},[403,156035,156036],{},[81,156037,33415],{},[403,156039,156040],{},"整除",[403,156042,156043],{},[81,156044,156045],{},"5 \u002F\u002F 2",[358,156047,156048,156052,156055],{},[403,156049,156050],{},[81,156051,541],{},[403,156053,156054],{},"取余",[403,156056,156057],{},[81,156058,156059],{},"5 % 2",[358,156061,156062,156066,156069],{},[403,156063,156064],{},[81,156065,10748],{},[403,156067,156068],{},"幂运算",[403,156070,156071],{},[81,156072,156073],{},"2 ** 3",[19,156075,15222],{},[196,156077,156079],{"className":30464,"code":156078,"language":30466,"meta":125,"style":125},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[81,156080,156081,156099,156116,156133],{"__ignoreMap":125},[204,156082,156083,156085,156087,156089,156092,156094,156096],{"class":206,"line":207},[204,156084,30501],{"class":263},[204,156086,215],{"class":214},[204,156088,532],{"class":263},[204,156090,156091],{"class":210}," \u002F",[204,156093,14842],{"class":263},[204,156095,155706],{"class":214},[204,156097,156098],{"class":273},"# 2.5\n",[204,156100,156101,156103,156105,156107,156110,156112,156114],{"class":206,"line":126},[204,156102,30501],{"class":263},[204,156104,215],{"class":214},[204,156106,532],{"class":263},[204,156108,156109],{"class":210}," \u002F\u002F",[204,156111,14842],{"class":263},[204,156113,45894],{"class":214},[204,156115,155709],{"class":273},[204,156117,156118,156120,156122,156124,156127,156129,156131],{"class":206,"line":131},[204,156119,30501],{"class":263},[204,156121,215],{"class":214},[204,156123,532],{"class":263},[204,156125,156126],{"class":210}," %",[204,156128,14842],{"class":263},[204,156130,155706],{"class":214},[204,156132,155726],{"class":273},[204,156134,156135,156137,156139,156141,156144,156146,156148],{"class":206,"line":1281},[204,156136,30501],{"class":263},[204,156138,215],{"class":214},[204,156140,292],{"class":263},[204,156142,156143],{"class":210}," **",[204,156145,78156],{"class":263},[204,156147,45894],{"class":214},[204,156149,156150],{"class":273},"# 8\n",[49,156152,156154],{"id":156153},"_272-赋值运算符","2.7.2 赋值运算符",[196,156156,156158],{"className":30464,"code":156157,"language":30466,"meta":125,"style":125},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[81,156159,156160,156168,156176,156184,156192],{"__ignoreMap":125},[204,156161,156162,156164,156166],{"class":206,"line":207},[204,156163,155832],{"class":214},[204,156165,260],{"class":210},[204,156167,58514],{"class":263},[204,156169,156170,156172,156174],{"class":206,"line":126},[204,156171,155832],{"class":214},[204,156173,9564],{"class":210},[204,156175,54513],{"class":263},[204,156177,156178,156180,156182],{"class":206,"line":131},[204,156179,155832],{"class":214},[204,156181,150297],{"class":210},[204,156183,47809],{"class":263},[204,156185,156186,156188,156190],{"class":206,"line":1281},[204,156187,155832],{"class":214},[204,156189,137232],{"class":210},[204,156191,120121],{"class":263},[204,156193,156194,156196,156199],{"class":206,"line":1287},[204,156195,155832],{"class":214},[204,156197,156198],{"class":210},"\u002F=",[204,156200,47809],{"class":263},[19,156202,156203],{},"等价关系：",[196,156205,156207],{"className":30464,"code":156206,"language":30466,"meta":125,"style":125},"num += 1\nnum = num + 1\n",[81,156208,156209,156217],{"__ignoreMap":125},[204,156210,156211,156213,156215],{"class":206,"line":207},[204,156212,155832],{"class":214},[204,156214,9564],{"class":210},[204,156216,55785],{"class":263},[204,156218,156219,156221,156223,156226,156228],{"class":206,"line":126},[204,156220,155832],{"class":214},[204,156222,260],{"class":210},[204,156224,156225],{"class":214}," num ",[204,156227,694],{"class":210},[204,156229,55785],{"class":263},[19,156231,156232,156233,43,156236,28471],{},"Python 没有 ",[81,156234,156235],{},"num++",[81,156237,156238],{},"num--",[49,156240,156242],{"id":156241},"_273-比较运算符","2.7.3 比较运算符",[19,156244,156245],{},"比较运算结果是布尔值。",[196,156247,156249],{"className":30464,"code":156248,"language":30466,"meta":125,"style":125},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[81,156250,156251,156265,156280,156294],{"__ignoreMap":125},[204,156252,156253,156255,156257,156259,156261,156263],{"class":206,"line":207},[204,156254,30501],{"class":263},[204,156256,215],{"class":214},[204,156258,659],{"class":263},[204,156260,26308],{"class":210},[204,156262,2234],{"class":263},[204,156264,221],{"class":214},[204,156266,156267,156269,156271,156273,156276,156278],{"class":206,"line":126},[204,156268,30501],{"class":263},[204,156270,215],{"class":214},[204,156272,659],{"class":263},[204,156274,156275],{"class":210}," >=",[204,156277,2124],{"class":263},[204,156279,221],{"class":214},[204,156281,156282,156284,156286,156288,156290,156292],{"class":206,"line":131},[204,156283,30501],{"class":263},[204,156285,215],{"class":214},[204,156287,659],{"class":263},[204,156289,101644],{"class":210},[204,156291,2169],{"class":263},[204,156293,221],{"class":214},[204,156295,156296,156298,156300,156302,156305,156307],{"class":206,"line":1281},[204,156297,30501],{"class":263},[204,156299,215],{"class":214},[204,156301,659],{"class":263},[204,156303,156304],{"class":210}," !=",[204,156306,2169],{"class":263},[204,156308,221],{"class":214},[19,156310,156311,156312,156314,156315,28471],{},"注意：判断相等用 ",[81,156313,3035],{},"，赋值用 ",[81,156316,260],{},[196,156318,156320],{"className":30464,"code":156319,"language":30466,"meta":125,"style":125},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[81,156321,156322,156334],{"__ignoreMap":125},[204,156323,156324,156326,156328,156331],{"class":206,"line":207},[204,156325,146591],{"class":214},[204,156327,260],{"class":210},[204,156329,156330],{"class":263}," 18",[204,156332,156333],{"class":273},"       # 赋值\n",[204,156335,156336,156338,156340,156342],{"class":206,"line":126},[204,156337,146591],{"class":214},[204,156339,3035],{"class":210},[204,156341,156330],{"class":263},[204,156343,156344],{"class":273},"      # 判断是否相等\n",[49,156346,156348],{"id":156347},"_274-逻辑运算符","2.7.4 逻辑运算符",[352,156350,156351,156359],{},[355,156352,156353],{},[358,156354,156355,156357],{},[361,156356,155969],{},[361,156358,25955],{},[398,156360,156361,156370,156379],{},[358,156362,156363,156367],{},[403,156364,156365],{},[81,156366,30548],{},[403,156368,156369],{},"并且",[358,156371,156372,156376],{},[403,156373,156374],{},[81,156375,115175],{},[403,156377,156378],{},"或者",[358,156380,156381,156386],{},[403,156382,156383],{},[81,156384,156385],{},"not",[403,156387,156388],{},"取反",[196,156390,156392],{"className":30464,"code":156391,"language":30466,"meta":125,"style":125},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[81,156393,156394,156402,156411,156415,156430,156444],{"__ignoreMap":125},[204,156395,156396,156398,156400],{"class":206,"line":207},[204,156397,146591],{"class":214},[204,156399,260],{"class":210},[204,156401,88151],{"class":263},[204,156403,156404,156407,156409],{"class":206,"line":126},[204,156405,156406],{"class":214},"has_ticket ",[204,156408,260],{"class":210},[204,156410,153644],{"class":263},[204,156412,156413],{"class":206,"line":131},[204,156414,2486],{"emptyLinePlaceholder":135},[204,156416,156417,156419,156421,156423,156425,156427],{"class":206,"line":1281},[204,156418,30501],{"class":263},[204,156420,155813],{"class":214},[204,156422,1796],{"class":210},[204,156424,156330],{"class":263},[204,156426,120514],{"class":210},[204,156428,156429],{"class":214}," has_ticket)\n",[204,156431,156432,156434,156436,156438,156440,156442],{"class":206,"line":1287},[204,156433,30501],{"class":263},[204,156435,155813],{"class":214},[204,156437,1123],{"class":210},[204,156439,156330],{"class":263},[204,156441,114286],{"class":210},[204,156443,156429],{"class":214},[204,156445,156446,156448,156450,156452],{"class":206,"line":1301},[204,156447,30501],{"class":263},[204,156449,215],{"class":214},[204,156451,156385],{"class":210},[204,156453,156429],{"class":214},[14,156455,156457],{"id":156456},"_28-字符串定义","2.8 字符串定义",[19,156459,156460],{},"三种常见写法：",[196,156462,156464],{"className":30464,"code":156463,"language":30466,"meta":125,"style":125},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[81,156465,156466,156476,156485,156495],{"__ignoreMap":125},[204,156467,156468,156471,156473],{"class":206,"line":207},[204,156469,156470],{"class":214},"name1 ",[204,156472,260],{"class":210},[204,156474,156475],{"class":319}," '小明'\n",[204,156477,156478,156481,156483],{"class":206,"line":126},[204,156479,156480],{"class":214},"name2 ",[204,156482,260],{"class":210},[204,156484,149398],{"class":319},[204,156486,156487,156490,156492],{"class":206,"line":131},[204,156488,156489],{"class":214},"text ",[204,156491,260],{"class":210},[204,156493,156494],{"class":319}," \"\"\"这是多行字符串\n",[204,156496,156497],{"class":206,"line":1281},[204,156498,156499],{"class":319},"可以换行\"\"\"\n",[19,156501,156502],{},"字符串中包含引号：",[196,156504,156506],{"className":30464,"code":156505,"language":30466,"meta":125,"style":125},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[81,156507,156508,156518,156528],{"__ignoreMap":125},[204,156509,156510,156513,156515],{"class":206,"line":207},[204,156511,156512],{"class":214},"msg ",[204,156514,260],{"class":210},[204,156516,156517],{"class":319}," \"他说:'你好'\"\n",[204,156519,156520,156523,156525],{"class":206,"line":126},[204,156521,156522],{"class":214},"msg2 ",[204,156524,260],{"class":210},[204,156526,156527],{"class":319}," '他说:\"你好\"'\n",[204,156529,156530,156533,156535,156538,156541,156544,156546],{"class":206,"line":131},[204,156531,156532],{"class":214},"msg3 ",[204,156534,260],{"class":210},[204,156536,156537],{"class":319}," \"他说:",[204,156539,156540],{"class":263},"\\\"",[204,156542,156543],{"class":319},"你好",[204,156545,156540],{"class":263},[204,156547,25220],{"class":319},[19,156549,156550],{},"常见转义字符：",[352,156552,156553,156562],{},[355,156554,156555],{},[358,156556,156557,156560],{},[361,156558,156559],{},"写法",[361,156561,100786],{},[398,156563,156564,156574,156583,156593,156602],{},[358,156565,156566,156571],{},[403,156567,156568],{},[81,156569,156570],{},"\\n",[403,156572,156573],{},"换行",[358,156575,156576,156580],{},[403,156577,156578],{},[81,156579,1317],{},[403,156581,156582],{},"制表符",[358,156584,156585,156590],{},[403,156586,156587],{},[81,156588,156589],{},"\\\\",[403,156591,156592],{},"反斜杠",[358,156594,156595,156599],{},[403,156596,156597],{},[81,156598,156540],{},[403,156600,156601],{},"双引号",[358,156603,156604,156609],{},[403,156605,156606],{},[81,156607,156608],{},"\\'",[403,156610,156611],{},"单引号",[14,156613,156615],{"id":156614},"_29-字符串拼接","2.9 字符串拼接",[196,156617,156619],{"className":30464,"code":156618,"language":30466,"meta":125,"style":125},"name = \"小明\"\nprint(\"你好，\" + name)\n",[81,156620,156621,156629],{"__ignoreMap":125},[204,156622,156623,156625,156627],{"class":206,"line":207},[204,156624,146581],{"class":214},[204,156626,260],{"class":210},[204,156628,149398],{"class":319},[204,156630,156631,156633,156635,156638,156640],{"class":206,"line":126},[204,156632,30501],{"class":263},[204,156634,215],{"class":214},[204,156636,156637],{"class":319},"\"你好，\"",[204,156639,45652],{"class":210},[204,156641,156642],{"class":214}," name)\n",[19,156644,156645],{},"字符串只能和字符串拼接：",[196,156647,156649],{"className":30464,"code":156648,"language":30466,"meta":125,"style":125},"age = 18\nprint(\"年龄:\" + str(age))\n",[81,156650,156651,156659],{"__ignoreMap":125},[204,156652,156653,156655,156657],{"class":206,"line":207},[204,156654,146591],{"class":214},[204,156656,260],{"class":210},[204,156658,146596],{"class":263},[204,156660,156661,156663,156665,156667,156669,156671],{"class":206,"line":126},[204,156662,30501],{"class":263},[204,156664,215],{"class":214},[204,156666,146562],{"class":319},[204,156668,45652],{"class":210},[204,156670,74005],{"class":263},[204,156672,156673],{"class":214},"(age))\n",[19,156675,156676],{},"更推荐使用格式化字符串。",[14,156678,156680],{"id":156679},"_210-字符串格式化","2.10 字符串格式化",[49,156682,156684],{"id":156683},"_2101-百分号格式化","2.10.1 百分号格式化",[196,156686,156688],{"className":30464,"code":156687,"language":30466,"meta":125,"style":125},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[81,156689,156690,156698,156706,156715,156719],{"__ignoreMap":125},[204,156691,156692,156694,156696],{"class":206,"line":207},[204,156693,146581],{"class":214},[204,156695,260],{"class":210},[204,156697,149398],{"class":319},[204,156699,156700,156702,156704],{"class":206,"line":126},[204,156701,146591],{"class":214},[204,156703,260],{"class":210},[204,156705,146596],{"class":263},[204,156707,156708,156710,156712],{"class":206,"line":131},[204,156709,155403],{"class":214},[204,156711,260],{"class":210},[204,156713,156714],{"class":263}," 95.5\n",[204,156716,156717],{"class":206,"line":1281},[204,156718,2486],{"emptyLinePlaceholder":135},[204,156720,156721,156723,156725,156728,156731,156734,156737,156740,156743,156745,156747],{"class":206,"line":1287},[204,156722,30501],{"class":263},[204,156724,215],{"class":214},[204,156726,156727],{"class":319},"\"姓名:",[204,156729,156730],{"class":263},"%s",[204,156732,156733],{"class":319}," 年龄:",[204,156735,156736],{"class":263},"%d",[204,156738,156739],{"class":319}," 分数:",[204,156741,156742],{"class":263},"%.1f",[204,156744,464],{"class":319},[204,156746,156126],{"class":210},[204,156748,156749],{"class":214}," (name, age, score))\n",[19,156751,156752],{},"常用占位符：",[352,156754,156755,156764],{},[355,156756,156757],{},[358,156758,156759,156762],{},[361,156760,156761],{},"占位符",[361,156763,25955],{},[398,156765,156766,156774,156782],{},[358,156767,156768,156772],{},[403,156769,156770],{},[81,156771,156730],{},[403,156773,155269],{},[358,156775,156776,156780],{},[403,156777,156778],{},[81,156779,156736],{},[403,156781,155247],{},[358,156783,156784,156789],{},[403,156785,156786],{},[81,156787,156788],{},"%f",[403,156790,155258],{},[19,156792,156793],{},"精度控制：",[196,156795,156797],{"className":30464,"code":156796,"language":30466,"meta":125,"style":125},"price = 12.3456\nprint(\"%.2f\" % price)\n",[81,156798,156799,156808],{"__ignoreMap":125},[204,156800,156801,156803,156805],{"class":206,"line":207},[204,156802,146726],{"class":214},[204,156804,260],{"class":210},[204,156806,156807],{"class":263}," 12.3456\n",[204,156809,156810,156812,156814,156816,156819,156821,156823],{"class":206,"line":126},[204,156811,30501],{"class":263},[204,156813,215],{"class":214},[204,156815,464],{"class":319},[204,156817,156818],{"class":263},"%.2f",[204,156820,464],{"class":319},[204,156822,156126],{"class":210},[204,156824,156825],{"class":214}," price)\n",[49,156827,156829],{"id":156828},"_2102-format方法","2.10.2 format方法",[196,156831,156833],{"className":30464,"code":156832,"language":30466,"meta":125,"style":125},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[81,156834,156835,156843,156851,156855,156874,156894],{"__ignoreMap":125},[204,156836,156837,156839,156841],{"class":206,"line":207},[204,156838,146581],{"class":214},[204,156840,260],{"class":210},[204,156842,149398],{"class":319},[204,156844,156845,156847,156849],{"class":206,"line":126},[204,156846,146591],{"class":214},[204,156848,260],{"class":210},[204,156850,146596],{"class":263},[204,156852,156853],{"class":206,"line":131},[204,156854,2486],{"emptyLinePlaceholder":135},[204,156856,156857,156859,156861,156863,156865,156867,156869,156871],{"class":206,"line":1281},[204,156858,30501],{"class":263},[204,156860,215],{"class":214},[204,156862,156727],{"class":319},[204,156864,32545],{"class":263},[204,156866,156733],{"class":319},[204,156868,32545],{"class":263},[204,156870,464],{"class":319},[204,156872,156873],{"class":214},".format(name, age))\n",[204,156875,156876,156878,156880,156882,156885,156887,156890,156892],{"class":206,"line":1287},[204,156877,30501],{"class":263},[204,156879,215],{"class":214},[204,156881,156727],{"class":319},[204,156883,156884],{"class":263},"{0}",[204,156886,156733],{"class":319},[204,156888,156889],{"class":263},"{1}",[204,156891,464],{"class":319},[204,156893,156873],{"class":214},[204,156895,156896,156898,156900,156902,156905,156907,156910,156912,156915,156917,156919,156922,156924,156926],{"class":206,"line":1301},[204,156897,30501],{"class":263},[204,156899,215],{"class":214},[204,156901,156727],{"class":319},[204,156903,156904],{"class":263},"{name}",[204,156906,156733],{"class":319},[204,156908,156909],{"class":263},"{age}",[204,156911,464],{"class":319},[204,156913,156914],{"class":214},".format(",[204,156916,79896],{"class":5303},[204,156918,260],{"class":210},[204,156920,156921],{"class":214},"name, ",[204,156923,70307],{"class":5303},[204,156925,260],{"class":210},[204,156927,156928],{"class":214},"age))\n",[49,156930,156932],{"id":156931},"_2103-f-string","2.10.3 f-string",[19,156934,156935],{},"推荐写法：",[196,156937,156939],{"className":30464,"code":156938,"language":30466,"meta":125,"style":125},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[81,156940,156941,156949,156957,156965,156969],{"__ignoreMap":125},[204,156942,156943,156945,156947],{"class":206,"line":207},[204,156944,146581],{"class":214},[204,156946,260],{"class":210},[204,156948,149398],{"class":319},[204,156950,156951,156953,156955],{"class":206,"line":126},[204,156952,146591],{"class":214},[204,156954,260],{"class":210},[204,156956,146596],{"class":263},[204,156958,156959,156961,156963],{"class":206,"line":131},[204,156960,155403],{"class":214},[204,156962,260],{"class":210},[204,156964,156714],{"class":263},[204,156966,156967],{"class":206,"line":1281},[204,156968,2486],{"emptyLinePlaceholder":135},[204,156970,156971,156973,156975,156977,156979,156981,156983,156985,156987,156989,156991,156993,156995,156997,157000,157003,157005,157007],{"class":206,"line":1287},[204,156972,30501],{"class":263},[204,156974,215],{"class":214},[204,156976,267],{"class":210},[204,156978,156727],{"class":319},[204,156980,1109],{"class":263},[204,156982,79896],{"class":214},[204,156984,1159],{"class":263},[204,156986,156733],{"class":319},[204,156988,1109],{"class":263},[204,156990,70307],{"class":214},[204,156992,1159],{"class":263},[204,156994,156739],{"class":319},[204,156996,1109],{"class":263},[204,156998,156999],{"class":214},"score",[204,157001,157002],{"class":210},":.1f",[204,157004,1159],{"class":263},[204,157006,464],{"class":319},[204,157008,221],{"class":214},[19,157010,157011],{},"表达式也可以放进去：",[196,157013,157015],{"className":30464,"code":157014,"language":30466,"meta":125,"style":125},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[81,157016,157017,157025,157033],{"__ignoreMap":125},[204,157018,157019,157021,157023],{"class":206,"line":207},[204,157020,146726],{"class":214},[204,157022,260],{"class":210},[204,157024,146731],{"class":263},[204,157026,157027,157029,157031],{"class":206,"line":126},[204,157028,146736],{"class":214},[204,157030,260],{"class":210},[204,157032,54513],{"class":263},[204,157034,157035,157037,157039,157041,157044,157046,157048,157050,157053,157055,157058],{"class":206,"line":131},[204,157036,30501],{"class":263},[204,157038,215],{"class":214},[204,157040,267],{"class":210},[204,157042,157043],{"class":319},"\"总价:",[204,157045,1109],{"class":263},[204,157047,146726],{"class":214},[204,157049,668],{"class":210},[204,157051,157052],{"class":214}," count",[204,157054,1159],{"class":263},[204,157056,157057],{"class":319},"元\"",[204,157059,221],{"class":214},[14,157061,157063],{"id":157062},"_211-input输入","2.11 input输入",[19,157065,157066,157069],{},[81,157067,157068],{},"input()"," 会暂停程序，等待用户输入。",[196,157071,157073],{"className":30464,"code":157072,"language":30466,"meta":125,"style":125},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[81,157074,157075,157089],{"__ignoreMap":125},[204,157076,157077,157079,157081,157083,157085,157087],{"class":206,"line":207},[204,157078,146581],{"class":214},[204,157080,260],{"class":210},[204,157082,60691],{"class":263},[204,157084,215],{"class":214},[204,157086,152424],{"class":319},[204,157088,221],{"class":214},[204,157090,157091,157093,157095,157097,157100,157102,157104,157106,157108],{"class":206,"line":126},[204,157092,30501],{"class":263},[204,157094,215],{"class":214},[204,157096,267],{"class":210},[204,157098,157099],{"class":319},"\"你好，",[204,157101,1109],{"class":263},[204,157103,79896],{"class":214},[204,157105,1159],{"class":263},[204,157107,464],{"class":319},[204,157109,221],{"class":214},[19,157111,157112],{},"输入整数：",[196,157114,157116],{"className":30464,"code":157115,"language":30466,"meta":125,"style":125},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[81,157117,157118,157136],{"__ignoreMap":125},[204,157119,157120,157122,157124,157126,157128,157130,157132,157134],{"class":206,"line":207},[204,157121,146591],{"class":214},[204,157123,260],{"class":210},[204,157125,2468],{"class":263},[204,157127,215],{"class":214},[204,157129,53907],{"class":263},[204,157131,215],{"class":214},[204,157133,152439],{"class":319},[204,157135,30583],{"class":214},[204,157137,157138,157140,157142,157144,157147,157149,157151,157153,157156,157158],{"class":206,"line":126},[204,157139,30501],{"class":263},[204,157141,215],{"class":214},[204,157143,267],{"class":210},[204,157145,157146],{"class":319},"\"明年你",[204,157148,1109],{"class":263},[204,157150,146591],{"class":214},[204,157152,694],{"class":210},[204,157154,157155],{"class":263}," 1}",[204,157157,149449],{"class":319},[204,157159,221],{"class":214},[19,157161,157162],{},"输入小数：",[196,157164,157166],{"className":30464,"code":157165,"language":30466,"meta":125,"style":125},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[81,157167,157168,157187],{"__ignoreMap":125},[204,157169,157170,157172,157174,157176,157178,157180,157182,157185],{"class":206,"line":207},[204,157171,155376],{"class":214},[204,157173,260],{"class":210},[204,157175,109882],{"class":263},[204,157177,215],{"class":214},[204,157179,53907],{"class":263},[204,157181,215],{"class":214},[204,157183,157184],{"class":319},"\"请输入身高:\"",[204,157186,30583],{"class":214},[204,157188,157189,157191,157193,157195,157198,157200,157202,157205,157207,157210],{"class":206,"line":126},[204,157190,30501],{"class":263},[204,157192,215],{"class":214},[204,157194,267],{"class":210},[204,157196,157197],{"class":319},"\"身高:",[204,157199,1109],{"class":263},[204,157201,25068],{"class":214},[204,157203,157204],{"class":210},":.2f",[204,157206,1159],{"class":263},[204,157208,157209],{"class":319},"米\"",[204,157211,221],{"class":214},[14,157213,157215],{"id":157214},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157217,123377],{},[161,157219,157220,157223,157226,157229],{},[71,157221,157222],{},"输入商品单价。",[71,157224,157225],{},"输入购买数量。",[71,157227,157228],{},"输入折扣，例如 0.8 表示八折。",[71,157230,157231],{},"输出最终金额，保留两位小数。",[19,157233,10122],{},[196,157235,157237],{"className":30464,"code":157236,"language":30466,"meta":125,"style":125},"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",[81,157238,157239,157258,157277,157297,157301,157321,157325,157348,157369,157391],{"__ignoreMap":125},[204,157240,157241,157243,157245,157247,157249,157251,157253,157256],{"class":206,"line":207},[204,157242,146726],{"class":214},[204,157244,260],{"class":210},[204,157246,109882],{"class":263},[204,157248,215],{"class":214},[204,157250,53907],{"class":263},[204,157252,215],{"class":214},[204,157254,157255],{"class":319},"\"请输入商品单价:\"",[204,157257,30583],{"class":214},[204,157259,157260,157262,157264,157266,157268,157270,157272,157275],{"class":206,"line":126},[204,157261,146736],{"class":214},[204,157263,260],{"class":210},[204,157265,2468],{"class":263},[204,157267,215],{"class":214},[204,157269,53907],{"class":263},[204,157271,215],{"class":214},[204,157273,157274],{"class":319},"\"请输入购买数量:\"",[204,157276,30583],{"class":214},[204,157278,157279,157282,157284,157286,157288,157290,157292,157295],{"class":206,"line":131},[204,157280,157281],{"class":214},"discount ",[204,157283,260],{"class":210},[204,157285,109882],{"class":263},[204,157287,215],{"class":214},[204,157289,53907],{"class":263},[204,157291,215],{"class":214},[204,157293,157294],{"class":319},"\"请输入折扣:\"",[204,157296,30583],{"class":214},[204,157298,157299],{"class":206,"line":1281},[204,157300,2486],{"emptyLinePlaceholder":135},[204,157302,157303,157306,157308,157311,157313,157316,157318],{"class":206,"line":1287},[204,157304,157305],{"class":214},"total ",[204,157307,260],{"class":210},[204,157309,157310],{"class":214}," price ",[204,157312,668],{"class":210},[204,157314,157315],{"class":214}," count ",[204,157317,668],{"class":210},[204,157319,157320],{"class":214}," discount\n",[204,157322,157323],{"class":206,"line":1301},[204,157324,2486],{"emptyLinePlaceholder":135},[204,157326,157327,157329,157331,157333,157336,157338,157340,157342,157344,157346],{"class":206,"line":1307},[204,157328,30501],{"class":263},[204,157330,215],{"class":214},[204,157332,267],{"class":210},[204,157334,157335],{"class":319},"\"商品单价:",[204,157337,1109],{"class":263},[204,157339,79901],{"class":214},[204,157341,157204],{"class":210},[204,157343,1159],{"class":263},[204,157345,464],{"class":319},[204,157347,221],{"class":214},[204,157349,157350,157352,157354,157356,157359,157361,157363,157365,157367],{"class":206,"line":1398},[204,157351,30501],{"class":263},[204,157353,215],{"class":214},[204,157355,267],{"class":210},[204,157357,157358],{"class":319},"\"购买数量:",[204,157360,1109],{"class":263},[204,157362,84520],{"class":214},[204,157364,1159],{"class":263},[204,157366,464],{"class":319},[204,157368,221],{"class":214},[204,157370,157371,157373,157375,157377,157380,157382,157385,157387,157389],{"class":206,"line":1404},[204,157372,30501],{"class":263},[204,157374,215],{"class":214},[204,157376,267],{"class":210},[204,157378,157379],{"class":319},"\"折扣:",[204,157381,1109],{"class":263},[204,157383,157384],{"class":214},"discount",[204,157386,1159],{"class":263},[204,157388,464],{"class":319},[204,157390,221],{"class":214},[204,157392,157393,157395,157397,157399,157402,157404,157407,157409,157411,157413],{"class":206,"line":1416},[204,157394,30501],{"class":263},[204,157396,215],{"class":214},[204,157398,267],{"class":210},[204,157400,157401],{"class":319},"\"应付金额:",[204,157403,1109],{"class":263},[204,157405,157406],{"class":214},"total",[204,157408,157204],{"class":210},[204,157410,1159],{"class":263},[204,157412,157057],{"class":319},[204,157414,221],{"class":214},[14,157416,157418],{"id":157417},"_213-易错点","2.13 易错点",[161,157420,157421,157426,157432,157440,157443],{},[71,157422,157423,157425],{},[81,157424,157068],{}," 的结果是字符串，做运算前要转换。",[71,157427,157428,157429,28471],{},"字符串拼接时，数字要先 ",[81,157430,157431],{},"str()",[71,157433,157434,157436,157437,157439],{},[81,157435,260],{}," 是赋值，",[81,157438,3035],{}," 是比较。",[71,157441,157442],{},"Python 没有自增自减运算符。",[71,157444,157445],{},"浮点数计算可能有精度误差：",[196,157447,157449],{"className":30464,"code":157448,"language":30466,"meta":125,"style":125},"print(0.1 + 0.2)\n",[81,157450,157451],{"__ignoreMap":125},[204,157452,157453,157455,157457,157459,157461,157464],{"class":206,"line":207},[204,157454,30501],{"class":263},[204,157456,215],{"class":214},[204,157458,86296],{"class":263},[204,157460,45652],{"class":210},[204,157462,157463],{"class":263}," 0.2",[204,157465,221],{"class":214},[19,157467,157468,157469,157472],{},"金额计算如果要求严格，可以后续学习 ",[81,157470,157471],{},"decimal"," 模块。",[14,157474,157476],{"id":157475},"_214-本章练习","2.14 本章练习",[161,157478,157479,157482,157485,157488,157491],{},[71,157480,157481],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[71,157483,157484],{},"输入圆的半径，计算面积，保留两位小数。",[71,157486,157487],{},"输入工资和奖金，计算总收入。",[71,157489,157490],{},"输入摄氏温度，转换为华氏温度。",[71,157492,157493],{},"写一个 BMI 计算程序：",[196,157495,157498],{"className":157496,"code":157497,"language":5274,"meta":125},[5272],"BMI = 体重kg \u002F 身高m ** 2\n",[81,157499,157497],{"__ignoreMap":125},[5213,157501,157502],{},"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":125,"searchDepth":126,"depth":126,"links":157504},[157505,157506,157507,157508,157509,157510,157511,157517,157518,157519,157524,157525,157526,157527],{"id":155066,"depth":126,"text":155067},{"id":155175,"depth":126,"text":155176},{"id":155346,"depth":126,"text":155347},{"id":155423,"depth":126,"text":155424},{"id":50817,"depth":126,"text":50818},{"id":155729,"depth":126,"text":155730},{"id":155955,"depth":126,"text":155956,"children":157512},[157513,157514,157515,157516],{"id":155959,"depth":131,"text":155960},{"id":156153,"depth":131,"text":156154},{"id":156241,"depth":131,"text":156242},{"id":156347,"depth":131,"text":156348},{"id":156456,"depth":126,"text":156457},{"id":156614,"depth":126,"text":156615},{"id":156679,"depth":126,"text":156680,"children":157520},[157521,157522,157523],{"id":156683,"depth":131,"text":156684},{"id":156828,"depth":131,"text":156829},{"id":156931,"depth":131,"text":156932},{"id":157062,"depth":126,"text":157063},{"id":157214,"depth":126,"text":157215},{"id":157417,"depth":126,"text":157418},{"id":157475,"depth":126,"text":157476},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155058,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157534,"title":157535,"body":157536,"description":132,"extension":133,"meta":159172,"navigation":135,"path":159173,"seo":159174,"stem":159175,"__hash__":159176},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157537,"toc":159153},[157538,157541,157545,157548,157563,157566,157594,157598,157648,157650,157666,157669,157695,157698,157702,157769,157772,157788,157792,157795,157913,157916,157923,157972,157978,157982,157985,158098,158101,158105,158109,158112,158162,158166,158169,158219,158223,158226,158264,158268,158271,158317,158320,158355,158359,158364,158367,158413,158415,158482,158486,158492,158603,158612,158616,158618,158629,158631,158797,158801,158803,158817,158819,159033,159037,159056,159073,159076,159122,159126,159150],[10,157539,157535],{"id":157540},"_3-判断语句",[14,157542,157544],{"id":157543},"_31-布尔值","3.1 布尔值",[19,157546,157547],{},"判断语句依赖布尔值：",[196,157549,157551],{"className":30464,"code":157550,"language":30466,"meta":125,"style":125},"True\nFalse\n",[81,157552,157553,157558],{"__ignoreMap":125},[204,157554,157555],{"class":206,"line":207},[204,157556,157557],{"class":263},"True\n",[204,157559,157560],{"class":206,"line":126},[204,157561,157562],{"class":263},"False\n",[19,157564,157565],{},"比较表达式会产生布尔值：",[196,157567,157569],{"className":30464,"code":157568,"language":30466,"meta":125,"style":125},"age = 18\nprint(age >= 18)  # True\n",[81,157570,157571,157579],{"__ignoreMap":125},[204,157572,157573,157575,157577],{"class":206,"line":207},[204,157574,146591],{"class":214},[204,157576,260],{"class":210},[204,157578,146596],{"class":263},[204,157580,157581,157583,157585,157587,157589,157591],{"class":206,"line":126},[204,157582,30501],{"class":263},[204,157584,155813],{"class":214},[204,157586,1796],{"class":210},[204,157588,156330],{"class":263},[204,157590,45894],{"class":214},[204,157592,157593],{"class":273},"# True\n",[14,157595,157597],{"id":157596},"_32-if基础语法","3.2 if基础语法",[196,157599,157601],{"className":30464,"code":157600,"language":30466,"meta":125,"style":125},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[81,157602,157603,157621,157625,157637],{"__ignoreMap":125},[204,157604,157605,157607,157609,157611,157613,157615,157617,157619],{"class":206,"line":207},[204,157606,146591],{"class":214},[204,157608,260],{"class":210},[204,157610,2468],{"class":263},[204,157612,215],{"class":214},[204,157614,53907],{"class":263},[204,157616,215],{"class":214},[204,157618,152439],{"class":319},[204,157620,30583],{"class":214},[204,157622,157623],{"class":206,"line":126},[204,157624,2486],{"emptyLinePlaceholder":135},[204,157626,157627,157629,157631,157633,157635],{"class":206,"line":131},[204,157628,1617],{"class":210},[204,157630,15794],{"class":214},[204,157632,1796],{"class":210},[204,157634,156330],{"class":263},[204,157636,3825],{"class":214},[204,157638,157639,157641,157643,157646],{"class":206,"line":1281},[204,157640,31385],{"class":263},[204,157642,215],{"class":214},[204,157644,157645],{"class":319},"\"可以进入网吧\"",[204,157647,221],{"class":214},[19,157649,9112],{},[161,157651,157652,157657,157660,157663],{},[71,157653,157654,157656],{},[81,157655,1617],{}," 后面是条件表达式。",[71,157658,157659],{},"条件后面必须写冒号。",[71,157661,157662],{},"条件成立时执行缩进代码块。",[71,157664,157665],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157667,157668],{},"错误示例：",[196,157670,157672],{"className":30464,"code":157671,"language":30466,"meta":125,"style":125},"if age >= 18\n    print(\"可以进入\")\n",[81,157673,157674,157684],{"__ignoreMap":125},[204,157675,157676,157678,157680,157682],{"class":206,"line":207},[204,157677,1617],{"class":210},[204,157679,15794],{"class":214},[204,157681,1796],{"class":210},[204,157683,146596],{"class":263},[204,157685,157686,157688,157690,157693],{"class":206,"line":126},[204,157687,31385],{"class":263},[204,157689,215],{"class":214},[204,157691,157692],{"class":319},"\"可以进入\"",[204,157694,221],{"class":214},[19,157696,157697],{},"缺少冒号。",[14,157699,157701],{"id":157700},"_33-if-else","3.3 if else",[196,157703,157705],{"className":30464,"code":157704,"language":30466,"meta":125,"style":125},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[81,157706,157707,157725,157729,157741,157752,157758],{"__ignoreMap":125},[204,157708,157709,157711,157713,157715,157717,157719,157721,157723],{"class":206,"line":207},[204,157710,146591],{"class":214},[204,157712,260],{"class":210},[204,157714,2468],{"class":263},[204,157716,215],{"class":214},[204,157718,53907],{"class":263},[204,157720,215],{"class":214},[204,157722,152439],{"class":319},[204,157724,30583],{"class":214},[204,157726,157727],{"class":206,"line":126},[204,157728,2486],{"emptyLinePlaceholder":135},[204,157730,157731,157733,157735,157737,157739],{"class":206,"line":131},[204,157732,1617],{"class":210},[204,157734,15794],{"class":214},[204,157736,1796],{"class":210},[204,157738,156330],{"class":263},[204,157740,3825],{"class":214},[204,157742,157743,157745,157747,157750],{"class":206,"line":1281},[204,157744,31385],{"class":263},[204,157746,215],{"class":214},[204,157748,157749],{"class":319},"\"成年人\"",[204,157751,221],{"class":214},[204,157753,157754,157756],{"class":206,"line":1287},[204,157755,1787],{"class":210},[204,157757,3825],{"class":214},[204,157759,157760,157762,157764,157767],{"class":206,"line":1301},[204,157761,31385],{"class":263},[204,157763,215],{"class":214},[204,157765,157766],{"class":319},"\"未成年人\"",[204,157768,221],{"class":214},[19,157770,157771],{},"执行逻辑：",[161,157773,157774,157780,157785],{},[71,157775,157776,157777,157779],{},"条件成立，执行 ",[81,157778,1617],{}," 代码块。",[71,157781,157782,157783,157779],{},"条件不成立，执行 ",[81,157784,1787],{},[71,157786,157787],{},"两个代码块只会执行其中一个。",[14,157789,157791],{"id":157790},"_34-if-elif-else","3.4 if elif else",[19,157793,157794],{},"多条件判断：",[196,157796,157798],{"className":30464,"code":157797,"language":30466,"meta":125,"style":125},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[81,157799,157800,157818,157822,157836,157847,157861,157872,157885,157896,157902],{"__ignoreMap":125},[204,157801,157802,157804,157806,157808,157810,157812,157814,157816],{"class":206,"line":207},[204,157803,155403],{"class":214},[204,157805,260],{"class":210},[204,157807,2468],{"class":263},[204,157809,215],{"class":214},[204,157811,53907],{"class":263},[204,157813,215],{"class":214},[204,157815,152454],{"class":319},[204,157817,30583],{"class":214},[204,157819,157820],{"class":206,"line":126},[204,157821,2486],{"emptyLinePlaceholder":135},[204,157823,157824,157826,157829,157831,157834],{"class":206,"line":131},[204,157825,1617],{"class":210},[204,157827,157828],{"class":214}," score ",[204,157830,1796],{"class":210},[204,157832,157833],{"class":263}," 90",[204,157835,3825],{"class":214},[204,157837,157838,157840,157842,157845],{"class":206,"line":1281},[204,157839,31385],{"class":263},[204,157841,215],{"class":214},[204,157843,157844],{"class":319},"\"优秀\"",[204,157846,221],{"class":214},[204,157848,157849,157852,157854,157856,157859],{"class":206,"line":1287},[204,157850,157851],{"class":210},"elif",[204,157853,157828],{"class":214},[204,157855,1796],{"class":210},[204,157857,157858],{"class":263}," 80",[204,157860,3825],{"class":214},[204,157862,157863,157865,157867,157870],{"class":206,"line":1301},[204,157864,31385],{"class":263},[204,157866,215],{"class":214},[204,157868,157869],{"class":319},"\"良好\"",[204,157871,221],{"class":214},[204,157873,157874,157876,157878,157880,157883],{"class":206,"line":1307},[204,157875,157851],{"class":210},[204,157877,157828],{"class":214},[204,157879,1796],{"class":210},[204,157881,157882],{"class":263}," 60",[204,157884,3825],{"class":214},[204,157886,157887,157889,157891,157894],{"class":206,"line":1398},[204,157888,31385],{"class":263},[204,157890,215],{"class":214},[204,157892,157893],{"class":319},"\"及格\"",[204,157895,221],{"class":214},[204,157897,157898,157900],{"class":206,"line":1404},[204,157899,1787],{"class":210},[204,157901,3825],{"class":214},[204,157903,157904,157906,157908,157911],{"class":206,"line":1416},[204,157905,31385],{"class":263},[204,157907,215],{"class":214},[204,157909,157910],{"class":319},"\"不及格\"",[204,157912,221],{"class":214},[19,157914,157915],{},"注意判断顺序很重要。",[19,157917,157918,157919,157922],{},"如果把 ",[81,157920,157921],{},"score >= 60"," 放在最前面：",[196,157924,157926],{"className":30464,"code":157925,"language":30466,"meta":125,"style":125},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[81,157927,157928,157940,157950,157962],{"__ignoreMap":125},[204,157929,157930,157932,157934,157936,157938],{"class":206,"line":207},[204,157931,1617],{"class":210},[204,157933,157828],{"class":214},[204,157935,1796],{"class":210},[204,157937,157882],{"class":263},[204,157939,3825],{"class":214},[204,157941,157942,157944,157946,157948],{"class":206,"line":126},[204,157943,31385],{"class":263},[204,157945,215],{"class":214},[204,157947,157893],{"class":319},[204,157949,221],{"class":214},[204,157951,157952,157954,157956,157958,157960],{"class":206,"line":131},[204,157953,157851],{"class":210},[204,157955,157828],{"class":214},[204,157957,1796],{"class":210},[204,157959,157833],{"class":263},[204,157961,3825],{"class":214},[204,157963,157964,157966,157968,157970],{"class":206,"line":1281},[204,157965,31385],{"class":263},[204,157967,215],{"class":214},[204,157969,157844],{"class":319},[204,157971,221],{"class":214},[19,157973,157974,157975,157977],{},"成绩 95 会先满足 ",[81,157976,157921],{},"，后面的优秀分支就不会执行。",[14,157979,157981],{"id":157980},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,157983,157984],{},"嵌套判断就是在一个判断内部再写判断。",[196,157986,157988],{"className":30464,"code":157987,"language":30466,"meta":125,"style":125},"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",[81,157989,157990,158008,158023,158027,158039,158053,158063,158070,158081,158087],{"__ignoreMap":125},[204,157991,157992,157994,157996,157998,158000,158002,158004,158006],{"class":206,"line":207},[204,157993,146591],{"class":214},[204,157995,260],{"class":210},[204,157997,2468],{"class":263},[204,157999,215],{"class":214},[204,158001,53907],{"class":263},[204,158003,215],{"class":214},[204,158005,152439],{"class":319},[204,158007,30583],{"class":214},[204,158009,158010,158012,158014,158016,158018,158021],{"class":206,"line":126},[204,158011,156406],{"class":214},[204,158013,260],{"class":210},[204,158015,60691],{"class":263},[204,158017,215],{"class":214},[204,158019,158020],{"class":319},"\"是否有票(y\u002Fn):\"",[204,158022,221],{"class":214},[204,158024,158025],{"class":206,"line":131},[204,158026,2486],{"emptyLinePlaceholder":135},[204,158028,158029,158031,158033,158035,158037],{"class":206,"line":1281},[204,158030,1617],{"class":210},[204,158032,15794],{"class":214},[204,158034,1796],{"class":210},[204,158036,156330],{"class":263},[204,158038,3825],{"class":214},[204,158040,158041,158043,158046,158048,158051],{"class":206,"line":1287},[204,158042,3187],{"class":210},[204,158044,158045],{"class":214}," has_ticket ",[204,158047,3035],{"class":210},[204,158049,158050],{"class":319}," \"y\"",[204,158052,3825],{"class":214},[204,158054,158055,158057,158059,158061],{"class":206,"line":1301},[204,158056,32537],{"class":263},[204,158058,215],{"class":214},[204,158060,157692],{"class":319},[204,158062,221],{"class":214},[204,158064,158065,158068],{"class":206,"line":1307},[204,158066,158067],{"class":210},"    else",[204,158069,3825],{"class":214},[204,158071,158072,158074,158076,158079],{"class":206,"line":1398},[204,158073,32537],{"class":263},[204,158075,215],{"class":214},[204,158077,158078],{"class":319},"\"请先买票\"",[204,158080,221],{"class":214},[204,158082,158083,158085],{"class":206,"line":1404},[204,158084,1787],{"class":210},[204,158086,3825],{"class":214},[204,158088,158089,158091,158093,158096],{"class":206,"line":1416},[204,158090,31385],{"class":263},[204,158092,215],{"class":214},[204,158094,158095],{"class":319},"\"未成年人禁止进入\"",[204,158097,221],{"class":214},[19,158099,158100],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158102,158104],{"id":158103},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[49,158106,158108],{"id":158107},"_361-and","3.6.1 and",[19,158110,158111],{},"两个条件都成立才成立。",[196,158113,158115],{"className":30464,"code":158114,"language":30466,"meta":125,"style":125},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[81,158116,158117,158125,158133,158137,158152],{"__ignoreMap":125},[204,158118,158119,158121,158123],{"class":206,"line":207},[204,158120,146591],{"class":214},[204,158122,260],{"class":210},[204,158124,88151],{"class":263},[204,158126,158127,158129,158131],{"class":206,"line":126},[204,158128,156406],{"class":214},[204,158130,260],{"class":210},[204,158132,153644],{"class":263},[204,158134,158135],{"class":206,"line":131},[204,158136,2486],{"emptyLinePlaceholder":135},[204,158138,158139,158141,158143,158145,158147,158149],{"class":206,"line":1281},[204,158140,1617],{"class":210},[204,158142,15794],{"class":214},[204,158144,1796],{"class":210},[204,158146,156330],{"class":263},[204,158148,120514],{"class":210},[204,158150,158151],{"class":214}," has_ticket:\n",[204,158153,158154,158156,158158,158160],{"class":206,"line":1287},[204,158155,31385],{"class":263},[204,158157,215],{"class":214},[204,158159,157692],{"class":319},[204,158161,221],{"class":214},[49,158163,158165],{"id":158164},"_362-or","3.6.2 or",[19,158167,158168],{},"只要一个条件成立就成立。",[196,158170,158172],{"className":30464,"code":158171,"language":30466,"meta":125,"style":125},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[81,158173,158174,158183,158192,158196,158208],{"__ignoreMap":125},[204,158175,158176,158179,158181],{"class":206,"line":207},[204,158177,158178],{"class":214},"is_vip ",[204,158180,260],{"class":210},[204,158182,125892],{"class":263},[204,158184,158185,158188,158190],{"class":206,"line":126},[204,158186,158187],{"class":214},"coupon ",[204,158189,260],{"class":210},[204,158191,153644],{"class":263},[204,158193,158194],{"class":206,"line":131},[204,158195,2486],{"emptyLinePlaceholder":135},[204,158197,158198,158200,158203,158205],{"class":206,"line":1281},[204,158199,1617],{"class":210},[204,158201,158202],{"class":214}," is_vip ",[204,158204,115175],{"class":210},[204,158206,158207],{"class":214}," coupon:\n",[204,158209,158210,158212,158214,158217],{"class":206,"line":1287},[204,158211,31385],{"class":263},[204,158213,215],{"class":214},[204,158215,158216],{"class":319},"\"可以享受优惠\"",[204,158218,221],{"class":214},[49,158220,158222],{"id":158221},"_363-not","3.6.3 not",[19,158224,158225],{},"取反。",[196,158227,158229],{"className":30464,"code":158228,"language":30466,"meta":125,"style":125},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[81,158230,158231,158240,158244,158253],{"__ignoreMap":125},[204,158232,158233,158236,158238],{"class":206,"line":207},[204,158234,158235],{"class":214},"is_closed ",[204,158237,260],{"class":210},[204,158239,125892],{"class":263},[204,158241,158242],{"class":206,"line":126},[204,158243,2486],{"emptyLinePlaceholder":135},[204,158245,158246,158248,158250],{"class":206,"line":131},[204,158247,1617],{"class":210},[204,158249,39016],{"class":210},[204,158251,158252],{"class":214}," is_closed:\n",[204,158254,158255,158257,158259,158262],{"class":206,"line":1281},[204,158256,31385],{"class":263},[204,158258,215],{"class":214},[204,158260,158261],{"class":319},"\"店铺营业中\"",[204,158263,221],{"class":214},[14,158265,158267],{"id":158266},"_37-链式比较","3.7 链式比较",[19,158269,158270],{},"Python 支持链式比较：",[196,158272,158274],{"className":30464,"code":158273,"language":30466,"meta":125,"style":125},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[81,158275,158276,158285,158289,158306],{"__ignoreMap":125},[204,158277,158278,158280,158282],{"class":206,"line":207},[204,158279,155403],{"class":214},[204,158281,260],{"class":210},[204,158283,158284],{"class":263}," 85\n",[204,158286,158287],{"class":206,"line":126},[204,158288,2486],{"emptyLinePlaceholder":135},[204,158290,158291,158293,158295,158298,158300,158302,158304],{"class":206,"line":131},[204,158292,1617],{"class":210},[204,158294,4179],{"class":263},[204,158296,158297],{"class":210}," \u003C=",[204,158299,157828],{"class":214},[204,158301,1674],{"class":210},[204,158303,5841],{"class":263},[204,158305,3825],{"class":214},[204,158307,158308,158310,158312,158315],{"class":206,"line":1281},[204,158309,31385],{"class":263},[204,158311,215],{"class":214},[204,158313,158314],{"class":319},"\"成绩合法\"",[204,158316,221],{"class":214},[19,158318,158319],{},"等价于：",[196,158321,158323],{"className":30464,"code":158322,"language":30466,"meta":125,"style":125},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[81,158324,158325,158345],{"__ignoreMap":125},[204,158326,158327,158329,158331,158333,158335,158337,158339,158341,158343],{"class":206,"line":207},[204,158328,1617],{"class":210},[204,158330,157828],{"class":214},[204,158332,1796],{"class":210},[204,158334,4179],{"class":263},[204,158336,120514],{"class":210},[204,158338,157828],{"class":214},[204,158340,1674],{"class":210},[204,158342,5841],{"class":263},[204,158344,3825],{"class":214},[204,158346,158347,158349,158351,158353],{"class":206,"line":126},[204,158348,31385],{"class":263},[204,158350,215],{"class":214},[204,158352,158314],{"class":319},[204,158354,221],{"class":214},[14,158356,158358],{"id":158357},"_38-真值和假值","3.8 真值和假值",[19,158360,116552,158361,158363],{},[81,158362,1617],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158365,158366],{},"假值：",[196,158368,158370],{"className":30464,"code":158369,"language":30466,"meta":125,"style":125},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[81,158371,158372,158376,158381,158385,158389,158394,158398,158402,158407],{"__ignoreMap":125},[204,158373,158374],{"class":206,"line":207},[204,158375,157562],{"class":263},[204,158377,158378],{"class":206,"line":126},[204,158379,158380],{"class":263},"None\n",[204,158382,158383],{"class":206,"line":131},[204,158384,3171],{"class":263},[204,158386,158387],{"class":206,"line":1281},[204,158388,32428],{"class":263},[204,158390,158391],{"class":206,"line":1287},[204,158392,158393],{"class":319},"\"\"\n",[204,158395,158396],{"class":206,"line":1301},[204,158397,32443],{"class":214},[204,158399,158400],{"class":206,"line":1307},[204,158401,2062],{"class":214},[204,158403,158404],{"class":206,"line":1398},[204,158405,158406],{"class":214},"{}\n",[204,158408,158409,158411],{"class":206,"line":1404},[204,158410,155335],{"class":263},[204,158412,2062],{"class":214},[19,158414,15222],{},[196,158416,158418],{"className":30464,"code":158417,"language":30466,"meta":125,"style":125},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[81,158419,158420,158434,158438,158445,158465,158471],{"__ignoreMap":125},[204,158421,158422,158424,158426,158428,158430,158432],{"class":206,"line":207},[204,158423,146581],{"class":214},[204,158425,260],{"class":210},[204,158427,60691],{"class":263},[204,158429,215],{"class":214},[204,158431,152424],{"class":319},[204,158433,221],{"class":214},[204,158435,158436],{"class":206,"line":126},[204,158437,2486],{"emptyLinePlaceholder":135},[204,158439,158440,158442],{"class":206,"line":131},[204,158441,1617],{"class":210},[204,158443,158444],{"class":214}," name:\n",[204,158446,158447,158449,158451,158453,158455,158457,158459,158461,158463],{"class":206,"line":1281},[204,158448,31385],{"class":263},[204,158450,215],{"class":214},[204,158452,267],{"class":210},[204,158454,157099],{"class":319},[204,158456,1109],{"class":263},[204,158458,79896],{"class":214},[204,158460,1159],{"class":263},[204,158462,464],{"class":319},[204,158464,221],{"class":214},[204,158466,158467,158469],{"class":206,"line":1287},[204,158468,1787],{"class":210},[204,158470,3825],{"class":214},[204,158472,158473,158475,158477,158480],{"class":206,"line":1301},[204,158474,31385],{"class":263},[204,158476,215],{"class":214},[204,158478,158479],{"class":319},"\"姓名不能为空\"",[204,158481,221],{"class":214},[14,158483,158485],{"id":158484},"_39-match语句","3.9 match语句",[19,158487,158488,158489,158491],{},"Python 3.10 开始支持 ",[81,158490,71351],{},"。它适合处理固定选项。",[196,158493,158495],{"className":30464,"code":158494,"language":30466,"meta":125,"style":125},"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",[81,158496,158497,158513,158517,158524,158534,158545,158554,158565,158574,158585,158592],{"__ignoreMap":125},[204,158498,158499,158502,158504,158506,158508,158511],{"class":206,"line":207},[204,158500,158501],{"class":214},"command ",[204,158503,260],{"class":210},[204,158505,60691],{"class":263},[204,158507,215],{"class":214},[204,158509,158510],{"class":319},"\"请输入命令:\"",[204,158512,221],{"class":214},[204,158514,158515],{"class":206,"line":126},[204,158516,2486],{"emptyLinePlaceholder":135},[204,158518,158519,158521],{"class":206,"line":131},[204,158520,71351],{"class":210},[204,158522,158523],{"class":214}," command:\n",[204,158525,158526,158529,158532],{"class":206,"line":1281},[204,158527,158528],{"class":210},"    case",[204,158530,158531],{"class":319}," \"start\"",[204,158533,3825],{"class":214},[204,158535,158536,158538,158540,158543],{"class":206,"line":1287},[204,158537,32537],{"class":263},[204,158539,215],{"class":214},[204,158541,158542],{"class":319},"\"启动\"",[204,158544,221],{"class":214},[204,158546,158547,158549,158552],{"class":206,"line":1301},[204,158548,158528],{"class":210},[204,158550,158551],{"class":319}," \"stop\"",[204,158553,3825],{"class":214},[204,158555,158556,158558,158560,158563],{"class":206,"line":1307},[204,158557,32537],{"class":263},[204,158559,215],{"class":214},[204,158561,158562],{"class":319},"\"停止\"",[204,158564,221],{"class":214},[204,158566,158567,158569,158572],{"class":206,"line":1398},[204,158568,158528],{"class":210},[204,158570,158571],{"class":319}," \"restart\"",[204,158573,3825],{"class":214},[204,158575,158576,158578,158580,158583],{"class":206,"line":1404},[204,158577,32537],{"class":263},[204,158579,215],{"class":214},[204,158581,158582],{"class":319},"\"重启\"",[204,158584,221],{"class":214},[204,158586,158587,158589],{"class":206,"line":1416},[204,158588,158528],{"class":210},[204,158590,158591],{"class":214}," _:\n",[204,158593,158594,158596,158598,158601],{"class":206,"line":1698},[204,158595,32537],{"class":263},[204,158597,215],{"class":214},[204,158599,158600],{"class":319},"\"未知命令\"",[204,158602,221],{"class":214},[19,158604,158605,158606,158608,158609,158611],{},"入门阶段掌握 ",[81,158607,154703],{}," 更重要，",[81,158610,71351],{}," 可以作为补充。",[14,158613,158615],{"id":158614},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158617,123377],{},[161,158619,158620,158623,158626],{},[71,158621,158622],{},"输入成绩。",[71,158624,158625],{},"判断成绩是否合法。",[71,158627,158628],{},"输出等级。",[19,158630,10122],{},[196,158632,158634],{"className":30464,"code":158633,"language":30466,"meta":125,"style":125},"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",[81,158635,158636,158654,158658,158676,158687,158699,158710,158722,158733,158746,158757,158769,158780,158786],{"__ignoreMap":125},[204,158637,158638,158640,158642,158644,158646,158648,158650,158652],{"class":206,"line":207},[204,158639,155403],{"class":214},[204,158641,260],{"class":210},[204,158643,109882],{"class":263},[204,158645,215],{"class":214},[204,158647,53907],{"class":263},[204,158649,215],{"class":214},[204,158651,152454],{"class":319},[204,158653,30583],{"class":214},[204,158655,158656],{"class":206,"line":126},[204,158657,2486],{"emptyLinePlaceholder":135},[204,158659,158660,158662,158664,158666,158668,158670,158672,158674],{"class":206,"line":131},[204,158661,1617],{"class":210},[204,158663,39016],{"class":210},[204,158665,4179],{"class":263},[204,158667,158297],{"class":210},[204,158669,157828],{"class":214},[204,158671,1674],{"class":210},[204,158673,5841],{"class":263},[204,158675,3825],{"class":214},[204,158677,158678,158680,158682,158685],{"class":206,"line":1281},[204,158679,31385],{"class":263},[204,158681,215],{"class":214},[204,158683,158684],{"class":319},"\"成绩不合法\"",[204,158686,221],{"class":214},[204,158688,158689,158691,158693,158695,158697],{"class":206,"line":1287},[204,158690,157851],{"class":210},[204,158692,157828],{"class":214},[204,158694,1796],{"class":210},[204,158696,157833],{"class":263},[204,158698,3825],{"class":214},[204,158700,158701,158703,158705,158708],{"class":206,"line":1301},[204,158702,31385],{"class":263},[204,158704,215],{"class":214},[204,158706,158707],{"class":319},"\"等级:A\"",[204,158709,221],{"class":214},[204,158711,158712,158714,158716,158718,158720],{"class":206,"line":1307},[204,158713,157851],{"class":210},[204,158715,157828],{"class":214},[204,158717,1796],{"class":210},[204,158719,157858],{"class":263},[204,158721,3825],{"class":214},[204,158723,158724,158726,158728,158731],{"class":206,"line":1398},[204,158725,31385],{"class":263},[204,158727,215],{"class":214},[204,158729,158730],{"class":319},"\"等级:B\"",[204,158732,221],{"class":214},[204,158734,158735,158737,158739,158741,158744],{"class":206,"line":1404},[204,158736,157851],{"class":210},[204,158738,157828],{"class":214},[204,158740,1796],{"class":210},[204,158742,158743],{"class":263}," 70",[204,158745,3825],{"class":214},[204,158747,158748,158750,158752,158755],{"class":206,"line":1416},[204,158749,31385],{"class":263},[204,158751,215],{"class":214},[204,158753,158754],{"class":319},"\"等级:C\"",[204,158756,221],{"class":214},[204,158758,158759,158761,158763,158765,158767],{"class":206,"line":1698},[204,158760,157851],{"class":210},[204,158762,157828],{"class":214},[204,158764,1796],{"class":210},[204,158766,157882],{"class":263},[204,158768,3825],{"class":214},[204,158770,158771,158773,158775,158778],{"class":206,"line":1703},[204,158772,31385],{"class":263},[204,158774,215],{"class":214},[204,158776,158777],{"class":319},"\"等级:D\"",[204,158779,221],{"class":214},[204,158781,158782,158784],{"class":206,"line":1709},[204,158783,1787],{"class":210},[204,158785,3825],{"class":214},[204,158787,158788,158790,158792,158795],{"class":206,"line":1714},[204,158789,31385],{"class":263},[204,158791,215],{"class":214},[204,158793,158794],{"class":319},"\"等级:E\"",[204,158796,221],{"class":214},[14,158798,158800],{"id":158799},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158802,123377],{},[161,158804,158805,158808,158811,158814],{},[71,158806,158807],{},"输入消费金额。",[71,158809,158810],{},"输入会员等级，普通、银卡、金卡。",[71,158812,158813],{},"普通不打折，银卡 9 折，金卡 8 折。",[71,158815,158816],{},"满 500 再减 50。",[19,158818,10122],{},[196,158820,158822],{"className":30464,"code":158821,"language":30466,"meta":125,"style":125},"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",[81,158823,158824,158844,158860,158864,158872,158876,158890,158900,158913,158922,158935,158943,158949,158960,158964,158978,158982,158996,159006,159010],{"__ignoreMap":125},[204,158825,158826,158829,158831,158833,158835,158837,158839,158842],{"class":206,"line":207},[204,158827,158828],{"class":214},"amount ",[204,158830,260],{"class":210},[204,158832,109882],{"class":263},[204,158834,215],{"class":214},[204,158836,53907],{"class":263},[204,158838,215],{"class":214},[204,158840,158841],{"class":319},"\"请输入消费金额:\"",[204,158843,30583],{"class":214},[204,158845,158846,158849,158851,158853,158855,158858],{"class":206,"line":126},[204,158847,158848],{"class":214},"level ",[204,158850,260],{"class":210},[204,158852,60691],{"class":263},[204,158854,215],{"class":214},[204,158856,158857],{"class":319},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[204,158859,221],{"class":214},[204,158861,158862],{"class":206,"line":131},[204,158863,2486],{"emptyLinePlaceholder":135},[204,158865,158866,158868,158870],{"class":206,"line":1281},[204,158867,157281],{"class":214},[204,158869,260],{"class":210},[204,158871,55785],{"class":263},[204,158873,158874],{"class":206,"line":1287},[204,158875,2486],{"emptyLinePlaceholder":135},[204,158877,158878,158880,158883,158885,158888],{"class":206,"line":1301},[204,158879,1617],{"class":210},[204,158881,158882],{"class":214}," level ",[204,158884,3035],{"class":210},[204,158886,158887],{"class":319}," \"银卡\"",[204,158889,3825],{"class":214},[204,158891,158892,158895,158897],{"class":206,"line":1307},[204,158893,158894],{"class":214},"    discount ",[204,158896,260],{"class":210},[204,158898,158899],{"class":263}," 0.9\n",[204,158901,158902,158904,158906,158908,158911],{"class":206,"line":1398},[204,158903,157851],{"class":210},[204,158905,158882],{"class":214},[204,158907,3035],{"class":210},[204,158909,158910],{"class":319}," \"金卡\"",[204,158912,3825],{"class":214},[204,158914,158915,158917,158919],{"class":206,"line":1404},[204,158916,158894],{"class":214},[204,158918,260],{"class":210},[204,158920,158921],{"class":263}," 0.8\n",[204,158923,158924,158926,158928,158930,158933],{"class":206,"line":1416},[204,158925,157851],{"class":210},[204,158927,158882],{"class":214},[204,158929,3035],{"class":210},[204,158931,158932],{"class":319}," \"普通\"",[204,158934,3825],{"class":214},[204,158936,158937,158939,158941],{"class":206,"line":1698},[204,158938,158894],{"class":214},[204,158940,260],{"class":210},[204,158942,55785],{"class":263},[204,158944,158945,158947],{"class":206,"line":1703},[204,158946,1787],{"class":210},[204,158948,3825],{"class":214},[204,158950,158951,158953,158955,158958],{"class":206,"line":1709},[204,158952,31385],{"class":263},[204,158954,215],{"class":214},[204,158956,158957],{"class":319},"\"会员等级输入错误，按普通会员计算\"",[204,158959,221],{"class":214},[204,158961,158962],{"class":206,"line":1714},[204,158963,2486],{"emptyLinePlaceholder":135},[204,158965,158966,158969,158971,158974,158976],{"class":206,"line":1728},[204,158967,158968],{"class":214},"pay ",[204,158970,260],{"class":210},[204,158972,158973],{"class":214}," amount ",[204,158975,668],{"class":210},[204,158977,157320],{"class":214},[204,158979,158980],{"class":206,"line":1733},[204,158981,2486],{"emptyLinePlaceholder":135},[204,158983,158984,158986,158989,158991,158994],{"class":206,"line":1739},[204,158985,1617],{"class":210},[204,158987,158988],{"class":214}," pay ",[204,158990,1796],{"class":210},[204,158992,158993],{"class":263}," 500",[204,158995,3825],{"class":214},[204,158997,158998,159001,159003],{"class":206,"line":1760},[204,158999,159000],{"class":214},"    pay ",[204,159002,150297],{"class":210},[204,159004,159005],{"class":263}," 50\n",[204,159007,159008],{"class":206,"line":1765},[204,159009,2486],{"emptyLinePlaceholder":135},[204,159011,159012,159014,159016,159018,159020,159022,159025,159027,159029,159031],{"class":206,"line":1779},[204,159013,30501],{"class":263},[204,159015,215],{"class":214},[204,159017,267],{"class":210},[204,159019,157401],{"class":319},[204,159021,1109],{"class":263},[204,159023,159024],{"class":214},"pay",[204,159026,157204],{"class":210},[204,159028,1159],{"class":263},[204,159030,157057],{"class":319},[204,159032,221],{"class":214},[14,159034,159036],{"id":159035},"_312-易错点","3.12 易错点",[161,159038,159039,159042,159045,159048,159053],{},[71,159040,159041],{},"冒号不能漏。",[71,159043,159044],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[71,159046,159047],{},"多分支判断要注意顺序。",[71,159049,159050,159051,28471],{},"判断相等用 ",[81,159052,3035],{},[71,159054,159055],{},"字符串比较区分大小写：",[196,159057,159059],{"className":30464,"code":159058,"language":30466,"meta":125,"style":125},"\"Y\" == \"y\"  # False\n",[81,159060,159061],{"__ignoreMap":125},[204,159062,159063,159066,159068,159070],{"class":206,"line":207},[204,159064,159065],{"class":319},"\"Y\"",[204,159067,101644],{"class":210},[204,159069,158050],{"class":319},[204,159071,159072],{"class":273},"  # False\n",[19,159074,159075],{},"可转换后再判断：",[196,159077,159079],{"className":30464,"code":159078,"language":30466,"meta":125,"style":125},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[81,159080,159081,159098,159111],{"__ignoreMap":125},[204,159082,159083,159086,159088,159090,159092,159095],{"class":206,"line":207},[204,159084,159085],{"class":214},"answer ",[204,159087,260],{"class":210},[204,159089,60691],{"class":263},[204,159091,215],{"class":214},[204,159093,159094],{"class":319},"\"是否继续(y\u002Fn):\"",[204,159096,159097],{"class":214},").lower()\n",[204,159099,159100,159102,159105,159107,159109],{"class":206,"line":126},[204,159101,1617],{"class":210},[204,159103,159104],{"class":214}," answer ",[204,159106,3035],{"class":210},[204,159108,158050],{"class":319},[204,159110,3825],{"class":214},[204,159112,159113,159115,159117,159120],{"class":206,"line":131},[204,159114,31385],{"class":263},[204,159116,215],{"class":214},[204,159118,159119],{"class":319},"\"继续\"",[204,159121,221],{"class":214},[14,159123,159125],{"id":159124},"_313-本章练习","3.13 本章练习",[161,159127,159128,159131,159134,159137,159147],{},[71,159129,159130],{},"输入年龄，判断是否成年。",[71,159132,159133],{},"输入年份，判断是否为闰年。",[71,159135,159136],{},"输入三个数字，输出最大值。",[71,159138,159139,159140,159143,159144,159146],{},"写登录判断：用户名是 ",[81,159141,159142],{},"admin"," 且密码是 ",[81,159145,15171],{}," 才登录成功。",[71,159148,159149],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5213,159151,159152],{},"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":125,"searchDepth":126,"depth":126,"links":159154},[159155,159156,159157,159158,159159,159160,159165,159166,159167,159168,159169,159170,159171],{"id":157543,"depth":126,"text":157544},{"id":157596,"depth":126,"text":157597},{"id":157700,"depth":126,"text":157701},{"id":157790,"depth":126,"text":157791},{"id":157980,"depth":126,"text":157981},{"id":158103,"depth":126,"text":158104,"children":159161},[159162,159163,159164],{"id":158107,"depth":131,"text":158108},{"id":158164,"depth":131,"text":158165},{"id":158221,"depth":131,"text":158222},{"id":158266,"depth":126,"text":158267},{"id":158357,"depth":126,"text":158358},{"id":158484,"depth":126,"text":158485},{"id":158614,"depth":126,"text":158615},{"id":158799,"depth":126,"text":158800},{"id":159035,"depth":126,"text":159036},{"id":159124,"depth":126,"text":159125},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157535,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159178,"title":159179,"body":159180,"description":132,"extension":133,"meta":160949,"navigation":135,"path":160950,"seo":160951,"stem":160952,"__hash__":160953},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159181,"toc":160929},[159182,159185,159189,159195,159198,159215,159219,159221,159238,159240,159285,159287,159304,159308,159311,159377,159380,159398,159402,159563,159572,159576,159580,159585,159632,159634,159640,159644,159649,159696,159698,159704,159708,159713,159749,159752,159799,159803,159809,159867,159872,159903,159908,159912,159967,159970,160042,160045,160104,160108,160111,160186,160189,160193,160299,160302,160328,160332,160344,160413,160416,160508,160512,160514,160525,160527,160657,160661,160863,160871,160875,160905,160909,160926],[10,159183,159179],{"id":159184},"_4-循环语句",[14,159186,159188],{"id":159187},"_41-为什么需要循环","4.1 为什么需要循环",[19,159190,159191,159192,159194],{},"如果要输出 1 到 100，不应该写 100 行 ",[81,159193,146517],{},"，而应该用循环。",[19,159196,159197],{},"循环适合处理重复任务：",[161,159199,159200,159203,159206,159209,159212],{},[71,159201,159202],{},"重复输出。",[71,159204,159205],{},"重复输入。",[71,159207,159208],{},"遍历数据。",[71,159210,159211],{},"持续执行菜单。",[71,159213,159214],{},"批量处理文件或数据。",[14,159216,159218],{"id":159217},"_42-while循环","4.2 while循环",[19,159220,5268],{},[196,159222,159224],{"className":30464,"code":159223,"language":30466,"meta":125,"style":125},"while 条件:\n    循环体\n",[81,159225,159226,159233],{"__ignoreMap":125},[204,159227,159228,159230],{"class":206,"line":207},[204,159229,108748],{"class":210},[204,159231,159232],{"class":214}," 条件:\n",[204,159234,159235],{"class":206,"line":126},[204,159236,159237],{"class":214},"    循环体\n",[19,159239,15222],{},[196,159241,159243],{"className":30464,"code":159242,"language":30466,"meta":125,"style":125},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[81,159244,159245,159253,159257,159269,159276],{"__ignoreMap":125},[204,159246,159247,159249,159251],{"class":206,"line":207},[204,159248,100234],{"class":214},[204,159250,260],{"class":210},[204,159252,55785],{"class":263},[204,159254,159255],{"class":206,"line":126},[204,159256,2486],{"emptyLinePlaceholder":135},[204,159258,159259,159261,159263,159265,159267],{"class":206,"line":131},[204,159260,108748],{"class":210},[204,159262,9525],{"class":214},[204,159264,1674],{"class":210},[204,159266,2234],{"class":263},[204,159268,3825],{"class":214},[204,159270,159271,159273],{"class":206,"line":1281},[204,159272,31385],{"class":263},[204,159274,159275],{"class":214},"(i)\n",[204,159277,159278,159281,159283],{"class":206,"line":1287},[204,159279,159280],{"class":214},"    i ",[204,159282,9564],{"class":210},[204,159284,55785],{"class":263},[19,159286,81015],{},[161,159288,159289,159295,159298,159301],{},[71,159290,159291,159292,28471],{},"判断条件 ",[81,159293,159294],{},"i \u003C= 5",[71,159296,159297],{},"条件成立，执行循环体。",[71,159299,159300],{},"执行完后回到条件判断。",[71,159302,159303],{},"条件不成立，退出循环。",[14,159305,159307],{"id":159306},"_43-while累加","4.3 while累加",[19,159309,159310],{},"计算 1 到 100 的和：",[196,159312,159314],{"className":30464,"code":159313,"language":30466,"meta":125,"style":125},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[81,159315,159316,159324,159332,159336,159348,159358,159366,159370],{"__ignoreMap":125},[204,159317,159318,159320,159322],{"class":206,"line":207},[204,159319,100234],{"class":214},[204,159321,260],{"class":210},[204,159323,55785],{"class":263},[204,159325,159326,159328,159330],{"class":206,"line":126},[204,159327,157305],{"class":214},[204,159329,260],{"class":210},[204,159331,47419],{"class":263},[204,159333,159334],{"class":206,"line":131},[204,159335,2486],{"emptyLinePlaceholder":135},[204,159337,159338,159340,159342,159344,159346],{"class":206,"line":1281},[204,159339,108748],{"class":210},[204,159341,9525],{"class":214},[204,159343,1674],{"class":210},[204,159345,5841],{"class":263},[204,159347,3825],{"class":214},[204,159349,159350,159353,159355],{"class":206,"line":1287},[204,159351,159352],{"class":214},"    total ",[204,159354,9564],{"class":210},[204,159356,159357],{"class":214}," i\n",[204,159359,159360,159362,159364],{"class":206,"line":1301},[204,159361,159280],{"class":214},[204,159363,9564],{"class":210},[204,159365,55785],{"class":263},[204,159367,159368],{"class":206,"line":1307},[204,159369,2486],{"emptyLinePlaceholder":135},[204,159371,159372,159374],{"class":206,"line":1398},[204,159373,30501],{"class":263},[204,159375,159376],{"class":214},"(total)\n",[19,159378,159379],{},"核心思想：",[161,159381,159382,159387,159392],{},[71,159383,159384,159386],{},[81,159385,654],{}," 控制循环次数。",[71,159388,159389,159391],{},[81,159390,157406],{}," 保存累加结果。",[71,159393,159394,159395,159397],{},"每轮循环都要更新 ",[81,159396,654],{},"，否则可能死循环。",[14,159399,159401],{"id":159400},"_44-while猜数字","4.4 while猜数字",[196,159403,159405],{"className":30464,"code":159404,"language":30466,"meta":125,"style":125},"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",[81,159406,159407,159413,159417,159434,159442,159446,159454,159474,159483,159487,159499,159510,159520,159531,159537,159559],{"__ignoreMap":125},[204,159408,159409,159411],{"class":206,"line":207},[204,159410,30478],{"class":210},[204,159412,45414],{"class":214},[204,159414,159415],{"class":206,"line":126},[204,159416,2486],{"emptyLinePlaceholder":135},[204,159418,159419,159421,159423,159426,159428,159430,159432],{"class":206,"line":131},[204,159420,159085],{"class":214},[204,159422,260],{"class":210},[204,159424,159425],{"class":214}," random.randint(",[204,159427,431],{"class":263},[204,159429,12522],{"class":214},[204,159431,524],{"class":263},[204,159433,221],{"class":214},[204,159435,159436,159438,159440],{"class":206,"line":1281},[204,159437,146736],{"class":214},[204,159439,260],{"class":210},[204,159441,47419],{"class":263},[204,159443,159444],{"class":206,"line":1287},[204,159445,2486],{"emptyLinePlaceholder":135},[204,159447,159448,159450,159452],{"class":206,"line":1301},[204,159449,108748],{"class":210},[204,159451,95378],{"class":263},[204,159453,3825],{"class":214},[204,159455,159456,159459,159461,159463,159465,159467,159469,159472],{"class":206,"line":1307},[204,159457,159458],{"class":214},"    guess ",[204,159460,260],{"class":210},[204,159462,2468],{"class":263},[204,159464,215],{"class":214},[204,159466,53907],{"class":263},[204,159468,215],{"class":214},[204,159470,159471],{"class":319},"\"请输入1到100之间的数字:\"",[204,159473,30583],{"class":214},[204,159475,159476,159479,159481],{"class":206,"line":1398},[204,159477,159478],{"class":214},"    count ",[204,159480,9564],{"class":210},[204,159482,55785],{"class":263},[204,159484,159485],{"class":206,"line":1404},[204,159486,2486],{"emptyLinePlaceholder":135},[204,159488,159489,159491,159494,159496],{"class":206,"line":1416},[204,159490,3187],{"class":210},[204,159492,159493],{"class":214}," guess ",[204,159495,1173],{"class":210},[204,159497,159498],{"class":214}," answer:\n",[204,159500,159501,159503,159505,159508],{"class":206,"line":1698},[204,159502,32537],{"class":263},[204,159504,215],{"class":214},[204,159506,159507],{"class":319},"\"猜大了\"",[204,159509,221],{"class":214},[204,159511,159512,159514,159516,159518],{"class":206,"line":1703},[204,159513,39379],{"class":210},[204,159515,159493],{"class":214},[204,159517,1123],{"class":210},[204,159519,159498],{"class":214},[204,159521,159522,159524,159526,159529],{"class":206,"line":1709},[204,159523,32537],{"class":263},[204,159525,215],{"class":214},[204,159527,159528],{"class":319},"\"猜小了\"",[204,159530,221],{"class":214},[204,159532,159533,159535],{"class":206,"line":1714},[204,159534,158067],{"class":210},[204,159536,3825],{"class":214},[204,159538,159539,159541,159543,159545,159548,159550,159552,159554,159557],{"class":206,"line":1728},[204,159540,32537],{"class":263},[204,159542,215],{"class":214},[204,159544,267],{"class":210},[204,159546,159547],{"class":319},"\"猜对了，一共猜了",[204,159549,1109],{"class":263},[204,159551,84520],{"class":214},[204,159553,1159],{"class":263},[204,159555,159556],{"class":319},"次\"",[204,159558,221],{"class":214},[204,159560,159561],{"class":206,"line":1733},[204,159562,31713],{"class":210},[19,159564,159565,159568,159569,159571],{},[81,159566,159567],{},"while True"," 表示无限循环，通常配合 ",[81,159570,2139],{}," 使用。",[14,159573,159575],{"id":159574},"_45-break和continue","4.5 break和continue",[49,159577,159579],{"id":159578},"_451-break","4.5.1 break",[19,159581,159582,159584],{},[81,159583,2139],{}," 直接结束整个循环。",[196,159586,159588],{"className":30464,"code":159587,"language":30466,"meta":125,"style":125},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[81,159589,159590,159610,159622,159626],{"__ignoreMap":125},[204,159591,159592,159594,159596,159598,159600,159602,159604,159606,159608],{"class":206,"line":207},[204,159593,3111],{"class":210},[204,159595,9525],{"class":214},[204,159597,26129],{"class":210},[204,159599,32529],{"class":263},[204,159601,215],{"class":214},[204,159603,431],{"class":263},[204,159605,12522],{"class":214},[204,159607,557],{"class":263},[204,159609,30872],{"class":214},[204,159611,159612,159614,159616,159618,159620],{"class":206,"line":126},[204,159613,3187],{"class":210},[204,159615,9525],{"class":214},[204,159617,3035],{"class":210},[204,159619,78156],{"class":263},[204,159621,3825],{"class":214},[204,159623,159624],{"class":206,"line":131},[204,159625,31713],{"class":210},[204,159627,159628,159630],{"class":206,"line":1281},[204,159629,31385],{"class":263},[204,159631,159275],{"class":214},[19,159633,146502],{},[196,159635,159638],{"className":159636,"code":159637,"language":5274,"meta":125},[5272],"1\n2\n",[81,159639,159637],{"__ignoreMap":125},[49,159641,159643],{"id":159642},"_452-continue","4.5.2 continue",[19,159645,159646,159648],{},[81,159647,154717],{}," 跳过本轮剩余代码，进入下一轮循环。",[196,159650,159652],{"className":30464,"code":159651,"language":30466,"meta":125,"style":125},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[81,159653,159654,159674,159686,159690],{"__ignoreMap":125},[204,159655,159656,159658,159660,159662,159664,159666,159668,159670,159672],{"class":206,"line":207},[204,159657,3111],{"class":210},[204,159659,9525],{"class":214},[204,159661,26129],{"class":210},[204,159663,32529],{"class":263},[204,159665,215],{"class":214},[204,159667,431],{"class":263},[204,159669,12522],{"class":214},[204,159671,557],{"class":263},[204,159673,30872],{"class":214},[204,159675,159676,159678,159680,159682,159684],{"class":206,"line":126},[204,159677,3187],{"class":210},[204,159679,9525],{"class":214},[204,159681,3035],{"class":210},[204,159683,78156],{"class":263},[204,159685,3825],{"class":214},[204,159687,159688],{"class":206,"line":131},[204,159689,148557],{"class":210},[204,159691,159692,159694],{"class":206,"line":1281},[204,159693,31385],{"class":263},[204,159695,159275],{"class":214},[19,159697,146502],{},[196,159699,159702],{"className":159700,"code":159701,"language":5274,"meta":125},[5272],"1\n2\n4\n5\n",[81,159703,159701],{"__ignoreMap":125},[14,159705,159707],{"id":159706},"_46-for循环","4.6 for循环",[19,159709,159710,159712],{},[81,159711,3111],{}," 常用于遍历序列。",[196,159714,159716],{"className":30464,"code":159715,"language":30466,"meta":125,"style":125},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[81,159717,159718,159727,159731,159742],{"__ignoreMap":125},[204,159719,159720,159722,159724],{"class":206,"line":207},[204,159721,146581],{"class":214},[204,159723,260],{"class":210},[204,159725,159726],{"class":319}," \"python\"\n",[204,159728,159729],{"class":206,"line":126},[204,159730,2486],{"emptyLinePlaceholder":135},[204,159732,159733,159735,159738,159740],{"class":206,"line":131},[204,159734,3111],{"class":210},[204,159736,159737],{"class":214}," ch ",[204,159739,26129],{"class":210},[204,159741,158444],{"class":214},[204,159743,159744,159746],{"class":206,"line":1281},[204,159745,31385],{"class":263},[204,159747,159748],{"class":214},"(ch)\n",[19,159750,159751],{},"遍历列表：",[196,159753,159755],{"className":30464,"code":159754,"language":30466,"meta":125,"style":125},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[81,159756,159757,159779,159783,159793],{"__ignoreMap":125},[204,159758,159759,159762,159764,159766,159768,159770,159772,159774,159777],{"class":206,"line":207},[204,159760,159761],{"class":214},"students ",[204,159763,260],{"class":210},[204,159765,52312],{"class":214},[204,159767,149933],{"class":319},[204,159769,12522],{"class":214},[204,159771,150981],{"class":319},[204,159773,12522],{"class":214},[204,159775,159776],{"class":319},"\"小刚\"",[204,159778,33332],{"class":214},[204,159780,159781],{"class":206,"line":126},[204,159782,2486],{"emptyLinePlaceholder":135},[204,159784,159785,159787,159789,159791],{"class":206,"line":131},[204,159786,3111],{"class":210},[204,159788,152182],{"class":214},[204,159790,26129],{"class":210},[204,159792,152187],{"class":214},[204,159794,159795,159797],{"class":206,"line":1281},[204,159796,31385],{"class":263},[204,159798,150087],{"class":214},[14,159800,159802],{"id":159801},"_47-range函数","4.7 range函数",[19,159804,159805,159808],{},[81,159806,159807],{},"range()"," 用于生成整数序列。",[196,159810,159812],{"className":30464,"code":159811,"language":30466,"meta":125,"style":125},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[81,159813,159814,159828,159846],{"__ignoreMap":125},[204,159815,159816,159818,159820,159822,159825],{"class":206,"line":207},[204,159817,33502],{"class":263},[204,159819,215],{"class":214},[204,159821,532],{"class":263},[204,159823,159824],{"class":214},")          ",[204,159826,159827],{"class":273},"# 0,1,2,3,4\n",[204,159829,159830,159832,159834,159836,159838,159840,159843],{"class":206,"line":126},[204,159831,33502],{"class":263},[204,159833,215],{"class":214},[204,159835,431],{"class":263},[204,159837,12522],{"class":214},[204,159839,532],{"class":263},[204,159841,159842],{"class":214},")       ",[204,159844,159845],{"class":273},"# 1,2,3,4\n",[204,159847,159848,159850,159852,159854,159856,159858,159860,159862,159864],{"class":206,"line":131},[204,159849,33502],{"class":263},[204,159851,215],{"class":214},[204,159853,431],{"class":263},[204,159855,12522],{"class":214},[204,159857,659],{"class":263},[204,159859,12522],{"class":214},[204,159861,292],{"class":263},[204,159863,155706],{"class":214},[204,159865,159866],{"class":273},"# 1,3,5,7,9\n",[19,159868,159869,159870,24705],{},"配合 ",[81,159871,3111],{},[196,159873,159875],{"className":30464,"code":159874,"language":30466,"meta":125,"style":125},"for i in range(1, 6):\n    print(i)\n",[81,159876,159877,159897],{"__ignoreMap":125},[204,159878,159879,159881,159883,159885,159887,159889,159891,159893,159895],{"class":206,"line":207},[204,159880,3111],{"class":210},[204,159882,9525],{"class":214},[204,159884,26129],{"class":210},[204,159886,32529],{"class":263},[204,159888,215],{"class":214},[204,159890,431],{"class":263},[204,159892,12522],{"class":214},[204,159894,557],{"class":263},[204,159896,30872],{"class":214},[204,159898,159899,159901],{"class":206,"line":126},[204,159900,31385],{"class":263},[204,159902,159275],{"class":214},[19,159904,9112,159905,159907],{},[81,159906,33502],{}," 的结束值不包含在内。",[14,159909,159911],{"id":159910},"_48-for循环求和","4.8 for循环求和",[196,159913,159915],{"className":30464,"code":159914,"language":30466,"meta":125,"style":125},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[81,159916,159917,159925,159929,159949,159957,159961],{"__ignoreMap":125},[204,159918,159919,159921,159923],{"class":206,"line":207},[204,159920,157305],{"class":214},[204,159922,260],{"class":210},[204,159924,47419],{"class":263},[204,159926,159927],{"class":206,"line":126},[204,159928,2486],{"emptyLinePlaceholder":135},[204,159930,159931,159933,159935,159937,159939,159941,159943,159945,159947],{"class":206,"line":131},[204,159932,3111],{"class":210},[204,159934,9525],{"class":214},[204,159936,26129],{"class":210},[204,159938,32529],{"class":263},[204,159940,215],{"class":214},[204,159942,431],{"class":263},[204,159944,12522],{"class":214},[204,159946,550],{"class":263},[204,159948,30872],{"class":214},[204,159950,159951,159953,159955],{"class":206,"line":1281},[204,159952,159352],{"class":214},[204,159954,9564],{"class":210},[204,159956,159357],{"class":214},[204,159958,159959],{"class":206,"line":1287},[204,159960,2486],{"emptyLinePlaceholder":135},[204,159962,159963,159965],{"class":206,"line":1301},[204,159964,30501],{"class":263},[204,159966,159376],{"class":214},[19,159968,159969],{},"求偶数和：",[196,159971,159973],{"className":30464,"code":159972,"language":30466,"meta":125,"style":125},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[81,159974,159975,159983,159987,160007,160023,160032,160036],{"__ignoreMap":125},[204,159976,159977,159979,159981],{"class":206,"line":207},[204,159978,157305],{"class":214},[204,159980,260],{"class":210},[204,159982,47419],{"class":263},[204,159984,159985],{"class":206,"line":126},[204,159986,2486],{"emptyLinePlaceholder":135},[204,159988,159989,159991,159993,159995,159997,159999,160001,160003,160005],{"class":206,"line":131},[204,159990,3111],{"class":210},[204,159992,9525],{"class":214},[204,159994,26129],{"class":210},[204,159996,32529],{"class":263},[204,159998,215],{"class":214},[204,160000,431],{"class":263},[204,160002,12522],{"class":214},[204,160004,550],{"class":263},[204,160006,30872],{"class":214},[204,160008,160009,160011,160013,160015,160017,160019,160021],{"class":206,"line":1281},[204,160010,3187],{"class":210},[204,160012,9525],{"class":214},[204,160014,541],{"class":210},[204,160016,14842],{"class":263},[204,160018,101644],{"class":210},[204,160020,4179],{"class":263},[204,160022,3825],{"class":214},[204,160024,160025,160028,160030],{"class":206,"line":1287},[204,160026,160027],{"class":214},"        total ",[204,160029,9564],{"class":210},[204,160031,159357],{"class":214},[204,160033,160034],{"class":206,"line":1301},[204,160035,2486],{"emptyLinePlaceholder":135},[204,160037,160038,160040],{"class":206,"line":1307},[204,160039,30501],{"class":263},[204,160041,159376],{"class":214},[19,160043,160044],{},"也可以：",[196,160046,160048],{"className":30464,"code":160047,"language":30466,"meta":125,"style":125},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[81,160049,160050,160058,160062,160086,160094,160098],{"__ignoreMap":125},[204,160051,160052,160054,160056],{"class":206,"line":207},[204,160053,157305],{"class":214},[204,160055,260],{"class":210},[204,160057,47419],{"class":263},[204,160059,160060],{"class":206,"line":126},[204,160061,2486],{"emptyLinePlaceholder":135},[204,160063,160064,160066,160068,160070,160072,160074,160076,160078,160080,160082,160084],{"class":206,"line":131},[204,160065,3111],{"class":210},[204,160067,9525],{"class":214},[204,160069,26129],{"class":210},[204,160071,32529],{"class":263},[204,160073,215],{"class":214},[204,160075,292],{"class":263},[204,160077,12522],{"class":214},[204,160079,550],{"class":263},[204,160081,12522],{"class":214},[204,160083,292],{"class":263},[204,160085,30872],{"class":214},[204,160087,160088,160090,160092],{"class":206,"line":1281},[204,160089,159352],{"class":214},[204,160091,9564],{"class":210},[204,160093,159357],{"class":214},[204,160095,160096],{"class":206,"line":1287},[204,160097,2486],{"emptyLinePlaceholder":135},[204,160099,160100,160102],{"class":206,"line":1301},[204,160101,30501],{"class":263},[204,160103,159376],{"class":214},[14,160105,160107],{"id":160106},"_49-循环嵌套","4.9 循环嵌套",[19,160109,160110],{},"嵌套循环就是循环里面再写循环。",[196,160112,160114],{"className":30464,"code":160113,"language":30466,"meta":125,"style":125},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[81,160115,160116,160136,160156],{"__ignoreMap":125},[204,160117,160118,160120,160122,160124,160126,160128,160130,160132,160134],{"class":206,"line":207},[204,160119,3111],{"class":210},[204,160121,9525],{"class":214},[204,160123,26129],{"class":210},[204,160125,32529],{"class":263},[204,160127,215],{"class":214},[204,160129,431],{"class":263},[204,160131,12522],{"class":214},[204,160133,506],{"class":263},[204,160135,30872],{"class":214},[204,160137,160138,160140,160142,160144,160146,160148,160150,160152,160154],{"class":206,"line":126},[204,160139,3287],{"class":210},[204,160141,9587],{"class":214},[204,160143,26129],{"class":210},[204,160145,32529],{"class":263},[204,160147,215],{"class":214},[204,160149,431],{"class":263},[204,160151,12522],{"class":214},[204,160153,506],{"class":263},[204,160155,30872],{"class":214},[204,160157,160158,160160,160162,160164,160167,160169,160171,160173,160176,160178,160180,160182,160184],{"class":206,"line":131},[204,160159,32537],{"class":263},[204,160161,215],{"class":214},[204,160163,267],{"class":210},[204,160165,160166],{"class":319},"\"i=",[204,160168,1109],{"class":263},[204,160170,654],{"class":214},[204,160172,1159],{"class":263},[204,160174,160175],{"class":319},", j=",[204,160177,1109],{"class":263},[204,160179,680],{"class":214},[204,160181,1159],{"class":263},[204,160183,464],{"class":319},[204,160185,221],{"class":214},[19,160187,160188],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160190,160192],{"id":160191},"_410-九九乘法表","4.10 九九乘法表",[196,160194,160196],{"className":30464,"code":160195,"language":30466,"meta":125,"style":125},"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",[81,160197,160198,160218,160241,160293],{"__ignoreMap":125},[204,160199,160200,160202,160204,160206,160208,160210,160212,160214,160216],{"class":206,"line":207},[204,160201,3111],{"class":210},[204,160203,9525],{"class":214},[204,160205,26129],{"class":210},[204,160207,32529],{"class":263},[204,160209,215],{"class":214},[204,160211,431],{"class":263},[204,160213,12522],{"class":214},[204,160215,659],{"class":263},[204,160217,30872],{"class":214},[204,160219,160220,160222,160224,160226,160228,160230,160232,160235,160237,160239],{"class":206,"line":126},[204,160221,3287],{"class":210},[204,160223,9587],{"class":214},[204,160225,26129],{"class":210},[204,160227,32529],{"class":263},[204,160229,215],{"class":214},[204,160231,431],{"class":263},[204,160233,160234],{"class":214},", i ",[204,160236,694],{"class":210},[204,160238,25205],{"class":263},[204,160240,30872],{"class":214},[204,160242,160243,160245,160247,160249,160251,160253,160255,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291],{"class":206,"line":131},[204,160244,32537],{"class":263},[204,160246,215],{"class":214},[204,160248,267],{"class":210},[204,160250,464],{"class":319},[204,160252,1109],{"class":263},[204,160254,680],{"class":214},[204,160256,1159],{"class":263},[204,160258,668],{"class":319},[204,160260,1109],{"class":263},[204,160262,654],{"class":214},[204,160264,1159],{"class":263},[204,160266,260],{"class":319},[204,160268,1109],{"class":263},[204,160270,100234],{"class":214},[204,160272,668],{"class":210},[204,160274,3496],{"class":214},[204,160276,1159],{"class":263},[204,160278,464],{"class":319},[204,160280,12522],{"class":214},[204,160282,45887],{"class":5303},[204,160284,260],{"class":210},[204,160286,464],{"class":319},[204,160288,1317],{"class":263},[204,160290,464],{"class":319},[204,160292,221],{"class":214},[204,160294,160295,160297],{"class":206,"line":1281},[204,160296,31385],{"class":263},[204,160298,2062],{"class":214},[19,160300,160301],{},"关键点：",[161,160303,160304,160310,160316,160322],{},[71,160305,160306,160307,160309],{},"外层 ",[81,160308,654],{}," 控制行。",[71,160311,160312,160313,160315],{},"内层 ",[81,160314,680],{}," 控制列。",[71,160317,160318,160319,160321],{},"每行结束后用 ",[81,160320,146517],{}," 换行。",[71,160323,160324,160327],{},[81,160325,160326],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160329,160331],{"id":160330},"_411-循环else","4.11 循环else",[19,160333,160334,160335,160337,160338,160340,160341,160343],{},"Python 的循环可以带 ",[81,160336,1787],{},"。当循环正常结束时执行 ",[81,160339,1787],{},"，如果被 ",[81,160342,2139],{}," 打断，则不执行。",[196,160345,160347],{"className":30464,"code":160346,"language":30466,"meta":125,"style":125},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[81,160348,160349,160369,160381,160392,160396,160402],{"__ignoreMap":125},[204,160350,160351,160353,160355,160357,160359,160361,160363,160365,160367],{"class":206,"line":207},[204,160352,3111],{"class":210},[204,160354,9525],{"class":214},[204,160356,26129],{"class":210},[204,160358,32529],{"class":263},[204,160360,215],{"class":214},[204,160362,431],{"class":263},[204,160364,12522],{"class":214},[204,160366,557],{"class":263},[204,160368,30872],{"class":214},[204,160370,160371,160373,160375,160377,160379],{"class":206,"line":126},[204,160372,3187],{"class":210},[204,160374,9525],{"class":214},[204,160376,3035],{"class":210},[204,160378,2124],{"class":263},[204,160380,3825],{"class":214},[204,160382,160383,160385,160387,160390],{"class":206,"line":131},[204,160384,32537],{"class":263},[204,160386,215],{"class":214},[204,160388,160389],{"class":319},"\"找到了\"",[204,160391,221],{"class":214},[204,160393,160394],{"class":206,"line":1281},[204,160395,31713],{"class":210},[204,160397,160398,160400],{"class":206,"line":1287},[204,160399,1787],{"class":210},[204,160401,3825],{"class":214},[204,160403,160404,160406,160408,160411],{"class":206,"line":1301},[204,160405,31385],{"class":263},[204,160407,215],{"class":214},[204,160409,160410],{"class":319},"\"没找到\"",[204,160412,221],{"class":214},[19,160414,160415],{},"常用于搜索。",[196,160417,160419],{"className":30464,"code":160418,"language":30466,"meta":125,"style":125},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[81,160420,160421,160442,160451,160455,160467,160478,160488,160492,160498],{"__ignoreMap":125},[204,160422,160423,160426,160428,160430,160432,160434,160436,160438,160440],{"class":206,"line":207},[204,160424,160425],{"class":214},"names ",[204,160427,260],{"class":210},[204,160429,52312],{"class":214},[204,160431,149933],{"class":319},[204,160433,12522],{"class":214},[204,160435,150981],{"class":319},[204,160437,12522],{"class":214},[204,160439,159776],{"class":319},[204,160441,33332],{"class":214},[204,160443,160444,160446,160448],{"class":206,"line":126},[204,160445,111663],{"class":214},[204,160447,260],{"class":210},[204,160449,160450],{"class":319}," \"小李\"\n",[204,160452,160453],{"class":206,"line":131},[204,160454,2486],{"emptyLinePlaceholder":135},[204,160456,160457,160459,160462,160464],{"class":206,"line":1281},[204,160458,3111],{"class":210},[204,160460,160461],{"class":214}," name ",[204,160463,26129],{"class":210},[204,160465,160466],{"class":214}," names:\n",[204,160468,160469,160471,160473,160475],{"class":206,"line":1287},[204,160470,3187],{"class":210},[204,160472,160461],{"class":214},[204,160474,3035],{"class":210},[204,160476,160477],{"class":214}," target:\n",[204,160479,160480,160482,160484,160486],{"class":206,"line":1301},[204,160481,32537],{"class":263},[204,160483,215],{"class":214},[204,160485,160389],{"class":319},[204,160487,221],{"class":214},[204,160489,160490],{"class":206,"line":1307},[204,160491,31713],{"class":210},[204,160493,160494,160496],{"class":206,"line":1398},[204,160495,1787],{"class":210},[204,160497,3825],{"class":214},[204,160499,160500,160502,160504,160506],{"class":206,"line":1404},[204,160501,31385],{"class":263},[204,160503,215],{"class":214},[204,160505,160410],{"class":319},[204,160507,221],{"class":214},[14,160509,160511],{"id":160510},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160513,123377],{},[161,160515,160516,160519,160522],{},[71,160517,160518],{},"用户最多输入 3 次密码。",[71,160520,160521],{},"密码正确则登录成功。",[71,160523,160524],{},"3 次都错误则锁定账号。",[19,160526,10122],{},[196,160528,160530],{"className":30464,"code":160529,"language":30466,"meta":125,"style":125},"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",[81,160531,160532,160542,160546,160562,160578,160582,160594,160605,160609,160615,160640,160646],{"__ignoreMap":125},[204,160533,160534,160537,160539],{"class":206,"line":207},[204,160535,160536],{"class":214},"password ",[204,160538,260],{"class":210},[204,160540,160541],{"class":319}," \"123456\"\n",[204,160543,160544],{"class":206,"line":126},[204,160545,2486],{"emptyLinePlaceholder":135},[204,160547,160548,160550,160552,160554,160556,160558,160560],{"class":206,"line":131},[204,160549,3111],{"class":210},[204,160551,9525],{"class":214},[204,160553,26129],{"class":210},[204,160555,32529],{"class":263},[204,160557,215],{"class":214},[204,160559,286],{"class":263},[204,160561,30872],{"class":214},[204,160563,160564,160567,160569,160571,160573,160576],{"class":206,"line":1281},[204,160565,160566],{"class":214},"    user_password ",[204,160568,260],{"class":210},[204,160570,60691],{"class":263},[204,160572,215],{"class":214},[204,160574,160575],{"class":319},"\"请输入密码:\"",[204,160577,221],{"class":214},[204,160579,160580],{"class":206,"line":1287},[204,160581,2486],{"emptyLinePlaceholder":135},[204,160583,160584,160586,160589,160591],{"class":206,"line":1301},[204,160585,3187],{"class":210},[204,160587,160588],{"class":214}," user_password ",[204,160590,3035],{"class":210},[204,160592,160593],{"class":214}," password:\n",[204,160595,160596,160598,160600,160603],{"class":206,"line":1307},[204,160597,32537],{"class":263},[204,160599,215],{"class":214},[204,160601,160602],{"class":319},"\"登录成功\"",[204,160604,221],{"class":214},[204,160606,160607],{"class":206,"line":1398},[204,160608,31713],{"class":210},[204,160610,160611,160613],{"class":206,"line":1404},[204,160612,158067],{"class":210},[204,160614,3825],{"class":214},[204,160616,160617,160619,160621,160623,160626,160629,160631,160633,160635,160638],{"class":206,"line":1416},[204,160618,32537],{"class":263},[204,160620,215],{"class":214},[204,160622,267],{"class":210},[204,160624,160625],{"class":319},"\"密码错误，还剩",[204,160627,160628],{"class":263},"{2",[204,160630,52357],{"class":210},[204,160632,3118],{"class":214},[204,160634,1159],{"class":263},[204,160636,160637],{"class":319},"次机会\"",[204,160639,221],{"class":214},[204,160641,160642,160644],{"class":206,"line":1698},[204,160643,1787],{"class":210},[204,160645,3825],{"class":214},[204,160647,160648,160650,160652,160655],{"class":206,"line":1703},[204,160649,31385],{"class":263},[204,160651,215],{"class":214},[204,160653,160654],{"class":319},"\"账号已锁定\"",[204,160656,221],{"class":214},[14,160658,160660],{"id":160659},"_413-小案例菜单程序","4.13 小案例：菜单程序",[196,160662,160664],{"className":30464,"code":160663,"language":30466,"meta":125,"style":125},"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",[81,160665,160666,160674,160685,160696,160707,160718,160729,160733,160748,160752,160764,160775,160787,160798,160810,160821,160833,160843,160847,160853],{"__ignoreMap":125},[204,160667,160668,160670,160672],{"class":206,"line":207},[204,160669,108748],{"class":210},[204,160671,95378],{"class":263},[204,160673,3825],{"class":214},[204,160675,160676,160678,160680,160683],{"class":206,"line":126},[204,160677,31385],{"class":263},[204,160679,215],{"class":214},[204,160681,160682],{"class":319},"\"====== 菜单 ======\"",[204,160684,221],{"class":214},[204,160686,160687,160689,160691,160694],{"class":206,"line":131},[204,160688,31385],{"class":263},[204,160690,215],{"class":214},[204,160692,160693],{"class":319},"\"1. 查询余额\"",[204,160695,221],{"class":214},[204,160697,160698,160700,160702,160705],{"class":206,"line":1281},[204,160699,31385],{"class":263},[204,160701,215],{"class":214},[204,160703,160704],{"class":319},"\"2. 存款\"",[204,160706,221],{"class":214},[204,160708,160709,160711,160713,160716],{"class":206,"line":1287},[204,160710,31385],{"class":263},[204,160712,215],{"class":214},[204,160714,160715],{"class":319},"\"3. 取款\"",[204,160717,221],{"class":214},[204,160719,160720,160722,160724,160727],{"class":206,"line":1301},[204,160721,31385],{"class":263},[204,160723,215],{"class":214},[204,160725,160726],{"class":319},"\"0. 退出\"",[204,160728,221],{"class":214},[204,160730,160731],{"class":206,"line":1307},[204,160732,2486],{"emptyLinePlaceholder":135},[204,160734,160735,160738,160740,160742,160744,160746],{"class":206,"line":1398},[204,160736,160737],{"class":214},"    choice ",[204,160739,260],{"class":210},[204,160741,60691],{"class":263},[204,160743,215],{"class":214},[204,160745,153118],{"class":319},[204,160747,221],{"class":214},[204,160749,160750],{"class":206,"line":1404},[204,160751,2486],{"emptyLinePlaceholder":135},[204,160753,160754,160756,160758,160760,160762],{"class":206,"line":1416},[204,160755,3187],{"class":210},[204,160757,153131],{"class":214},[204,160759,3035],{"class":210},[204,160761,153136],{"class":319},[204,160763,3825],{"class":214},[204,160765,160766,160768,160770,160773],{"class":206,"line":1698},[204,160767,32537],{"class":263},[204,160769,215],{"class":214},[204,160771,160772],{"class":319},"\"余额为1000元\"",[204,160774,221],{"class":214},[204,160776,160777,160779,160781,160783,160785],{"class":206,"line":1703},[204,160778,39379],{"class":210},[204,160780,153131],{"class":214},[204,160782,3035],{"class":210},[204,160784,153155],{"class":319},[204,160786,3825],{"class":214},[204,160788,160789,160791,160793,160796],{"class":206,"line":1709},[204,160790,32537],{"class":263},[204,160792,215],{"class":214},[204,160794,160795],{"class":319},"\"存款功能\"",[204,160797,221],{"class":214},[204,160799,160800,160802,160804,160806,160808],{"class":206,"line":1714},[204,160801,39379],{"class":210},[204,160803,153131],{"class":214},[204,160805,3035],{"class":210},[204,160807,153173],{"class":319},[204,160809,3825],{"class":214},[204,160811,160812,160814,160816,160819],{"class":206,"line":1728},[204,160813,32537],{"class":263},[204,160815,215],{"class":214},[204,160817,160818],{"class":319},"\"取款功能\"",[204,160820,221],{"class":214},[204,160822,160823,160825,160827,160829,160831],{"class":206,"line":1733},[204,160824,39379],{"class":210},[204,160826,153131],{"class":214},[204,160828,3035],{"class":210},[204,160830,153227],{"class":319},[204,160832,3825],{"class":214},[204,160834,160835,160837,160839,160841],{"class":206,"line":1739},[204,160836,32537],{"class":263},[204,160838,215],{"class":214},[204,160840,153238],{"class":319},[204,160842,221],{"class":214},[204,160844,160845],{"class":206,"line":1760},[204,160846,31713],{"class":210},[204,160848,160849,160851],{"class":206,"line":1765},[204,160850,158067],{"class":210},[204,160852,3825],{"class":214},[204,160854,160855,160857,160859,160861],{"class":206,"line":1779},[204,160856,32537],{"class":263},[204,160858,215],{"class":214},[204,160860,153259],{"class":319},[204,160862,221],{"class":214},[19,160864,160865,160866,160868,160869,28471],{},"菜单类程序通常使用 ",[81,160867,159567],{},"，用户选择退出时 ",[81,160870,2139],{},[14,160872,160874],{"id":160873},"_414-易错点","4.14 易错点",[161,160876,160877,160882,160888,160896,160902],{},[71,160878,160879,160881],{},[81,160880,108748],{}," 循环必须更新控制变量。",[71,160883,160884,160887],{},[81,160885,160886],{},"range(1, 10)"," 不包含 10。",[71,160889,160890,160892,160893,160895],{},[81,160891,2139],{}," 结束整个循环，",[81,160894,154717],{}," 只跳过本轮。",[71,160897,160898,160899,160901],{},"嵌套循环中，",[81,160900,2139],{}," 只跳出当前所在的一层循环。",[71,160903,160904],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160906,160908],{"id":160907},"_415-本章练习","4.15 本章练习",[161,160910,160911,160914,160917,160920,160923],{},[71,160912,160913],{},"输出 1 到 100。",[71,160915,160916],{},"计算 1 到 100 的偶数和。",[71,160918,160919],{},"输出 100 以内能被 3 和 5 同时整除的数。",[71,160921,160922],{},"编写猜数字游戏，限制最多猜 7 次。",[71,160924,160925],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5213,160927,160928],{},"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":125,"searchDepth":126,"depth":126,"links":160930},[160931,160932,160933,160934,160935,160939,160940,160941,160942,160943,160944,160945,160946,160947,160948],{"id":159187,"depth":126,"text":159188},{"id":159217,"depth":126,"text":159218},{"id":159306,"depth":126,"text":159307},{"id":159400,"depth":126,"text":159401},{"id":159574,"depth":126,"text":159575,"children":160936},[160937,160938],{"id":159578,"depth":131,"text":159579},{"id":159642,"depth":131,"text":159643},{"id":159706,"depth":126,"text":159707},{"id":159801,"depth":126,"text":159802},{"id":159910,"depth":126,"text":159911},{"id":160106,"depth":126,"text":160107},{"id":160191,"depth":126,"text":160192},{"id":160330,"depth":126,"text":160331},{"id":160510,"depth":126,"text":160511},{"id":160659,"depth":126,"text":160660},{"id":160873,"depth":126,"text":160874},{"id":160907,"depth":126,"text":160908},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159179,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160955,"title":160956,"body":160957,"description":132,"extension":133,"meta":162962,"navigation":135,"path":162963,"seo":162964,"stem":162965,"__hash__":162966},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160958,"toc":162942},[160959,160962,160966,160969,160972,160986,160989,161003,161007,161009,161028,161030,161077,161079,161093,161097,161171,161174,161178,161181,161240,161248,161251,161304,161307,161311,161316,161371,161379,161429,161433,161438,161446,161545,161551,161555,161560,161563,161574,161615,161628,161632,161635,161671,161674,161687,161690,161750,161754,161758,161761,161812,161816,161819,161866,161872,161938,161941,161945,161948,162064,162067,162071,162074,162180,162184,162187,162225,162228,162270,162273,162333,162336,162340,162804,162807,162811,162838,162844,162905,162909,162939],[10,160960,160956],{"id":160961},"_5-函数基础",[14,160963,160965],{"id":160964},"_51-为什么需要函数","5.1 为什么需要函数",[19,160967,160968],{},"函数用于封装一段可以重复使用的代码。",[19,160970,160971],{},"不使用函数的问题：",[161,160973,160974,160977,160980,160983],{},[71,160975,160976],{},"重复代码多。",[71,160978,160979],{},"修改逻辑时容易漏改。",[71,160981,160982],{},"主流程不清晰。",[71,160984,160985],{},"程序越写越长，难以维护。",[19,160987,160988],{},"使用函数后的好处：",[161,160990,160991,160994,160997,161000],{},[71,160992,160993],{},"提高复用性。",[71,160995,160996],{},"提高可读性。",[71,160998,160999],{},"便于调试。",[71,161001,161002],{},"便于分工。",[14,161004,161006],{"id":161005},"_52-函数定义","5.2 函数定义",[19,161008,5268],{},[196,161010,161012],{"className":30464,"code":161011,"language":30466,"meta":125,"style":125},"def 函数名():\n    函数体\n",[81,161013,161014,161023],{"__ignoreMap":125},[204,161015,161016,161018,161021],{"class":206,"line":207},[204,161017,32033],{"class":210},[204,161019,161020],{"class":2049}," 函数名",[204,161022,32039],{"class":214},[204,161024,161025],{"class":206,"line":126},[204,161026,161027],{"class":214},"    函数体\n",[19,161029,15222],{},[196,161031,161033],{"className":30464,"code":161032,"language":30466,"meta":125,"style":125},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[81,161034,161035,161044,161054,161064,161068,161072],{"__ignoreMap":125},[204,161036,161037,161039,161042],{"class":206,"line":207},[204,161038,32033],{"class":210},[204,161040,161041],{"class":2049}," say_hello",[204,161043,32039],{"class":214},[204,161045,161046,161048,161050,161052],{"class":206,"line":126},[204,161047,31385],{"class":263},[204,161049,215],{"class":214},[204,161051,5931],{"class":319},[204,161053,221],{"class":214},[204,161055,161056,161058,161060,161062],{"class":206,"line":131},[204,161057,31385],{"class":263},[204,161059,215],{"class":214},[204,161061,146684],{"class":319},[204,161063,221],{"class":214},[204,161065,161066],{"class":206,"line":1281},[204,161067,2486],{"emptyLinePlaceholder":135},[204,161069,161070],{"class":206,"line":1287},[204,161071,2486],{"emptyLinePlaceholder":135},[204,161073,161074],{"class":206,"line":1301},[204,161075,161076],{"class":214},"say_hello()\n",[19,161078,9112],{},[161,161080,161081,161084,161087,161090],{},[71,161082,161083],{},"函数必须先定义，再调用。",[71,161085,161086],{},"函数名遵循变量命名规则。",[71,161088,161089],{},"函数体需要缩进。",[71,161091,161092],{},"函数不调用就不会执行。",[14,161094,161096],{"id":161095},"_53-函数调用","5.3 函数调用",[196,161098,161100],{"className":30464,"code":161099,"language":30466,"meta":125,"style":125},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[81,161101,161102,161111,161122,161133,161144,161154,161158,161162,161167],{"__ignoreMap":125},[204,161103,161104,161106,161109],{"class":206,"line":207},[204,161105,32033],{"class":210},[204,161107,161108],{"class":2049}," print_menu",[204,161110,32039],{"class":214},[204,161112,161113,161115,161117,161120],{"class":206,"line":126},[204,161114,31385],{"class":263},[204,161116,215],{"class":214},[204,161118,161119],{"class":319},"\"1. 查询\"",[204,161121,221],{"class":214},[204,161123,161124,161126,161128,161131],{"class":206,"line":131},[204,161125,31385],{"class":263},[204,161127,215],{"class":214},[204,161129,161130],{"class":319},"\"2. 添加\"",[204,161132,221],{"class":214},[204,161134,161135,161137,161139,161142],{"class":206,"line":1281},[204,161136,31385],{"class":263},[204,161138,215],{"class":214},[204,161140,161141],{"class":319},"\"3. 删除\"",[204,161143,221],{"class":214},[204,161145,161146,161148,161150,161152],{"class":206,"line":1287},[204,161147,31385],{"class":263},[204,161149,215],{"class":214},[204,161151,160726],{"class":319},[204,161153,221],{"class":214},[204,161155,161156],{"class":206,"line":1301},[204,161157,2486],{"emptyLinePlaceholder":135},[204,161159,161160],{"class":206,"line":1307},[204,161161,2486],{"emptyLinePlaceholder":135},[204,161163,161164],{"class":206,"line":1398},[204,161165,161166],{"class":214},"print_menu()\n",[204,161168,161169],{"class":206,"line":1404},[204,161170,161166],{"class":214},[19,161172,161173],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161175,161177],{"id":161176},"_54-参数","5.4 参数",[19,161179,161180],{},"参数用于向函数传递数据。",[196,161182,161184],{"className":30464,"code":161183,"language":30466,"meta":125,"style":125},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[81,161185,161186,161195,161215,161219,161223,161232],{"__ignoreMap":125},[204,161187,161188,161190,161192],{"class":206,"line":207},[204,161189,32033],{"class":210},[204,161191,161041],{"class":2049},[204,161193,161194],{"class":214},"(name):\n",[204,161196,161197,161199,161201,161203,161205,161207,161209,161211,161213],{"class":206,"line":126},[204,161198,31385],{"class":263},[204,161200,215],{"class":214},[204,161202,267],{"class":210},[204,161204,157099],{"class":319},[204,161206,1109],{"class":263},[204,161208,79896],{"class":214},[204,161210,1159],{"class":263},[204,161212,464],{"class":319},[204,161214,221],{"class":214},[204,161216,161217],{"class":206,"line":131},[204,161218,2486],{"emptyLinePlaceholder":135},[204,161220,161221],{"class":206,"line":1281},[204,161222,2486],{"emptyLinePlaceholder":135},[204,161224,161225,161228,161230],{"class":206,"line":1287},[204,161226,161227],{"class":214},"say_hello(",[204,161229,149933],{"class":319},[204,161231,221],{"class":214},[204,161233,161234,161236,161238],{"class":206,"line":1301},[204,161235,161227],{"class":214},[204,161237,150981],{"class":319},[204,161239,221],{"class":214},[19,161241,161242,161244,161245,161247],{},[81,161243,79896],{}," 是形参，",[81,161246,149933],{}," 是实参。",[19,161249,161250],{},"多个参数：",[196,161252,161254],{"className":30464,"code":161253,"language":30466,"meta":125,"style":125},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[81,161255,161256,161264,161277,161283,161287,161291],{"__ignoreMap":125},[204,161257,161258,161260,161262],{"class":206,"line":207},[204,161259,32033],{"class":210},[204,161261,5296],{"class":2049},[204,161263,151138],{"class":214},[204,161265,161266,161269,161271,161273,161275],{"class":206,"line":126},[204,161267,161268],{"class":214},"    result ",[204,161270,260],{"class":210},[204,161272,10956],{"class":214},[204,161274,694],{"class":210},[204,161276,151149],{"class":214},[204,161278,161279,161281],{"class":206,"line":131},[204,161280,31385],{"class":263},[204,161282,76671],{"class":214},[204,161284,161285],{"class":206,"line":1281},[204,161286,2486],{"emptyLinePlaceholder":135},[204,161288,161289],{"class":206,"line":1287},[204,161290,2486],{"emptyLinePlaceholder":135},[204,161292,161293,161296,161298,161300,161302],{"class":206,"line":1301},[204,161294,161295],{"class":214},"add(",[204,161297,659],{"class":263},[204,161299,12522],{"class":214},[204,161301,913],{"class":263},[204,161303,221],{"class":214},[19,161305,161306],{},"调用时参数数量必须匹配。",[14,161308,161310],{"id":161309},"_55-返回值","5.5 返回值",[19,161312,161313,161315],{},[81,161314,17133],{}," 用于把函数内部的结果返回给调用者。",[196,161317,161319],{"className":30464,"code":161318,"language":30466,"meta":125,"style":125},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[81,161320,161321,161329,161339,161343,161347,161365],{"__ignoreMap":125},[204,161322,161323,161325,161327],{"class":206,"line":207},[204,161324,32033],{"class":210},[204,161326,5296],{"class":2049},[204,161328,151138],{"class":214},[204,161330,161331,161333,161335,161337],{"class":206,"line":126},[204,161332,4176],{"class":210},[204,161334,10956],{"class":214},[204,161336,694],{"class":210},[204,161338,151149],{"class":214},[204,161340,161341],{"class":206,"line":131},[204,161342,2486],{"emptyLinePlaceholder":135},[204,161344,161345],{"class":206,"line":1281},[204,161346,2486],{"emptyLinePlaceholder":135},[204,161348,161349,161352,161354,161357,161359,161361,161363],{"class":206,"line":1287},[204,161350,161351],{"class":214},"result ",[204,161353,260],{"class":210},[204,161355,161356],{"class":214}," add(",[204,161358,659],{"class":263},[204,161360,12522],{"class":214},[204,161362,913],{"class":263},[204,161364,221],{"class":214},[204,161366,161367,161369],{"class":206,"line":1301},[204,161368,30501],{"class":263},[204,161370,76671],{"class":214},[19,161372,161373,161374,161376,161377,28471],{},"如果函数没有写 ",[81,161375,17133],{},"，默认返回 ",[81,161378,95772],{},[196,161380,161382],{"className":30464,"code":161381,"language":30466,"meta":125,"style":125},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[81,161383,161384,161392,161402,161406,161410,161419],{"__ignoreMap":125},[204,161385,161386,161388,161390],{"class":206,"line":207},[204,161387,32033],{"class":210},[204,161389,161041],{"class":2049},[204,161391,32039],{"class":214},[204,161393,161394,161396,161398,161400],{"class":206,"line":126},[204,161395,31385],{"class":263},[204,161397,215],{"class":214},[204,161399,5931],{"class":319},[204,161401,221],{"class":214},[204,161403,161404],{"class":206,"line":131},[204,161405,2486],{"emptyLinePlaceholder":135},[204,161407,161408],{"class":206,"line":1281},[204,161409,2486],{"emptyLinePlaceholder":135},[204,161411,161412,161414,161416],{"class":206,"line":1287},[204,161413,161351],{"class":214},[204,161415,260],{"class":210},[204,161417,161418],{"class":214}," say_hello()\n",[204,161420,161421,161423,161426],{"class":206,"line":1301},[204,161422,30501],{"class":263},[204,161424,161425],{"class":214},"(result)  ",[204,161427,161428],{"class":273},"# None\n",[14,161430,161432],{"id":161431},"_56-return的作用","5.6 return的作用",[19,161434,161435,161437],{},[81,161436,17133],{}," 有两个作用：",[161,161439,161440,161443],{},[71,161441,161442],{},"返回结果。",[71,161444,161445],{},"结束函数。",[196,161447,161449],{"className":30464,"code":161448,"language":30466,"meta":125,"style":125},"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",[81,161450,161451,161461,161473,161480,161484,161496,161503,161507,161514,161518,161522,161533],{"__ignoreMap":125},[204,161452,161453,161455,161458],{"class":206,"line":207},[204,161454,32033],{"class":210},[204,161456,161457],{"class":2049}," check_age",[204,161459,161460],{"class":214},"(age):\n",[204,161462,161463,161465,161467,161469,161471],{"class":206,"line":126},[204,161464,3187],{"class":210},[204,161466,15794],{"class":214},[204,161468,1123],{"class":210},[204,161470,4179],{"class":263},[204,161472,3825],{"class":214},[204,161474,161475,161477],{"class":206,"line":131},[204,161476,14839],{"class":210},[204,161478,161479],{"class":319}," \"年龄不合法\"\n",[204,161481,161482],{"class":206,"line":1281},[204,161483,2486],{"emptyLinePlaceholder":135},[204,161485,161486,161488,161490,161492,161494],{"class":206,"line":1287},[204,161487,3187],{"class":210},[204,161489,15794],{"class":214},[204,161491,1796],{"class":210},[204,161493,156330],{"class":263},[204,161495,3825],{"class":214},[204,161497,161498,161500],{"class":206,"line":1301},[204,161499,14839],{"class":210},[204,161501,161502],{"class":319}," \"成年人\"\n",[204,161504,161505],{"class":206,"line":1307},[204,161506,2486],{"emptyLinePlaceholder":135},[204,161508,161509,161511],{"class":206,"line":1398},[204,161510,4176],{"class":210},[204,161512,161513],{"class":319}," \"未成年人\"\n",[204,161515,161516],{"class":206,"line":1404},[204,161517,2486],{"emptyLinePlaceholder":135},[204,161519,161520],{"class":206,"line":1416},[204,161521,2486],{"emptyLinePlaceholder":135},[204,161523,161524,161526,161529,161531],{"class":206,"line":1698},[204,161525,30501],{"class":263},[204,161527,161528],{"class":214},"(check_age(",[204,161530,913],{"class":263},[204,161532,30583],{"class":214},[204,161534,161535,161537,161539,161541,161543],{"class":206,"line":1703},[204,161536,30501],{"class":263},[204,161538,161528],{"class":214},[204,161540,745],{"class":210},[204,161542,431],{"class":263},[204,161544,30583],{"class":214},[19,161546,161547,161548,161550],{},"函数执行到 ",[81,161549,17133],{}," 后，后面的代码不会继续执行。",[14,161552,161554],{"id":161553},"_57-none","5.7 None",[19,161556,161557,161559],{},[81,161558,95772],{}," 表示空值或没有结果。",[19,161561,161562],{},"常见使用场景：",[161,161564,161565,161568,161571],{},[71,161566,161567],{},"函数没有返回值。",[71,161569,161570],{},"变量暂时没有具体值。",[71,161572,161573],{},"表示查询不到结果。",[196,161575,161577],{"className":30464,"code":161576,"language":30466,"meta":125,"style":125},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[81,161578,161579,161587,161591,161604],{"__ignoreMap":125},[204,161580,161581,161583,161585],{"class":206,"line":207},[204,161582,161351],{"class":214},[204,161584,260],{"class":210},[204,161586,152217],{"class":263},[204,161588,161589],{"class":206,"line":126},[204,161590,2486],{"emptyLinePlaceholder":135},[204,161592,161593,161595,161598,161600,161602],{"class":206,"line":131},[204,161594,1617],{"class":210},[204,161596,161597],{"class":214}," result ",[204,161599,39013],{"class":210},[204,161601,39019],{"class":263},[204,161603,3825],{"class":214},[204,161605,161606,161608,161610,161613],{"class":206,"line":1281},[204,161607,31385],{"class":263},[204,161609,215],{"class":214},[204,161611,161612],{"class":319},"\"没有数据\"",[204,161614,221],{"class":214},[19,161616,161617,161618,161620,161621,161624,161625,28471],{},"判断 ",[81,161619,95772],{}," 推荐使用 ",[81,161622,161623],{},"is None","，不要写成 ",[81,161626,161627],{},"== None",[14,161629,161631],{"id":161630},"_58-函数文档字符串","5.8 函数文档字符串",[19,161633,161634],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[196,161636,161638],{"className":30464,"code":161637,"language":30466,"meta":125,"style":125},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[81,161639,161640,161650,161655],{"__ignoreMap":125},[204,161641,161642,161644,161647],{"class":206,"line":207},[204,161643,32033],{"class":210},[204,161645,161646],{"class":2049}," calculate_bmi",[204,161648,161649],{"class":214},"(weight, height):\n",[204,161651,161652],{"class":206,"line":126},[204,161653,161654],{"class":319},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[204,161656,161657,161659,161662,161664,161667,161669],{"class":206,"line":131},[204,161658,4176],{"class":210},[204,161660,161661],{"class":214}," weight ",[204,161663,797],{"class":210},[204,161665,161666],{"class":214}," height ",[204,161668,10748],{"class":210},[204,161670,47809],{"class":263},[19,161672,161673],{},"查看说明：",[196,161675,161677],{"className":30464,"code":161676,"language":30466,"meta":125,"style":125},"help(calculate_bmi)\n",[81,161678,161679],{"__ignoreMap":125},[204,161680,161681,161684],{"class":206,"line":207},[204,161682,161683],{"class":263},"help",[204,161685,161686],{"class":214},"(calculate_bmi)\n",[19,161688,161689],{},"较完整的写法：",[196,161691,161693],{"className":30464,"code":161692,"language":30466,"meta":125,"style":125},"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",[81,161694,161695,161703,161708,161713,161717,161722,161727,161732,161736],{"__ignoreMap":125},[204,161696,161697,161699,161701],{"class":206,"line":207},[204,161698,32033],{"class":210},[204,161700,161646],{"class":2049},[204,161702,161649],{"class":214},[204,161704,161705],{"class":206,"line":126},[204,161706,161707],{"class":319},"    \"\"\"\n",[204,161709,161710],{"class":206,"line":131},[204,161711,161712],{"class":319},"    计算BMI。\n",[204,161714,161715],{"class":206,"line":1281},[204,161716,2486],{"emptyLinePlaceholder":135},[204,161718,161719],{"class":206,"line":1287},[204,161720,161721],{"class":319},"    :param weight: 体重，单位kg\n",[204,161723,161724],{"class":206,"line":1301},[204,161725,161726],{"class":319},"    :param height: 身高，单位m\n",[204,161728,161729],{"class":206,"line":1307},[204,161730,161731],{"class":319},"    :return: BMI数值\n",[204,161733,161734],{"class":206,"line":1398},[204,161735,161707],{"class":319},[204,161737,161738,161740,161742,161744,161746,161748],{"class":206,"line":1404},[204,161739,4176],{"class":210},[204,161741,161661],{"class":214},[204,161743,797],{"class":210},[204,161745,161666],{"class":214},[204,161747,10748],{"class":210},[204,161749,47809],{"class":263},[14,161751,161753],{"id":161752},"_59-变量作用域","5.9 变量作用域",[49,161755,161757],{"id":161756},"_591-局部变量","5.9.1 局部变量",[19,161759,161760],{},"在函数内部定义的变量，只能在函数内部使用。",[196,161762,161764],{"className":30464,"code":161763,"language":30466,"meta":125,"style":125},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[81,161765,161766,161775,161783,161789,161793,161797,161802],{"__ignoreMap":125},[204,161767,161768,161770,161773],{"class":206,"line":207},[204,161769,32033],{"class":210},[204,161771,161772],{"class":2049}," test",[204,161774,32039],{"class":214},[204,161776,161777,161779,161781],{"class":206,"line":126},[204,161778,45679],{"class":214},[204,161780,260],{"class":210},[204,161782,58514],{"class":263},[204,161784,161785,161787],{"class":206,"line":131},[204,161786,31385],{"class":263},[204,161788,228],{"class":214},[204,161790,161791],{"class":206,"line":1281},[204,161792,2486],{"emptyLinePlaceholder":135},[204,161794,161795],{"class":206,"line":1287},[204,161796,2486],{"emptyLinePlaceholder":135},[204,161798,161799],{"class":206,"line":1301},[204,161800,161801],{"class":214},"test()\n",[204,161803,161804,161806,161809],{"class":206,"line":1307},[204,161805,30501],{"class":263},[204,161807,161808],{"class":214},"(num)  ",[204,161810,161811],{"class":273},"# 报错\n",[49,161813,161815],{"id":161814},"_592-全局变量","5.9.2 全局变量",[19,161817,161818],{},"在函数外部定义的变量，可以在函数内部读取。",[196,161820,161822],{"className":30464,"code":161821,"language":30466,"meta":125,"style":125},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[81,161823,161824,161832,161836,161840,161848,161854,161858,161862],{"__ignoreMap":125},[204,161825,161826,161828,161830],{"class":206,"line":207},[204,161827,146581],{"class":214},[204,161829,260],{"class":210},[204,161831,149398],{"class":319},[204,161833,161834],{"class":206,"line":126},[204,161835,2486],{"emptyLinePlaceholder":135},[204,161837,161838],{"class":206,"line":131},[204,161839,2486],{"emptyLinePlaceholder":135},[204,161841,161842,161844,161846],{"class":206,"line":1281},[204,161843,32033],{"class":210},[204,161845,161041],{"class":2049},[204,161847,32039],{"class":214},[204,161849,161850,161852],{"class":206,"line":1287},[204,161851,31385],{"class":263},[204,161853,150705],{"class":214},[204,161855,161856],{"class":206,"line":1301},[204,161857,2486],{"emptyLinePlaceholder":135},[204,161859,161860],{"class":206,"line":1307},[204,161861,2486],{"emptyLinePlaceholder":135},[204,161863,161864],{"class":206,"line":1398},[204,161865,161076],{"class":214},[19,161867,161868,161869,28471],{},"如果要在函数内部修改全局变量，需要 ",[81,161870,161871],{},"global",[196,161873,161875],{"className":30464,"code":161874,"language":30466,"meta":125,"style":125},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[81,161876,161877,161885,161889,161893,161902,161910,161918,161922,161926,161931],{"__ignoreMap":125},[204,161878,161879,161881,161883],{"class":206,"line":207},[204,161880,146736],{"class":214},[204,161882,260],{"class":210},[204,161884,47419],{"class":263},[204,161886,161887],{"class":206,"line":126},[204,161888,2486],{"emptyLinePlaceholder":135},[204,161890,161891],{"class":206,"line":131},[204,161892,2486],{"emptyLinePlaceholder":135},[204,161894,161895,161897,161900],{"class":206,"line":1281},[204,161896,32033],{"class":210},[204,161898,161899],{"class":2049}," add_count",[204,161901,32039],{"class":214},[204,161903,161904,161907],{"class":206,"line":1287},[204,161905,161906],{"class":210},"    global",[204,161908,161909],{"class":214}," count\n",[204,161911,161912,161914,161916],{"class":206,"line":1301},[204,161913,159478],{"class":214},[204,161915,9564],{"class":210},[204,161917,55785],{"class":263},[204,161919,161920],{"class":206,"line":1307},[204,161921,2486],{"emptyLinePlaceholder":135},[204,161923,161924],{"class":206,"line":1398},[204,161925,2486],{"emptyLinePlaceholder":135},[204,161927,161928],{"class":206,"line":1404},[204,161929,161930],{"class":214},"add_count()\n",[204,161932,161933,161935],{"class":206,"line":1416},[204,161934,30501],{"class":263},[204,161936,161937],{"class":214},"(count)\n",[19,161939,161940],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,161942,161944],{"id":161943},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,161946,161947],{},"一个函数中可以调用另一个函数。",[196,161949,161951],{"className":30464,"code":161950,"language":30466,"meta":125,"style":125},"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",[81,161952,161953,161962,161976,161980,161984,161993,161998,162018,162039,162043,162047,162051],{"__ignoreMap":125},[204,161954,161955,161957,161960],{"class":206,"line":207},[204,161956,32033],{"class":210},[204,161958,161959],{"class":2049}," print_line",[204,161961,32039],{"class":214},[204,161963,161964,161966,161968,161970,161972,161974],{"class":206,"line":126},[204,161965,31385],{"class":263},[204,161967,215],{"class":214},[204,161969,32569],{"class":319},[204,161971,6605],{"class":210},[204,161973,78751],{"class":263},[204,161975,221],{"class":214},[204,161977,161978],{"class":206,"line":131},[204,161979,2486],{"emptyLinePlaceholder":135},[204,161981,161982],{"class":206,"line":1281},[204,161983,2486],{"emptyLinePlaceholder":135},[204,161985,161986,161988,161991],{"class":206,"line":1287},[204,161987,32033],{"class":210},[204,161989,161990],{"class":2049}," print_info",[204,161992,149420],{"class":214},[204,161994,161995],{"class":206,"line":1301},[204,161996,161997],{"class":214},"    print_line()\n",[204,161999,162000,162002,162004,162006,162008,162010,162012,162014,162016],{"class":206,"line":1307},[204,162001,31385],{"class":263},[204,162003,215],{"class":214},[204,162005,267],{"class":210},[204,162007,156727],{"class":319},[204,162009,1109],{"class":263},[204,162011,79896],{"class":214},[204,162013,1159],{"class":263},[204,162015,464],{"class":319},[204,162017,221],{"class":214},[204,162019,162020,162022,162024,162026,162029,162031,162033,162035,162037],{"class":206,"line":1398},[204,162021,31385],{"class":263},[204,162023,215],{"class":214},[204,162025,267],{"class":210},[204,162027,162028],{"class":319},"\"年龄:",[204,162030,1109],{"class":263},[204,162032,70307],{"class":214},[204,162034,1159],{"class":263},[204,162036,464],{"class":319},[204,162038,221],{"class":214},[204,162040,162041],{"class":206,"line":1404},[204,162042,161997],{"class":214},[204,162044,162045],{"class":206,"line":1416},[204,162046,2486],{"emptyLinePlaceholder":135},[204,162048,162049],{"class":206,"line":1698},[204,162050,2486],{"emptyLinePlaceholder":135},[204,162052,162053,162056,162058,162060,162062],{"class":206,"line":1703},[204,162054,162055],{"class":214},"print_info(",[204,162057,149933],{"class":319},[204,162059,12522],{"class":214},[204,162061,863],{"class":263},[204,162063,221],{"class":214},[19,162065,162066],{},"这种方式可以把小功能组合成大功能。",[14,162068,162070],{"id":162069},"_511-参数检查","5.11 参数检查",[19,162072,162073],{},"函数内部可以检查参数是否合法。",[196,162075,162077],{"className":30464,"code":162076,"language":30466,"meta":125,"style":125},"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",[81,162078,162079,162088,162100,162106,162116,162120,162124,162141,162145,162157,162168,162174],{"__ignoreMap":125},[204,162080,162081,162083,162086],{"class":206,"line":207},[204,162082,32033],{"class":210},[204,162084,162085],{"class":2049}," divide",[204,162087,151138],{"class":214},[204,162089,162090,162092,162094,162096,162098],{"class":206,"line":126},[204,162091,3187],{"class":210},[204,162093,10969],{"class":214},[204,162095,3035],{"class":210},[204,162097,4179],{"class":263},[204,162099,3825],{"class":214},[204,162101,162102,162104],{"class":206,"line":131},[204,162103,14839],{"class":210},[204,162105,152217],{"class":263},[204,162107,162108,162110,162112,162114],{"class":206,"line":1281},[204,162109,4176],{"class":210},[204,162111,10956],{"class":214},[204,162113,797],{"class":210},[204,162115,151149],{"class":214},[204,162117,162118],{"class":206,"line":1287},[204,162119,2486],{"emptyLinePlaceholder":135},[204,162121,162122],{"class":206,"line":1301},[204,162123,2486],{"emptyLinePlaceholder":135},[204,162125,162126,162128,162130,162133,162135,162137,162139],{"class":206,"line":1307},[204,162127,161351],{"class":214},[204,162129,260],{"class":210},[204,162131,162132],{"class":214}," divide(",[204,162134,659],{"class":263},[204,162136,12522],{"class":214},[204,162138,405],{"class":263},[204,162140,221],{"class":214},[204,162142,162143],{"class":206,"line":1398},[204,162144,2486],{"emptyLinePlaceholder":135},[204,162146,162147,162149,162151,162153,162155],{"class":206,"line":1404},[204,162148,1617],{"class":210},[204,162150,161597],{"class":214},[204,162152,39013],{"class":210},[204,162154,39019],{"class":263},[204,162156,3825],{"class":214},[204,162158,162159,162161,162163,162166],{"class":206,"line":1416},[204,162160,31385],{"class":263},[204,162162,215],{"class":214},[204,162164,162165],{"class":319},"\"除数不能为0\"",[204,162167,221],{"class":214},[204,162169,162170,162172],{"class":206,"line":1698},[204,162171,1787],{"class":210},[204,162173,3825],{"class":214},[204,162175,162176,162178],{"class":206,"line":1703},[204,162177,31385],{"class":263},[204,162179,76671],{"class":214},[14,162181,162183],{"id":162182},"_512-类型提示","5.12 类型提示",[19,162185,162186],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[196,162188,162190],{"className":30464,"code":162189,"language":30466,"meta":125,"style":125},"def add(a: int, b: int) -> int:\n    return a + b\n",[81,162191,162192,162215],{"__ignoreMap":125},[204,162193,162194,162196,162198,162201,162203,162206,162208,162211,162213],{"class":206,"line":207},[204,162195,32033],{"class":210},[204,162197,5296],{"class":2049},[204,162199,162200],{"class":214},"(a: ",[204,162202,218],{"class":263},[204,162204,162205],{"class":214},", b: ",[204,162207,218],{"class":263},[204,162209,162210],{"class":214},") -> ",[204,162212,218],{"class":263},[204,162214,3825],{"class":214},[204,162216,162217,162219,162221,162223],{"class":206,"line":126},[204,162218,4176],{"class":210},[204,162220,10956],{"class":214},[204,162222,694],{"class":210},[204,162224,151149],{"class":214},[19,162226,162227],{},"字符串参数：",[196,162229,162231],{"className":30464,"code":162230,"language":30466,"meta":125,"style":125},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[81,162232,162233,162250],{"__ignoreMap":125},[204,162234,162235,162237,162239,162242,162244,162246,162248],{"class":206,"line":207},[204,162236,32033],{"class":210},[204,162238,161041],{"class":2049},[204,162240,162241],{"class":214},"(name: ",[204,162243,1386],{"class":263},[204,162245,162210],{"class":214},[204,162247,95772],{"class":263},[204,162249,3825],{"class":214},[204,162251,162252,162254,162256,162258,162260,162262,162264,162266,162268],{"class":206,"line":126},[204,162253,31385],{"class":263},[204,162255,215],{"class":214},[204,162257,267],{"class":210},[204,162259,157099],{"class":319},[204,162261,1109],{"class":263},[204,162263,79896],{"class":214},[204,162265,1159],{"class":263},[204,162267,464],{"class":319},[204,162269,221],{"class":214},[19,162271,162272],{},"列表参数：",[196,162274,162276],{"className":30464,"code":162275,"language":30466,"meta":125,"style":125},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[81,162277,162278,162297,162305,162317,162326],{"__ignoreMap":125},[204,162279,162280,162282,162285,162288,162290,162293,162295],{"class":206,"line":207},[204,162281,32033],{"class":210},[204,162283,162284],{"class":2049}," get_total",[204,162286,162287],{"class":214},"(numbers: list[",[204,162289,218],{"class":263},[204,162291,162292],{"class":214},"]) -> ",[204,162294,218],{"class":263},[204,162296,3825],{"class":214},[204,162298,162299,162301,162303],{"class":206,"line":126},[204,162300,159352],{"class":214},[204,162302,260],{"class":210},[204,162304,47419],{"class":263},[204,162306,162307,162309,162312,162314],{"class":206,"line":131},[204,162308,3287],{"class":210},[204,162310,162311],{"class":214}," number ",[204,162313,26129],{"class":210},[204,162315,162316],{"class":214}," numbers:\n",[204,162318,162319,162321,162323],{"class":206,"line":1281},[204,162320,160027],{"class":214},[204,162322,9564],{"class":210},[204,162324,162325],{"class":214}," number\n",[204,162327,162328,162330],{"class":206,"line":1287},[204,162329,4176],{"class":210},[204,162331,162332],{"class":214}," total\n",[19,162334,162335],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162337,162339],{"id":162338},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[196,162341,162343],{"className":30464,"code":162342,"language":30466,"meta":125,"style":125},"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",[81,162344,162345,162355,162359,162363,162371,162382,162392,162402,162412,162422,162426,162430,162439,162461,162465,162469,162478,162484,162504,162516,162527,162531,162540,162551,162556,162560,162564,162573,162579,162598,162610,162620,162624,162635,162645,162649,162657,162668,162672,162676,162680,162688,162693,162707,162711,162723,162728,162740,162745,162757,162762,162774,162784,162788,162794],{"__ignoreMap":125},[204,162346,162347,162350,162352],{"class":206,"line":207},[204,162348,162349],{"class":214},"balance ",[204,162351,260],{"class":210},[204,162353,162354],{"class":263}," 1000\n",[204,162356,162357],{"class":206,"line":126},[204,162358,2486],{"emptyLinePlaceholder":135},[204,162360,162361],{"class":206,"line":131},[204,162362,2486],{"emptyLinePlaceholder":135},[204,162364,162365,162367,162369],{"class":206,"line":1281},[204,162366,32033],{"class":210},[204,162368,152078],{"class":2049},[204,162370,32039],{"class":214},[204,162372,162373,162375,162377,162380],{"class":206,"line":1287},[204,162374,31385],{"class":263},[204,162376,215],{"class":214},[204,162378,162379],{"class":319},"\"====== ATM ======\"",[204,162381,221],{"class":214},[204,162383,162384,162386,162388,162390],{"class":206,"line":1301},[204,162385,31385],{"class":263},[204,162387,215],{"class":214},[204,162389,160693],{"class":319},[204,162391,221],{"class":214},[204,162393,162394,162396,162398,162400],{"class":206,"line":1307},[204,162395,31385],{"class":263},[204,162397,215],{"class":214},[204,162399,160704],{"class":319},[204,162401,221],{"class":214},[204,162403,162404,162406,162408,162410],{"class":206,"line":1398},[204,162405,31385],{"class":263},[204,162407,215],{"class":214},[204,162409,160715],{"class":319},[204,162411,221],{"class":214},[204,162413,162414,162416,162418,162420],{"class":206,"line":1404},[204,162415,31385],{"class":263},[204,162417,215],{"class":214},[204,162419,160726],{"class":319},[204,162421,221],{"class":214},[204,162423,162424],{"class":206,"line":1416},[204,162425,2486],{"emptyLinePlaceholder":135},[204,162427,162428],{"class":206,"line":1698},[204,162429,2486],{"emptyLinePlaceholder":135},[204,162431,162432,162434,162437],{"class":206,"line":1703},[204,162433,32033],{"class":210},[204,162435,162436],{"class":2049}," show_balance",[204,162438,32039],{"class":214},[204,162440,162441,162443,162445,162447,162450,162452,162455,162457,162459],{"class":206,"line":1709},[204,162442,31385],{"class":263},[204,162444,215],{"class":214},[204,162446,267],{"class":210},[204,162448,162449],{"class":319},"\"当前余额:",[204,162451,1109],{"class":263},[204,162453,162454],{"class":214},"balance",[204,162456,1159],{"class":263},[204,162458,157057],{"class":319},[204,162460,221],{"class":214},[204,162462,162463],{"class":206,"line":1714},[204,162464,2486],{"emptyLinePlaceholder":135},[204,162466,162467],{"class":206,"line":1728},[204,162468,2486],{"emptyLinePlaceholder":135},[204,162470,162471,162473,162476],{"class":206,"line":1733},[204,162472,32033],{"class":210},[204,162474,162475],{"class":2049}," save_money",[204,162477,32039],{"class":214},[204,162479,162480,162482],{"class":206,"line":1739},[204,162481,161906],{"class":210},[204,162483,150144],{"class":214},[204,162485,162486,162489,162491,162493,162495,162497,162499,162502],{"class":206,"line":1760},[204,162487,162488],{"class":214},"    money ",[204,162490,260],{"class":210},[204,162492,109882],{"class":263},[204,162494,215],{"class":214},[204,162496,53907],{"class":263},[204,162498,215],{"class":214},[204,162500,162501],{"class":319},"\"请输入存款金额:\"",[204,162503,30583],{"class":214},[204,162505,162506,162508,162510,162512,162514],{"class":206,"line":1765},[204,162507,3187],{"class":210},[204,162509,150187],{"class":214},[204,162511,1674],{"class":210},[204,162513,4179],{"class":263},[204,162515,3825],{"class":214},[204,162517,162518,162520,162522,162525],{"class":206,"line":1779},[204,162519,32537],{"class":263},[204,162521,215],{"class":214},[204,162523,162524],{"class":319},"\"金额必须大于0\"",[204,162526,221],{"class":214},[204,162528,162529],{"class":206,"line":1784},[204,162530,152406],{"class":210},[204,162532,162533,162536,162538],{"class":206,"line":1813},[204,162534,162535],{"class":214},"    balance ",[204,162537,9564],{"class":210},[204,162539,150220],{"class":214},[204,162541,162542,162544,162546,162549],{"class":206,"line":1818},[204,162543,31385],{"class":263},[204,162545,215],{"class":214},[204,162547,162548],{"class":319},"\"存款成功\"",[204,162550,221],{"class":214},[204,162552,162553],{"class":206,"line":1835},[204,162554,162555],{"class":214},"    show_balance()\n",[204,162557,162558],{"class":206,"line":1840},[204,162559,2486],{"emptyLinePlaceholder":135},[204,162561,162562],{"class":206,"line":1845},[204,162563,2486],{"emptyLinePlaceholder":135},[204,162565,162566,162568,162571],{"class":206,"line":1850},[204,162567,32033],{"class":210},[204,162569,162570],{"class":2049}," withdraw_money",[204,162572,32039],{"class":214},[204,162574,162575,162577],{"class":206,"line":1864},[204,162576,161906],{"class":210},[204,162578,150144],{"class":214},[204,162580,162581,162583,162585,162587,162589,162591,162593,162596],{"class":206,"line":1869},[204,162582,162488],{"class":214},[204,162584,260],{"class":210},[204,162586,109882],{"class":263},[204,162588,215],{"class":214},[204,162590,53907],{"class":263},[204,162592,215],{"class":214},[204,162594,162595],{"class":319},"\"请输入取款金额:\"",[204,162597,30583],{"class":214},[204,162599,162600,162602,162604,162606,162608],{"class":206,"line":2663},[204,162601,3187],{"class":210},[204,162603,150187],{"class":214},[204,162605,1674],{"class":210},[204,162607,4179],{"class":263},[204,162609,3825],{"class":214},[204,162611,162612,162614,162616,162618],{"class":206,"line":2677},[204,162613,32537],{"class":263},[204,162615,215],{"class":214},[204,162617,162524],{"class":319},[204,162619,221],{"class":214},[204,162621,162622],{"class":206,"line":2685},[204,162623,152406],{"class":210},[204,162625,162626,162628,162630,162632],{"class":206,"line":2690},[204,162627,3187],{"class":210},[204,162629,150187],{"class":214},[204,162631,1173],{"class":210},[204,162633,162634],{"class":214}," balance:\n",[204,162636,162637,162639,162641,162643],{"class":206,"line":2696},[204,162638,32537],{"class":263},[204,162640,215],{"class":214},[204,162642,150282],{"class":319},[204,162644,221],{"class":214},[204,162646,162647],{"class":206,"line":2702},[204,162648,152406],{"class":210},[204,162650,162651,162653,162655],{"class":206,"line":2707},[204,162652,162535],{"class":214},[204,162654,150297],{"class":210},[204,162656,150220],{"class":214},[204,162658,162659,162661,162663,162666],{"class":206,"line":8035},[204,162660,31385],{"class":263},[204,162662,215],{"class":214},[204,162664,162665],{"class":319},"\"取款成功\"",[204,162667,221],{"class":214},[204,162669,162670],{"class":206,"line":8059},[204,162671,162555],{"class":214},[204,162673,162674],{"class":206,"line":8064},[204,162675,2486],{"emptyLinePlaceholder":135},[204,162677,162678],{"class":206,"line":8070},[204,162679,2486],{"emptyLinePlaceholder":135},[204,162681,162682,162684,162686],{"class":206,"line":8097},[204,162683,108748],{"class":210},[204,162685,95378],{"class":263},[204,162687,3825],{"class":214},[204,162689,162690],{"class":206,"line":8102},[204,162691,162692],{"class":214},"    show_menu()\n",[204,162694,162695,162697,162699,162701,162703,162705],{"class":206,"line":8108},[204,162696,160737],{"class":214},[204,162698,260],{"class":210},[204,162700,60691],{"class":263},[204,162702,215],{"class":214},[204,162704,153118],{"class":319},[204,162706,221],{"class":214},[204,162708,162709],{"class":206,"line":8120},[204,162710,2486],{"emptyLinePlaceholder":135},[204,162712,162713,162715,162717,162719,162721],{"class":206,"line":8132},[204,162714,3187],{"class":210},[204,162716,153131],{"class":214},[204,162718,3035],{"class":210},[204,162720,153136],{"class":319},[204,162722,3825],{"class":214},[204,162724,162725],{"class":206,"line":8144},[204,162726,162727],{"class":214},"        show_balance()\n",[204,162729,162730,162732,162734,162736,162738],{"class":206,"line":9803},[204,162731,39379],{"class":210},[204,162733,153131],{"class":214},[204,162735,3035],{"class":210},[204,162737,153155],{"class":319},[204,162739,3825],{"class":214},[204,162741,162742],{"class":206,"line":9828},[204,162743,162744],{"class":214},"        save_money()\n",[204,162746,162747,162749,162751,162753,162755],{"class":206,"line":9851},[204,162748,39379],{"class":210},[204,162750,153131],{"class":214},[204,162752,3035],{"class":210},[204,162754,153173],{"class":319},[204,162756,3825],{"class":214},[204,162758,162759],{"class":206,"line":9875},[204,162760,162761],{"class":214},"        withdraw_money()\n",[204,162763,162764,162766,162768,162770,162772],{"class":206,"line":9880},[204,162765,39379],{"class":210},[204,162767,153131],{"class":214},[204,162769,3035],{"class":210},[204,162771,153227],{"class":319},[204,162773,3825],{"class":214},[204,162775,162776,162778,162780,162782],{"class":206,"line":9885},[204,162777,32537],{"class":263},[204,162779,215],{"class":214},[204,162781,153238],{"class":319},[204,162783,221],{"class":214},[204,162785,162786],{"class":206,"line":9890},[204,162787,31713],{"class":210},[204,162789,162790,162792],{"class":206,"line":9899},[204,162791,158067],{"class":210},[204,162793,3825],{"class":214},[204,162795,162796,162798,162800,162802],{"class":206,"line":9904},[204,162797,32537],{"class":263},[204,162799,215],{"class":214},[204,162801,153259],{"class":319},[204,162803,221],{"class":214},[19,162805,162806],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162808,162810],{"id":162809},"_514-易错点","5.14 易错点",[161,162812,162813,162816,162819,162824,162829,162832],{},[71,162814,162815],{},"函数定义后必须调用才会执行。",[71,162817,162818],{},"函数名后面有括号才是调用。",[71,162820,162821,162823],{},[81,162822,17133],{}," 后面的代码不会执行。",[71,162825,162826,162827,28471],{},"没有返回值的函数默认返回 ",[81,162828,95772],{},[71,162830,162831],{},"局部变量不能在函数外部访问。",[71,162833,162834,162835,162837],{},"不要滥用 ",[81,162836,161871],{},"，更好的方式是让函数返回新值。",[19,162839,162840,162841,162843],{},"例如不用 ",[81,162842,161871],{}," 改写存款：",[196,162845,162847],{"className":30464,"code":162846,"language":30466,"meta":125,"style":125},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[81,162848,162849,162858,162869,162873,162877,162885,162898],{"__ignoreMap":125},[204,162850,162851,162853,162855],{"class":206,"line":207},[204,162852,32033],{"class":210},[204,162854,162475],{"class":2049},[204,162856,162857],{"class":214},"(balance, money):\n",[204,162859,162860,162862,162865,162867],{"class":206,"line":126},[204,162861,4176],{"class":210},[204,162863,162864],{"class":214}," balance ",[204,162866,694],{"class":210},[204,162868,150220],{"class":214},[204,162870,162871],{"class":206,"line":131},[204,162872,2486],{"emptyLinePlaceholder":135},[204,162874,162875],{"class":206,"line":1281},[204,162876,2486],{"emptyLinePlaceholder":135},[204,162878,162879,162881,162883],{"class":206,"line":1287},[204,162880,162349],{"class":214},[204,162882,260],{"class":210},[204,162884,162354],{"class":263},[204,162886,162887,162889,162891,162894,162896],{"class":206,"line":1301},[204,162888,162349],{"class":214},[204,162890,260],{"class":210},[204,162892,162893],{"class":214}," save_money(balance, ",[204,162895,1808],{"class":263},[204,162897,221],{"class":214},[204,162899,162900,162902],{"class":206,"line":1307},[204,162901,30501],{"class":263},[204,162903,162904],{"class":214},"(balance)\n",[14,162906,162908],{"id":162907},"_515-本章练习","5.15 本章练习",[161,162910,162911,162918,162924,162930,162936],{},[71,162912,162913,162914,162917],{},"定义函数 ",[81,162915,162916],{},"print_student(name, age)","，输出学生信息。",[71,162919,162913,162920,162923],{},[81,162921,162922],{},"get_max(a, b, c)","，返回三个数中的最大值。",[71,162925,162913,162926,162929],{},[81,162927,162928],{},"is_even(num)","，判断一个数是否为偶数。",[71,162931,162913,162932,162935],{},[81,162933,162934],{},"calculate_bmi(weight, height)","，返回 BMI。",[71,162937,162938],{},"把第 4 章的菜单程序拆分成多个函数。",[5213,162940,162941],{},"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":125,"searchDepth":126,"depth":126,"links":162943},[162944,162945,162946,162947,162948,162949,162950,162951,162952,162956,162957,162958,162959,162960,162961],{"id":160964,"depth":126,"text":160965},{"id":161005,"depth":126,"text":161006},{"id":161095,"depth":126,"text":161096},{"id":161176,"depth":126,"text":161177},{"id":161309,"depth":126,"text":161310},{"id":161431,"depth":126,"text":161432},{"id":161553,"depth":126,"text":161554},{"id":161630,"depth":126,"text":161631},{"id":161752,"depth":126,"text":161753,"children":162953},[162954,162955],{"id":161756,"depth":131,"text":161757},{"id":161814,"depth":131,"text":161815},{"id":161943,"depth":126,"text":161944},{"id":162069,"depth":126,"text":162070},{"id":162182,"depth":126,"text":162183},{"id":162338,"depth":126,"text":162339},{"id":162809,"depth":126,"text":162810},{"id":162907,"depth":126,"text":162908},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160956,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162968,"title":162969,"body":162970,"description":132,"extension":133,"meta":166014,"navigation":135,"path":166015,"seo":166016,"stem":166017,"__hash__":166018},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162971,"toc":165995},[162972,162975,162979,162982,162985,163089,163092,163096,163099,163179,163182,163186,163189,163249,163252,163288,163291,163306,163310,163383,163386,163441,163444,163514,163517,163601,163611,163669,163673,163718,163721,163747,163750,163856,163860,163863,163905,163908,163972,163975,163979,163982,164043,164046,164076,164079,164117,164121,164124,164133,164136,164260,164263,164304,164308,164311,164322,164362,164365,164380,164385,164388,164455,164458,164548,164552,164555,164603,164606,164633,164635,164665,164668,164688,164691,164722,164725,164758,164762,164765,164789,164792,164816,164819,164843,164847,164850,164980,164983,165063,165066,165141,165145,165148,165198,165201,165243,165246,165270,165272,165296,165299,165354,165357,165423,165427,165430,165433,165471,165474,165527,165530,165576,165579,165612,165615,165619,165938,165942,165971,165975,165992],[10,162973,162969],{"id":162974},"_6-数据容器",[14,162976,162978],{"id":162977},"_61-什么是数据容器","6.1 什么是数据容器",[19,162980,162981],{},"数据容器用于一次保存多个数据。",[19,162983,162984],{},"常见容器：",[352,162986,162987,163004],{},[355,162988,162989],{},[358,162990,162991,162993,162996,162999,163002],{},[361,162992,25857],{},[361,162994,162995],{},"是否有序",[361,162997,162998],{},"是否可变",[361,163000,163001],{},"是否允许重复",[361,163003,27578],{},[398,163005,163006,163024,163040,163055,163072],{},[358,163007,163008,163011,163014,163017,163020],{},[403,163009,163010],{},"list列表",[403,163012,163013],{},"有序",[403,163015,163016],{},"可变",[403,163018,163019],{},"允许",[403,163021,163022],{},[81,163023,155302],{},[358,163025,163026,163029,163031,163034,163036],{},[403,163027,163028],{},"tuple元组",[403,163030,163013],{},[403,163032,163033],{},"不可变",[403,163035,163019],{},[403,163037,163038],{},[81,163039,155315],{},[358,163041,163042,163045,163047,163049,163051],{},[403,163043,163044],{},"str字符串",[403,163046,163013],{},[403,163048,163033],{},[403,163050,163019],{},[403,163052,163053],{},[81,163054,155925],{},[358,163056,163057,163060,163063,163065,163068],{},[403,163058,163059],{},"set集合",[403,163061,163062],{},"无序",[403,163064,163016],{},[403,163066,163067],{},"不允许",[403,163069,163070],{},[81,163071,155340],{},[358,163073,163074,163077,163079,163081,163084],{},[403,163075,163076],{},"dict字典",[403,163078,163013],{},[403,163080,163016],{},[403,163082,163083],{},"key不允许重复",[403,163085,163086],{},[81,163087,163088],{},"{\"name\": \"小明\"}",[19,163090,163091],{},"Python 3.7 之后，字典保持插入顺序。",[14,163093,163095],{"id":163094},"_62-列表list","6.2 列表list",[19,163097,163098],{},"列表用于保存一组有顺序的数据。",[196,163100,163102],{"className":30464,"code":163101,"language":30466,"meta":125,"style":125},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[81,163103,163104,163124,163149,163170],{"__ignoreMap":125},[204,163105,163106,163108,163110,163112,163114,163116,163118,163120,163122],{"class":206,"line":207},[204,163107,160425],{"class":214},[204,163109,260],{"class":210},[204,163111,52312],{"class":214},[204,163113,149933],{"class":319},[204,163115,12522],{"class":214},[204,163117,150981],{"class":319},[204,163119,12522],{"class":214},[204,163121,159776],{"class":319},[204,163123,33332],{"class":214},[204,163125,163126,163129,163131,163133,163135,163137,163139,163141,163143,163145,163147],{"class":206,"line":126},[204,163127,163128],{"class":214},"numbers ",[204,163130,260],{"class":210},[204,163132,52312],{"class":214},[204,163134,431],{"class":263},[204,163136,12522],{"class":214},[204,163138,292],{"class":263},[204,163140,12522],{"class":214},[204,163142,286],{"class":263},[204,163144,12522],{"class":214},[204,163146,506],{"class":263},[204,163148,33332],{"class":214},[204,163150,163151,163154,163156,163158,163160,163162,163164,163166,163168],{"class":206,"line":131},[204,163152,163153],{"class":214},"mixed ",[204,163155,260],{"class":210},[204,163157,52312],{"class":214},[204,163159,149933],{"class":319},[204,163161,12522],{"class":214},[204,163163,863],{"class":263},[204,163165,12522],{"class":214},[204,163167,31562],{"class":263},[204,163169,33332],{"class":214},[204,163171,163172,163175,163177],{"class":206,"line":1281},[204,163173,163174],{"class":214},"empty ",[204,163176,260],{"class":210},[204,163178,51924],{"class":214},[19,163180,163181],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163183,163185],{"id":163184},"_63-列表索引","6.3 列表索引",[19,163187,163188],{},"正向索引从 0 开始：",[196,163190,163192],{"className":30464,"code":163191,"language":30466,"meta":125,"style":125},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[81,163193,163194,163214,163218,163229,163239],{"__ignoreMap":125},[204,163195,163196,163198,163200,163202,163204,163206,163208,163210,163212],{"class":206,"line":207},[204,163197,160425],{"class":214},[204,163199,260],{"class":210},[204,163201,52312],{"class":214},[204,163203,149933],{"class":319},[204,163205,12522],{"class":214},[204,163207,150981],{"class":319},[204,163209,12522],{"class":214},[204,163211,159776],{"class":319},[204,163213,33332],{"class":214},[204,163215,163216],{"class":206,"line":126},[204,163217,2486],{"emptyLinePlaceholder":135},[204,163219,163220,163222,163225,163227],{"class":206,"line":131},[204,163221,30501],{"class":263},[204,163223,163224],{"class":214},"(names[",[204,163226,405],{"class":263},[204,163228,4743],{"class":214},[204,163230,163231,163233,163235,163237],{"class":206,"line":1281},[204,163232,30501],{"class":263},[204,163234,163224],{"class":214},[204,163236,431],{"class":263},[204,163238,4743],{"class":214},[204,163240,163241,163243,163245,163247],{"class":206,"line":1287},[204,163242,30501],{"class":263},[204,163244,163224],{"class":214},[204,163246,292],{"class":263},[204,163248,4743],{"class":214},[19,163250,163251],{},"反向索引从 -1 开始：",[196,163253,163255],{"className":30464,"code":163254,"language":30466,"meta":125,"style":125},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[81,163256,163257,163273],{"__ignoreMap":125},[204,163258,163259,163261,163263,163265,163267,163270],{"class":206,"line":207},[204,163260,30501],{"class":263},[204,163262,163224],{"class":214},[204,163264,745],{"class":210},[204,163266,431],{"class":263},[204,163268,163269],{"class":214},"])  ",[204,163271,163272],{"class":273},"# 小刚\n",[204,163274,163275,163277,163279,163281,163283,163285],{"class":206,"line":126},[204,163276,30501],{"class":263},[204,163278,163224],{"class":214},[204,163280,745],{"class":210},[204,163282,292],{"class":263},[204,163284,163269],{"class":214},[204,163286,163287],{"class":273},"# 小红\n",[19,163289,163290],{},"索引越界会报错：",[196,163292,163294],{"className":30464,"code":163293,"language":30466,"meta":125,"style":125},"print(names[3])\n",[81,163295,163296],{"__ignoreMap":125},[204,163297,163298,163300,163302,163304],{"class":206,"line":207},[204,163299,30501],{"class":263},[204,163301,163224],{"class":214},[204,163303,286],{"class":263},[204,163305,4743],{"class":214},[14,163307,163309],{"id":163308},"_64-列表常用方法","6.4 列表常用方法",[196,163311,163313],{"className":30464,"code":163312,"language":30466,"meta":125,"style":125},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[81,163314,163315,163331,163335,163344,163358,163372,163376],{"__ignoreMap":125},[204,163316,163317,163319,163321,163323,163325,163327,163329],{"class":206,"line":207},[204,163318,160425],{"class":214},[204,163320,260],{"class":210},[204,163322,52312],{"class":214},[204,163324,149933],{"class":319},[204,163326,12522],{"class":214},[204,163328,150981],{"class":319},[204,163330,33332],{"class":214},[204,163332,163333],{"class":206,"line":126},[204,163334,2486],{"emptyLinePlaceholder":135},[204,163336,163337,163340,163342],{"class":206,"line":131},[204,163338,163339],{"class":214},"names.append(",[204,163341,159776],{"class":319},[204,163343,221],{"class":214},[204,163345,163346,163349,163351,163353,163356],{"class":206,"line":1281},[204,163347,163348],{"class":214},"names.insert(",[204,163350,431],{"class":263},[204,163352,12522],{"class":214},[204,163354,163355],{"class":319},"\"小李\"",[204,163357,221],{"class":214},[204,163359,163360,163363,163365,163367,163370],{"class":206,"line":1287},[204,163361,163362],{"class":214},"names.extend([",[204,163364,8770],{"class":319},[204,163366,12522],{"class":214},[204,163368,163369],{"class":319},"\"小赵\"",[204,163371,4743],{"class":214},[204,163373,163374],{"class":206,"line":1301},[204,163375,2486],{"emptyLinePlaceholder":135},[204,163377,163378,163380],{"class":206,"line":1307},[204,163379,30501],{"class":263},[204,163381,163382],{"class":214},"(names)\n",[19,163384,163385],{},"删除元素：",[196,163387,163389],{"className":30464,"code":163388,"language":30466,"meta":125,"style":125},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[81,163390,163391,163400,163410,163424,163436],{"__ignoreMap":125},[204,163392,163393,163396,163398],{"class":206,"line":207},[204,163394,163395],{"class":214},"names.remove(",[204,163397,150981],{"class":319},[204,163399,221],{"class":214},[204,163401,163402,163405,163407],{"class":206,"line":126},[204,163403,163404],{"class":214},"last ",[204,163406,260],{"class":210},[204,163408,163409],{"class":214}," names.pop()\n",[204,163411,163412,163415,163417,163420,163422],{"class":206,"line":131},[204,163413,163414],{"class":214},"first ",[204,163416,260],{"class":210},[204,163418,163419],{"class":214}," names.pop(",[204,163421,405],{"class":263},[204,163423,221],{"class":214},[204,163425,163426,163429,163432,163434],{"class":206,"line":1281},[204,163427,163428],{"class":210},"del",[204,163430,163431],{"class":214}," names[",[204,163433,405],{"class":263},[204,163435,33332],{"class":214},[204,163437,163438],{"class":206,"line":1287},[204,163439,163440],{"class":214},"names.clear()\n",[19,163442,163443],{},"查询和统计：",[196,163445,163447],{"className":30464,"code":163446,"language":30466,"meta":125,"style":125},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[81,163448,163449,163477,163481,163492,163503],{"__ignoreMap":125},[204,163450,163451,163453,163455,163457,163459,163461,163463,163465,163467,163469,163471,163473,163475],{"class":206,"line":207},[204,163452,163128],{"class":214},[204,163454,260],{"class":210},[204,163456,52312],{"class":214},[204,163458,431],{"class":263},[204,163460,12522],{"class":214},[204,163462,292],{"class":263},[204,163464,12522],{"class":214},[204,163466,286],{"class":263},[204,163468,12522],{"class":214},[204,163470,292],{"class":263},[204,163472,12522],{"class":214},[204,163474,506],{"class":263},[204,163476,33332],{"class":214},[204,163478,163479],{"class":206,"line":126},[204,163480,2486],{"emptyLinePlaceholder":135},[204,163482,163483,163485,163488,163490],{"class":206,"line":131},[204,163484,30501],{"class":263},[204,163486,163487],{"class":214},"(numbers.index(",[204,163489,286],{"class":263},[204,163491,30583],{"class":214},[204,163493,163494,163496,163499,163501],{"class":206,"line":1281},[204,163495,30501],{"class":263},[204,163497,163498],{"class":214},"(numbers.count(",[204,163500,292],{"class":263},[204,163502,30583],{"class":214},[204,163504,163505,163507,163509,163511],{"class":206,"line":1287},[204,163506,30501],{"class":263},[204,163508,215],{"class":214},[204,163510,7445],{"class":263},[204,163512,163513],{"class":214},"(numbers))\n",[19,163515,163516],{},"排序：",[196,163518,163520],{"className":30464,"code":163519,"language":30466,"meta":125,"style":125},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[81,163521,163522,163546,163550,163555,163562,163566,163580,163586,163590,163595],{"__ignoreMap":125},[204,163523,163524,163526,163528,163530,163532,163534,163536,163538,163540,163542,163544],{"class":206,"line":207},[204,163525,163128],{"class":214},[204,163527,260],{"class":210},[204,163529,52312],{"class":214},[204,163531,286],{"class":263},[204,163533,12522],{"class":214},[204,163535,431],{"class":263},[204,163537,12522],{"class":214},[204,163539,532],{"class":263},[204,163541,12522],{"class":214},[204,163543,292],{"class":263},[204,163545,33332],{"class":214},[204,163547,163548],{"class":206,"line":126},[204,163549,2486],{"emptyLinePlaceholder":135},[204,163551,163552],{"class":206,"line":131},[204,163553,163554],{"class":214},"numbers.sort()\n",[204,163556,163557,163559],{"class":206,"line":1281},[204,163558,30501],{"class":263},[204,163560,163561],{"class":214},"(numbers)\n",[204,163563,163564],{"class":206,"line":1287},[204,163565,2486],{"emptyLinePlaceholder":135},[204,163567,163568,163571,163574,163576,163578],{"class":206,"line":1301},[204,163569,163570],{"class":214},"numbers.sort(",[204,163572,163573],{"class":5303},"reverse",[204,163575,260],{"class":210},[204,163577,31562],{"class":263},[204,163579,221],{"class":214},[204,163581,163582,163584],{"class":206,"line":1307},[204,163583,30501],{"class":263},[204,163585,163561],{"class":214},[204,163587,163588],{"class":206,"line":1398},[204,163589,2486],{"emptyLinePlaceholder":135},[204,163591,163592],{"class":206,"line":1404},[204,163593,163594],{"class":214},"numbers.reverse()\n",[204,163596,163597,163599],{"class":206,"line":1416},[204,163598,30501],{"class":263},[204,163600,163561],{"class":214},[19,163602,163603,163606,163607,163610],{},[81,163604,163605],{},"sort()"," 会修改原列表，",[81,163608,163609],{},"sorted()"," 返回新列表。",[196,163612,163614],{"className":30464,"code":163613,"language":30466,"meta":125,"style":125},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[81,163615,163616,163640,163652,163656,163662],{"__ignoreMap":125},[204,163617,163618,163620,163622,163624,163626,163628,163630,163632,163634,163636,163638],{"class":206,"line":207},[204,163619,163128],{"class":214},[204,163621,260],{"class":210},[204,163623,52312],{"class":214},[204,163625,286],{"class":263},[204,163627,12522],{"class":214},[204,163629,431],{"class":263},[204,163631,12522],{"class":214},[204,163633,532],{"class":263},[204,163635,12522],{"class":214},[204,163637,292],{"class":263},[204,163639,33332],{"class":214},[204,163641,163642,163645,163647,163650],{"class":206,"line":126},[204,163643,163644],{"class":214},"new_numbers ",[204,163646,260],{"class":210},[204,163648,163649],{"class":263}," sorted",[204,163651,163561],{"class":214},[204,163653,163654],{"class":206,"line":131},[204,163655,2486],{"emptyLinePlaceholder":135},[204,163657,163658,163660],{"class":206,"line":1281},[204,163659,30501],{"class":263},[204,163661,163561],{"class":214},[204,163663,163664,163666],{"class":206,"line":1287},[204,163665,30501],{"class":263},[204,163667,163668],{"class":214},"(new_numbers)\n",[14,163670,163672],{"id":163671},"_65-列表遍历","6.5 列表遍历",[196,163674,163676],{"className":30464,"code":163675,"language":30466,"meta":125,"style":125},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[81,163677,163678,163698,163702,163712],{"__ignoreMap":125},[204,163679,163680,163682,163684,163686,163688,163690,163692,163694,163696],{"class":206,"line":207},[204,163681,160425],{"class":214},[204,163683,260],{"class":210},[204,163685,52312],{"class":214},[204,163687,149933],{"class":319},[204,163689,12522],{"class":214},[204,163691,150981],{"class":319},[204,163693,12522],{"class":214},[204,163695,159776],{"class":319},[204,163697,33332],{"class":214},[204,163699,163700],{"class":206,"line":126},[204,163701,2486],{"emptyLinePlaceholder":135},[204,163703,163704,163706,163708,163710],{"class":206,"line":131},[204,163705,3111],{"class":210},[204,163707,160461],{"class":214},[204,163709,26129],{"class":210},[204,163711,160466],{"class":214},[204,163713,163714,163716],{"class":206,"line":1281},[204,163715,31385],{"class":263},[204,163717,150705],{"class":214},[19,163719,163720],{},"需要索引时：",[196,163722,163724],{"className":30464,"code":163723,"language":30466,"meta":125,"style":125},"for index, name in enumerate(names):\n    print(index, name)\n",[81,163725,163726,163740],{"__ignoreMap":125},[204,163727,163728,163730,163733,163735,163737],{"class":206,"line":207},[204,163729,3111],{"class":210},[204,163731,163732],{"class":214}," index, name ",[204,163734,26129],{"class":210},[204,163736,31692],{"class":263},[204,163738,163739],{"class":214},"(names):\n",[204,163741,163742,163744],{"class":206,"line":126},[204,163743,31385],{"class":263},[204,163745,163746],{"class":214},"(index, name)\n",[19,163748,163749],{},"统计总分：",[196,163751,163753],{"className":30464,"code":163752,"language":30466,"meta":125,"style":125},"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",[81,163754,163755,163780,163788,163792,163803,163811,163815,163832],{"__ignoreMap":125},[204,163756,163757,163760,163762,163764,163766,163768,163770,163772,163774,163776,163778],{"class":206,"line":207},[204,163758,163759],{"class":214},"scores ",[204,163761,260],{"class":210},[204,163763,52312],{"class":214},[204,163765,1075],{"class":263},[204,163767,12522],{"class":214},[204,163769,949],{"class":263},[204,163771,12522],{"class":214},[204,163773,467],{"class":263},[204,163775,12522],{"class":214},[204,163777,774],{"class":263},[204,163779,33332],{"class":214},[204,163781,163782,163784,163786],{"class":206,"line":126},[204,163783,157305],{"class":214},[204,163785,260],{"class":210},[204,163787,47419],{"class":263},[204,163789,163790],{"class":206,"line":131},[204,163791,2486],{"emptyLinePlaceholder":135},[204,163793,163794,163796,163798,163800],{"class":206,"line":1281},[204,163795,3111],{"class":210},[204,163797,157828],{"class":214},[204,163799,26129],{"class":210},[204,163801,163802],{"class":214}," scores:\n",[204,163804,163805,163807,163809],{"class":206,"line":1287},[204,163806,159352],{"class":214},[204,163808,9564],{"class":210},[204,163810,1665],{"class":214},[204,163812,163813],{"class":206,"line":1301},[204,163814,2486],{"emptyLinePlaceholder":135},[204,163816,163817,163820,163822,163825,163827,163829],{"class":206,"line":1307},[204,163818,163819],{"class":214},"avg ",[204,163821,260],{"class":210},[204,163823,163824],{"class":214}," total ",[204,163826,797],{"class":210},[204,163828,7418],{"class":263},[204,163830,163831],{"class":214},"(scores)\n",[204,163833,163834,163836,163838,163840,163843,163845,163848,163850,163852,163854],{"class":206,"line":1398},[204,163835,30501],{"class":263},[204,163837,215],{"class":214},[204,163839,267],{"class":210},[204,163841,163842],{"class":319},"\"平均分:",[204,163844,1109],{"class":263},[204,163846,163847],{"class":214},"avg",[204,163849,157204],{"class":210},[204,163851,1159],{"class":263},[204,163853,464],{"class":319},[204,163855,221],{"class":214},[14,163857,163859],{"id":163858},"_66-元组tuple","6.6 元组tuple",[19,163861,163862],{},"元组和列表类似，但不可修改。",[196,163864,163866],{"className":30464,"code":163865,"language":30466,"meta":125,"style":125},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[81,163867,163868,163885],{"__ignoreMap":125},[204,163869,163870,163873,163875,163877,163879,163881,163883],{"class":206,"line":207},[204,163871,163872],{"class":214},"point ",[204,163874,260],{"class":210},[204,163876,1744],{"class":214},[204,163878,659],{"class":263},[204,163880,12522],{"class":214},[204,163882,913],{"class":263},[204,163884,221],{"class":214},[204,163886,163887,163889,163891,163893,163895,163897,163899,163901,163903],{"class":206,"line":126},[204,163888,116399],{"class":214},[204,163890,260],{"class":210},[204,163892,1744],{"class":214},[204,163894,149933],{"class":319},[204,163896,12522],{"class":214},[204,163898,863],{"class":263},[204,163900,12522],{"class":214},[204,163902,69355],{"class":319},[204,163904,221],{"class":214},[19,163906,163907],{},"单元素元组必须加逗号：",[196,163909,163911],{"className":30464,"code":163910,"language":30466,"meta":125,"style":125},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[81,163912,163913,163927,163940,163944,163958],{"__ignoreMap":125},[204,163914,163915,163918,163920,163922,163924],{"class":206,"line":207},[204,163916,163917],{"class":214},"t1 ",[204,163919,260],{"class":210},[204,163921,1744],{"class":214},[204,163923,659],{"class":263},[204,163925,163926],{"class":214},",)\n",[204,163928,163929,163932,163934,163936,163938],{"class":206,"line":126},[204,163930,163931],{"class":214},"t2 ",[204,163933,260],{"class":210},[204,163935,1744],{"class":214},[204,163937,659],{"class":263},[204,163939,221],{"class":214},[204,163941,163942],{"class":206,"line":131},[204,163943,2486],{"emptyLinePlaceholder":135},[204,163945,163946,163948,163950,163952,163955],{"class":206,"line":1281},[204,163947,30501],{"class":263},[204,163949,215],{"class":214},[204,163951,103192],{"class":263},[204,163953,163954],{"class":214},"(t1))  ",[204,163956,163957],{"class":273},"# tuple\n",[204,163959,163960,163962,163964,163966,163969],{"class":206,"line":1287},[204,163961,30501],{"class":263},[204,163963,215],{"class":214},[204,163965,103192],{"class":263},[204,163967,163968],{"class":214},"(t2))  ",[204,163970,163971],{"class":273},"# int\n",[19,163973,163974],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,163976,163978],{"id":163977},"_67-字符串str","6.7 字符串str",[19,163980,163981],{},"字符串也是序列，可以索引、切片和遍历。",[196,163983,163985],{"className":30464,"code":163984,"language":30466,"meta":125,"style":125},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[81,163986,163987,163995,163999,164010,164022,164026,164037],{"__ignoreMap":125},[204,163988,163989,163991,163993],{"class":206,"line":207},[204,163990,156489],{"class":214},[204,163992,260],{"class":210},[204,163994,159726],{"class":319},[204,163996,163997],{"class":206,"line":126},[204,163998,2486],{"emptyLinePlaceholder":135},[204,164000,164001,164003,164006,164008],{"class":206,"line":131},[204,164002,30501],{"class":263},[204,164004,164005],{"class":214},"(text[",[204,164007,405],{"class":263},[204,164009,4743],{"class":214},[204,164011,164012,164014,164016,164018,164020],{"class":206,"line":1281},[204,164013,30501],{"class":263},[204,164015,164005],{"class":214},[204,164017,745],{"class":210},[204,164019,431],{"class":263},[204,164021,4743],{"class":214},[204,164023,164024],{"class":206,"line":1287},[204,164025,2486],{"emptyLinePlaceholder":135},[204,164027,164028,164030,164032,164034],{"class":206,"line":1301},[204,164029,3111],{"class":210},[204,164031,159737],{"class":214},[204,164033,26129],{"class":210},[204,164035,164036],{"class":214}," text:\n",[204,164038,164039,164041],{"class":206,"line":1307},[204,164040,31385],{"class":263},[204,164042,159748],{"class":214},[19,164044,164045],{},"字符串不可变：",[196,164047,164049],{"className":30464,"code":164048,"language":30466,"meta":125,"style":125},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[81,164050,164051,164059],{"__ignoreMap":125},[204,164052,164053,164055,164057],{"class":206,"line":207},[204,164054,156489],{"class":214},[204,164056,260],{"class":210},[204,164058,159726],{"class":319},[204,164060,164061,164064,164066,164068,164070,164073],{"class":206,"line":126},[204,164062,164063],{"class":214},"text[",[204,164065,405],{"class":263},[204,164067,4529],{"class":214},[204,164069,260],{"class":210},[204,164071,164072],{"class":319}," \"P\"",[204,164074,164075],{"class":273},"  # 报错\n",[19,164077,164078],{},"如果要得到新字符串：",[196,164080,164082],{"className":30464,"code":164081,"language":30466,"meta":125,"style":125},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[81,164083,164084,164092,164110],{"__ignoreMap":125},[204,164085,164086,164088,164090],{"class":206,"line":207},[204,164087,156489],{"class":214},[204,164089,260],{"class":210},[204,164091,159726],{"class":319},[204,164093,164094,164096,164098,164100,164102,164105,164107],{"class":206,"line":126},[204,164095,156489],{"class":214},[204,164097,260],{"class":210},[204,164099,164072],{"class":319},[204,164101,45652],{"class":210},[204,164103,164104],{"class":214}," text[",[204,164106,431],{"class":263},[204,164108,164109],{"class":214},":]\n",[204,164111,164112,164114],{"class":206,"line":131},[204,164113,30501],{"class":263},[204,164115,164116],{"class":214},"(text)\n",[14,164118,164120],{"id":164119},"_68-切片","6.8 切片",[19,164122,164123],{},"切片用于从序列中取一部分。",[196,164125,164127],{"className":30464,"code":164126,"language":30466,"meta":125,"style":125},"序列[开始:结束:步长]\n",[81,164128,164129],{"__ignoreMap":125},[204,164130,164131],{"class":206,"line":207},[204,164132,164126],{"class":214},[19,164134,164135],{},"结束位置不包含。",[196,164137,164139],{"className":30464,"code":164138,"language":30466,"meta":125,"style":125},"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",[81,164140,164141,164178,164182,164201,164216,164230,164244],{"__ignoreMap":125},[204,164142,164143,164146,164148,164150,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172,164174,164176],{"class":206,"line":207},[204,164144,164145],{"class":214},"nums ",[204,164147,260],{"class":210},[204,164149,52312],{"class":214},[204,164151,405],{"class":263},[204,164153,12522],{"class":214},[204,164155,431],{"class":263},[204,164157,12522],{"class":214},[204,164159,292],{"class":263},[204,164161,12522],{"class":214},[204,164163,286],{"class":263},[204,164165,12522],{"class":214},[204,164167,506],{"class":263},[204,164169,12522],{"class":214},[204,164171,532],{"class":263},[204,164173,12522],{"class":214},[204,164175,557],{"class":263},[204,164177,33332],{"class":214},[204,164179,164180],{"class":206,"line":126},[204,164181,2486],{"emptyLinePlaceholder":135},[204,164183,164184,164186,164189,164191,164193,164195,164198],{"class":206,"line":131},[204,164185,30501],{"class":263},[204,164187,164188],{"class":214},"(nums[",[204,164190,431],{"class":263},[204,164192,1072],{"class":214},[204,164194,506],{"class":263},[204,164196,164197],{"class":214},"])    ",[204,164199,164200],{"class":273},"# [1, 2, 3]\n",[204,164202,164203,164205,164208,164210,164213],{"class":206,"line":1281},[204,164204,30501],{"class":263},[204,164206,164207],{"class":214},"(nums[:",[204,164209,286],{"class":263},[204,164211,164212],{"class":214},"])     ",[204,164214,164215],{"class":273},"# [0, 1, 2]\n",[204,164217,164218,164220,164222,164224,164227],{"class":206,"line":1287},[204,164219,30501],{"class":263},[204,164221,164188],{"class":214},[204,164223,286],{"class":263},[204,164225,164226],{"class":214},":])     ",[204,164228,164229],{"class":273},"# [3, 4, 5, 6]\n",[204,164231,164232,164234,164237,164239,164241],{"class":206,"line":1301},[204,164233,30501],{"class":263},[204,164235,164236],{"class":214},"(nums[::",[204,164238,292],{"class":263},[204,164240,164197],{"class":214},[204,164242,164243],{"class":273},"# [0, 2, 4, 6]\n",[204,164245,164246,164248,164250,164252,164254,164257],{"class":206,"line":1307},[204,164247,30501],{"class":263},[204,164249,164236],{"class":214},[204,164251,745],{"class":210},[204,164253,431],{"class":263},[204,164255,164256],{"class":214},"])   ",[204,164258,164259],{"class":273},"# 反转\n",[19,164261,164262],{},"字符串切片：",[196,164264,164266],{"className":30464,"code":164265,"language":30466,"meta":125,"style":125},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[81,164267,164268,164277,164291],{"__ignoreMap":125},[204,164269,164270,164272,164274],{"class":206,"line":207},[204,164271,156489],{"class":214},[204,164273,260],{"class":210},[204,164275,164276],{"class":319}," \"abcdef\"\n",[204,164278,164279,164281,164283,164285,164287,164289],{"class":206,"line":126},[204,164280,30501],{"class":263},[204,164282,164005],{"class":214},[204,164284,431],{"class":263},[204,164286,1072],{"class":214},[204,164288,506],{"class":263},[204,164290,4743],{"class":214},[204,164292,164293,164295,164298,164300,164302],{"class":206,"line":131},[204,164294,30501],{"class":263},[204,164296,164297],{"class":214},"(text[::",[204,164299,745],{"class":210},[204,164301,431],{"class":263},[204,164303,4743],{"class":214},[14,164305,164307],{"id":164306},"_69-集合set","6.9 集合set",[19,164309,164310],{},"集合特点：",[161,164312,164313,164316,164319],{},[71,164314,164315],{},"无序。",[71,164317,164318],{},"元素不重复。",[71,164320,164321],{},"可以做交集、并集、差集。",[196,164323,164325],{"className":30464,"code":164324,"language":30466,"meta":125,"style":125},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[81,164326,164327,164355],{"__ignoreMap":125},[204,164328,164329,164331,164333,164335,164337,164339,164341,164343,164345,164347,164349,164351,164353],{"class":206,"line":207},[204,164330,164145],{"class":214},[204,164332,260],{"class":210},[204,164334,4534],{"class":214},[204,164336,431],{"class":263},[204,164338,12522],{"class":214},[204,164340,292],{"class":263},[204,164342,12522],{"class":214},[204,164344,286],{"class":263},[204,164346,12522],{"class":214},[204,164348,286],{"class":263},[204,164350,12522],{"class":214},[204,164352,506],{"class":263},[204,164354,1651],{"class":214},[204,164356,164357,164359],{"class":206,"line":126},[204,164358,30501],{"class":263},[204,164360,164361],{"class":214},"(nums)\n",[19,164363,164364],{},"创建空集合：",[196,164366,164368],{"className":30464,"code":164367,"language":30466,"meta":125,"style":125},"s = set()\n",[81,164369,164370],{"__ignoreMap":125},[204,164371,164372,164374,164376,164378],{"class":206,"line":207},[204,164373,10666],{"class":214},[204,164375,260],{"class":210},[204,164377,119807],{"class":263},[204,164379,2062],{"class":214},[19,164381,9112,164382,164384],{},[81,164383,32545],{}," 是空字典，不是空集合。",[19,164386,164387],{},"集合常用操作：",[196,164389,164391],{"className":30464,"code":164390,"language":30466,"meta":125,"style":125},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[81,164392,164393,164413,164417,164426,164435,164444],{"__ignoreMap":125},[204,164394,164395,164397,164399,164401,164403,164405,164407,164409,164411],{"class":206,"line":207},[204,164396,10666],{"class":214},[204,164398,260],{"class":210},[204,164400,4534],{"class":214},[204,164402,431],{"class":263},[204,164404,12522],{"class":214},[204,164406,292],{"class":263},[204,164408,12522],{"class":214},[204,164410,286],{"class":263},[204,164412,1651],{"class":214},[204,164414,164415],{"class":206,"line":126},[204,164416,2486],{"emptyLinePlaceholder":135},[204,164418,164419,164422,164424],{"class":206,"line":131},[204,164420,164421],{"class":214},"s.add(",[204,164423,506],{"class":263},[204,164425,221],{"class":214},[204,164427,164428,164431,164433],{"class":206,"line":1281},[204,164429,164430],{"class":214},"s.remove(",[204,164432,292],{"class":263},[204,164434,221],{"class":214},[204,164436,164437,164440,164442],{"class":206,"line":1287},[204,164438,164439],{"class":214},"s.discard(",[204,164441,659],{"class":263},[204,164443,221],{"class":214},[204,164445,164446,164448,164450,164452],{"class":206,"line":1301},[204,164447,30501],{"class":263},[204,164449,215],{"class":214},[204,164451,7445],{"class":263},[204,164453,164454],{"class":214},"(s))\n",[19,164456,164457],{},"交并差：",[196,164459,164461],{"className":30464,"code":164460,"language":30466,"meta":125,"style":125},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[81,164462,164463,164483,164503,164507,164522,164535],{"__ignoreMap":125},[204,164464,164465,164467,164469,164471,164473,164475,164477,164479,164481],{"class":206,"line":207},[204,164466,11006],{"class":214},[204,164468,260],{"class":210},[204,164470,4534],{"class":214},[204,164472,431],{"class":263},[204,164474,12522],{"class":214},[204,164476,292],{"class":263},[204,164478,12522],{"class":214},[204,164480,286],{"class":263},[204,164482,1651],{"class":214},[204,164484,164485,164487,164489,164491,164493,164495,164497,164499,164501],{"class":206,"line":126},[204,164486,11032],{"class":214},[204,164488,260],{"class":210},[204,164490,4534],{"class":214},[204,164492,286],{"class":263},[204,164494,12522],{"class":214},[204,164496,506],{"class":263},[204,164498,12522],{"class":214},[204,164500,532],{"class":263},[204,164502,1651],{"class":214},[204,164504,164505],{"class":206,"line":131},[204,164506,2486],{"emptyLinePlaceholder":135},[204,164508,164509,164511,164514,164516,164519],{"class":206,"line":1281},[204,164510,30501],{"class":263},[204,164512,164513],{"class":214},"(a ",[204,164515,566],{"class":210},[204,164517,164518],{"class":214}," b)  ",[204,164520,164521],{"class":273},"# 交集\n",[204,164523,164524,164526,164528,164530,164532],{"class":206,"line":1287},[204,164525,30501],{"class":263},[204,164527,164513],{"class":214},[204,164529,1134],{"class":210},[204,164531,164518],{"class":214},[204,164533,164534],{"class":273},"# 并集\n",[204,164536,164537,164539,164541,164543,164545],{"class":206,"line":1301},[204,164538,30501],{"class":263},[204,164540,164513],{"class":214},[204,164542,745],{"class":210},[204,164544,164518],{"class":214},[204,164546,164547],{"class":273},"# 差集\n",[14,164549,164551],{"id":164550},"_610-字典dict","6.10 字典dict",[19,164553,164554],{},"字典通过 key-value 保存数据。",[196,164556,164558],{"className":30464,"code":164557,"language":30466,"meta":125,"style":125},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[81,164559,164560,164568,164578,164589,164599],{"__ignoreMap":125},[204,164561,164562,164564,164566],{"class":206,"line":207},[204,164563,149526],{"class":214},[204,164565,260],{"class":210},[204,164567,15659],{"class":214},[204,164569,164570,164572,164574,164576],{"class":206,"line":126},[204,164571,147065],{"class":319},[204,164573,51523],{"class":214},[204,164575,149933],{"class":319},[204,164577,31552],{"class":214},[204,164579,164580,164583,164585,164587],{"class":206,"line":131},[204,164581,164582],{"class":319},"    \"age\"",[204,164584,51523],{"class":214},[204,164586,863],{"class":263},[204,164588,31552],{"class":214},[204,164590,164591,164594,164596],{"class":206,"line":1281},[204,164592,164593],{"class":319},"    \"score\"",[204,164595,51523],{"class":214},[204,164597,164598],{"class":263},"95\n",[204,164600,164601],{"class":206,"line":1287},[204,164602,1651],{"class":214},[19,164604,164605],{},"获取值：",[196,164607,164609],{"className":30464,"code":164608,"language":30466,"meta":125,"style":125},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[81,164610,164611,164622],{"__ignoreMap":125},[204,164612,164613,164615,164618,164620],{"class":206,"line":207},[204,164614,30501],{"class":263},[204,164616,164617],{"class":214},"(student[",[204,164619,62765],{"class":319},[204,164621,4743],{"class":214},[204,164623,164624,164626,164629,164631],{"class":206,"line":126},[204,164625,30501],{"class":263},[204,164627,164628],{"class":214},"(student.get(",[204,164630,62765],{"class":319},[204,164632,30583],{"class":214},[19,164634,15475],{},[196,164636,164638],{"className":30464,"code":164637,"language":30466,"meta":125,"style":125},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[81,164639,164640,164653],{"__ignoreMap":125},[204,164641,164642,164644,164647,164650],{"class":206,"line":207},[204,164643,152904],{"class":214},[204,164645,164646],{"class":319},"\"address\"",[204,164648,164649],{"class":214},"]     ",[204,164651,164652],{"class":273},"# key不存在会报错\n",[204,164654,164655,164658,164660,164662],{"class":206,"line":126},[204,164656,164657],{"class":214},"student.get(",[204,164659,164646],{"class":319},[204,164661,13801],{"class":214},[204,164663,164664],{"class":273},"# key不存在返回None\n",[19,164666,164667],{},"设置默认值：",[196,164669,164671],{"className":30464,"code":164670,"language":30466,"meta":125,"style":125},"print(student.get(\"address\", \"未知\"))\n",[81,164672,164673],{"__ignoreMap":125},[204,164674,164675,164677,164679,164681,164683,164686],{"class":206,"line":207},[204,164676,30501],{"class":263},[204,164678,164628],{"class":214},[204,164680,164646],{"class":319},[204,164682,12522],{"class":214},[204,164684,164685],{"class":319},"\"未知\"",[204,164687,30583],{"class":214},[19,164689,164690],{},"新增和修改：",[196,164692,164694],{"className":30464,"code":164693,"language":30466,"meta":125,"style":125},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[81,164695,164696,164709],{"__ignoreMap":125},[204,164697,164698,164700,164702,164704,164706],{"class":206,"line":207},[204,164699,152904],{"class":214},[204,164701,69210],{"class":319},[204,164703,4529],{"class":214},[204,164705,260],{"class":210},[204,164707,164708],{"class":263}," 19\n",[204,164710,164711,164713,164715,164717,164719],{"class":206,"line":126},[204,164712,152904],{"class":214},[204,164714,164646],{"class":319},[204,164716,4529],{"class":214},[204,164718,260],{"class":210},[204,164720,164721],{"class":319}," \"北京\"\n",[19,164723,164724],{},"删除：",[196,164726,164728],{"className":30464,"code":164727,"language":30466,"meta":125,"style":125},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[81,164729,164730,164743,164753],{"__ignoreMap":125},[204,164731,164732,164734,164736,164739,164741],{"class":206,"line":207},[204,164733,155403],{"class":214},[204,164735,260],{"class":210},[204,164737,164738],{"class":214}," student.pop(",[204,164740,151517],{"class":319},[204,164742,221],{"class":214},[204,164744,164745,164747,164749,164751],{"class":206,"line":126},[204,164746,163428],{"class":210},[204,164748,152194],{"class":214},[204,164750,69210],{"class":319},[204,164752,33332],{"class":214},[204,164754,164755],{"class":206,"line":131},[204,164756,164757],{"class":214},"student.clear()\n",[14,164759,164761],{"id":164760},"_611-字典遍历","6.11 字典遍历",[19,164763,164764],{},"遍历 key：",[196,164766,164768],{"className":30464,"code":164767,"language":30466,"meta":125,"style":125},"for key in student:\n    print(key, student[key])\n",[81,164769,164770,164782],{"__ignoreMap":125},[204,164771,164772,164774,164777,164779],{"class":206,"line":207},[204,164773,3111],{"class":210},[204,164775,164776],{"class":214}," key ",[204,164778,26129],{"class":210},[204,164780,164781],{"class":214}," student:\n",[204,164783,164784,164786],{"class":206,"line":126},[204,164785,31385],{"class":263},[204,164787,164788],{"class":214},"(key, student[key])\n",[19,164790,164791],{},"遍历 value：",[196,164793,164795],{"className":30464,"code":164794,"language":30466,"meta":125,"style":125},"for value in student.values():\n    print(value)\n",[81,164796,164797,164809],{"__ignoreMap":125},[204,164798,164799,164801,164804,164806],{"class":206,"line":207},[204,164800,3111],{"class":210},[204,164802,164803],{"class":214}," value ",[204,164805,26129],{"class":210},[204,164807,164808],{"class":214}," student.values():\n",[204,164810,164811,164813],{"class":206,"line":126},[204,164812,31385],{"class":263},[204,164814,164815],{"class":214},"(value)\n",[19,164817,164818],{},"遍历 key 和 value：",[196,164820,164822],{"className":30464,"code":164821,"language":30466,"meta":125,"style":125},"for key, value in student.items():\n    print(key, value)\n",[81,164823,164824,164836],{"__ignoreMap":125},[204,164825,164826,164828,164831,164833],{"class":206,"line":207},[204,164827,3111],{"class":210},[204,164829,164830],{"class":214}," key, value ",[204,164832,26129],{"class":210},[204,164834,164835],{"class":214}," student.items():\n",[204,164837,164838,164840],{"class":206,"line":126},[204,164839,31385],{"class":263},[204,164841,164842],{"class":214},"(key, value)\n",[14,164844,164846],{"id":164845},"_612-嵌套容器","6.12 嵌套容器",[19,164848,164849],{},"列表中保存字典，是项目中最常见的结构之一。",[196,164851,164853],{"className":30464,"code":164852,"language":30466,"meta":125,"style":125},"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",[81,164854,164855,164863,164891,164919,164947,164951,164955,164965],{"__ignoreMap":125},[204,164856,164857,164859,164861],{"class":206,"line":207},[204,164858,159761],{"class":214},[204,164860,260],{"class":210},[204,164862,55533],{"class":214},[204,164864,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885,164887,164889],{"class":206,"line":126},[204,164866,148430],{"class":214},[204,164868,62765],{"class":319},[204,164870,51523],{"class":214},[204,164872,149933],{"class":319},[204,164874,12522],{"class":214},[204,164876,69210],{"class":319},[204,164878,51523],{"class":214},[204,164880,863],{"class":263},[204,164882,12522],{"class":214},[204,164884,151517],{"class":319},[204,164886,51523],{"class":214},[204,164888,1202],{"class":263},[204,164890,5016],{"class":214},[204,164892,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913,164915,164917],{"class":206,"line":131},[204,164894,148430],{"class":214},[204,164896,62765],{"class":319},[204,164898,51523],{"class":214},[204,164900,150981],{"class":319},[204,164902,12522],{"class":214},[204,164904,69210],{"class":319},[204,164906,51523],{"class":214},[204,164908,838],{"class":263},[204,164910,12522],{"class":214},[204,164912,151517],{"class":319},[204,164914,51523],{"class":214},[204,164916,1024],{"class":263},[204,164918,5016],{"class":214},[204,164920,164921,164923,164925,164927,164929,164931,164933,164935,164937,164939,164941,164943,164945],{"class":206,"line":1281},[204,164922,148430],{"class":214},[204,164924,62765],{"class":319},[204,164926,51523],{"class":214},[204,164928,159776],{"class":319},[204,164930,12522],{"class":214},[204,164932,69210],{"class":319},[204,164934,51523],{"class":214},[204,164936,888],{"class":263},[204,164938,12522],{"class":214},[204,164940,151517],{"class":319},[204,164942,51523],{"class":214},[204,164944,619],{"class":263},[204,164946,5016],{"class":214},[204,164948,164949],{"class":206,"line":1287},[204,164950,33332],{"class":214},[204,164952,164953],{"class":206,"line":1301},[204,164954,2486],{"emptyLinePlaceholder":135},[204,164956,164957,164959,164961,164963],{"class":206,"line":1307},[204,164958,3111],{"class":210},[204,164960,152182],{"class":214},[204,164962,26129],{"class":210},[204,164964,152187],{"class":214},[204,164966,164967,164969,164971,164973,164976,164978],{"class":206,"line":1398},[204,164968,31385],{"class":263},[204,164970,164617],{"class":214},[204,164972,62765],{"class":319},[204,164974,164975],{"class":214},"], student[",[204,164977,151517],{"class":319},[204,164979,4743],{"class":214},[19,164981,164982],{},"统计平均分：",[196,164984,164986],{"className":30464,"code":164985,"language":30466,"meta":125,"style":125},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[81,164987,164988,164996,165000,165010,165022,165026,165041],{"__ignoreMap":125},[204,164989,164990,164992,164994],{"class":206,"line":207},[204,164991,157305],{"class":214},[204,164993,260],{"class":210},[204,164995,47419],{"class":263},[204,164997,164998],{"class":206,"line":126},[204,164999,2486],{"emptyLinePlaceholder":135},[204,165001,165002,165004,165006,165008],{"class":206,"line":131},[204,165003,3111],{"class":210},[204,165005,152182],{"class":214},[204,165007,26129],{"class":210},[204,165009,152187],{"class":214},[204,165011,165012,165014,165016,165018,165020],{"class":206,"line":1281},[204,165013,159352],{"class":214},[204,165015,9564],{"class":210},[204,165017,152194],{"class":214},[204,165019,151517],{"class":319},[204,165021,33332],{"class":214},[204,165023,165024],{"class":206,"line":1287},[204,165025,2486],{"emptyLinePlaceholder":135},[204,165027,165028,165030,165032,165034,165036,165038],{"class":206,"line":1301},[204,165029,163819],{"class":214},[204,165031,260],{"class":210},[204,165033,163824],{"class":214},[204,165035,797],{"class":210},[204,165037,7418],{"class":263},[204,165039,165040],{"class":214},"(students)\n",[204,165042,165043,165045,165047,165049,165051,165053,165055,165057,165059,165061],{"class":206,"line":1307},[204,165044,30501],{"class":263},[204,165046,215],{"class":214},[204,165048,267],{"class":210},[204,165050,163842],{"class":319},[204,165052,1109],{"class":263},[204,165054,163847],{"class":214},[204,165056,157204],{"class":210},[204,165058,1159],{"class":263},[204,165060,464],{"class":319},[204,165062,221],{"class":214},[19,165064,165065],{},"查找学生：",[196,165067,165069],{"className":30464,"code":165068,"language":30466,"meta":125,"style":125},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[81,165070,165071,165086,165090,165100,165114,165120,165124,165130],{"__ignoreMap":125},[204,165072,165073,165075,165077,165079,165081,165084],{"class":206,"line":207},[204,165074,111663],{"class":214},[204,165076,260],{"class":210},[204,165078,60691],{"class":263},[204,165080,215],{"class":214},[204,165082,165083],{"class":319},"\"请输入学生姓名:\"",[204,165085,221],{"class":214},[204,165087,165088],{"class":206,"line":126},[204,165089,2486],{"emptyLinePlaceholder":135},[204,165091,165092,165094,165096,165098],{"class":206,"line":131},[204,165093,3111],{"class":210},[204,165095,152182],{"class":214},[204,165097,26129],{"class":210},[204,165099,152187],{"class":214},[204,165101,165102,165104,165106,165108,165110,165112],{"class":206,"line":1281},[204,165103,3187],{"class":210},[204,165105,152194],{"class":214},[204,165107,62765],{"class":319},[204,165109,4529],{"class":214},[204,165111,3035],{"class":210},[204,165113,160477],{"class":214},[204,165115,165116,165118],{"class":206,"line":1287},[204,165117,32537],{"class":263},[204,165119,150087],{"class":214},[204,165121,165122],{"class":206,"line":1301},[204,165123,31713],{"class":210},[204,165125,165126,165128],{"class":206,"line":1307},[204,165127,1787],{"class":210},[204,165129,3825],{"class":214},[204,165131,165132,165134,165136,165139],{"class":206,"line":1398},[204,165133,31385],{"class":263},[204,165135,215],{"class":214},[204,165137,165138],{"class":319},"\"没有找到\"",[204,165140,221],{"class":214},[14,165142,165144],{"id":165143},"_613-容器通用操作","6.13 容器通用操作",[19,165146,165147],{},"长度：",[196,165149,165151],{"className":30464,"code":165150,"language":30466,"meta":125,"style":125},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[81,165152,165153,165172,165182],{"__ignoreMap":125},[204,165154,165155,165157,165160,165162,165164,165166,165168,165170],{"class":206,"line":207},[204,165156,7445],{"class":263},[204,165158,165159],{"class":214},"([",[204,165161,431],{"class":263},[204,165163,12522],{"class":214},[204,165165,292],{"class":263},[204,165167,12522],{"class":214},[204,165169,286],{"class":263},[204,165171,4743],{"class":214},[204,165173,165174,165176,165178,165180],{"class":206,"line":126},[204,165175,7445],{"class":263},[204,165177,215],{"class":214},[204,165179,155925],{"class":319},[204,165181,221],{"class":214},[204,165183,165184,165186,165189,165191,165193,165195],{"class":206,"line":131},[204,165185,7445],{"class":263},[204,165187,165188],{"class":214},"({",[204,165190,62765],{"class":319},[204,165192,51523],{"class":214},[204,165194,149933],{"class":319},[204,165196,165197],{"class":214},"})\n",[19,165199,165200],{},"最大最小：",[196,165202,165204],{"className":30464,"code":165203,"language":30466,"meta":125,"style":125},"max([1, 2, 3])\nmin([1, 2, 3])\n",[81,165205,165206,165224],{"__ignoreMap":125},[204,165207,165208,165210,165212,165214,165216,165218,165220,165222],{"class":206,"line":207},[204,165209,6102],{"class":263},[204,165211,165159],{"class":214},[204,165213,431],{"class":263},[204,165215,12522],{"class":214},[204,165217,292],{"class":263},[204,165219,12522],{"class":214},[204,165221,286],{"class":263},[204,165223,4743],{"class":214},[204,165225,165226,165229,165231,165233,165235,165237,165239,165241],{"class":206,"line":126},[204,165227,165228],{"class":263},"min",[204,165230,165159],{"class":214},[204,165232,431],{"class":263},[204,165234,12522],{"class":214},[204,165236,292],{"class":263},[204,165238,12522],{"class":214},[204,165240,286],{"class":263},[204,165242,4743],{"class":214},[19,165244,165245],{},"求和：",[196,165247,165249],{"className":30464,"code":165248,"language":30466,"meta":125,"style":125},"sum([1, 2, 3])\n",[81,165250,165251],{"__ignoreMap":125},[204,165252,165253,165256,165258,165260,165262,165264,165266,165268],{"class":206,"line":207},[204,165254,165255],{"class":263},"sum",[204,165257,165159],{"class":214},[204,165259,431],{"class":263},[204,165261,12522],{"class":214},[204,165263,292],{"class":263},[204,165265,12522],{"class":214},[204,165267,286],{"class":263},[204,165269,4743],{"class":214},[19,165271,163516],{},[196,165273,165275],{"className":30464,"code":165274,"language":30466,"meta":125,"style":125},"sorted([3, 1, 2])\n",[81,165276,165277],{"__ignoreMap":125},[204,165278,165279,165282,165284,165286,165288,165290,165292,165294],{"class":206,"line":207},[204,165280,165281],{"class":263},"sorted",[204,165283,165159],{"class":214},[204,165285,286],{"class":263},[204,165287,12522],{"class":214},[204,165289,431],{"class":263},[204,165291,12522],{"class":214},[204,165293,292],{"class":263},[204,165295,4743],{"class":214},[19,165297,165298],{},"类型转换：",[196,165300,165302],{"className":30464,"code":165301,"language":30466,"meta":125,"style":125},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[81,165303,165304,165314,165332],{"__ignoreMap":125},[204,165305,165306,165308,165310,165312],{"class":206,"line":207},[204,165307,154115],{"class":263},[204,165309,215],{"class":214},[204,165311,155925],{"class":319},[204,165313,221],{"class":214},[204,165315,165316,165318,165320,165322,165324,165326,165328,165330],{"class":206,"line":126},[204,165317,155310],{"class":263},[204,165319,165159],{"class":214},[204,165321,431],{"class":263},[204,165323,12522],{"class":214},[204,165325,292],{"class":263},[204,165327,12522],{"class":214},[204,165329,286],{"class":263},[204,165331,4743],{"class":214},[204,165333,165334,165336,165338,165340,165342,165344,165346,165348,165350,165352],{"class":206,"line":131},[204,165335,155335],{"class":263},[204,165337,165159],{"class":214},[204,165339,431],{"class":263},[204,165341,12522],{"class":214},[204,165343,431],{"class":263},[204,165345,12522],{"class":214},[204,165347,292],{"class":263},[204,165349,12522],{"class":214},[204,165351,286],{"class":263},[204,165353,4743],{"class":214},[19,165355,165356],{},"成员判断：",[196,165358,165360],{"className":30464,"code":165359,"language":30466,"meta":125,"style":125},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[81,165361,165362,165379,165403],{"__ignoreMap":125},[204,165363,165364,165366,165368,165371,165374,165377],{"class":206,"line":207},[204,165365,30501],{"class":263},[204,165367,215],{"class":214},[204,165369,165370],{"class":319},"\"a\"",[204,165372,165373],{"class":210}," in",[204,165375,165376],{"class":319}," \"abc\"",[204,165378,221],{"class":214},[204,165380,165381,165383,165385,165387,165389,165391,165393,165395,165397,165399,165401],{"class":206,"line":126},[204,165382,30501],{"class":263},[204,165384,215],{"class":214},[204,165386,431],{"class":263},[204,165388,165373],{"class":210},[204,165390,52312],{"class":214},[204,165392,431],{"class":263},[204,165394,12522],{"class":214},[204,165396,292],{"class":263},[204,165398,12522],{"class":214},[204,165400,286],{"class":263},[204,165402,4743],{"class":214},[204,165404,165405,165407,165409,165411,165413,165415,165417,165419,165421],{"class":206,"line":131},[204,165406,30501],{"class":263},[204,165408,215],{"class":214},[204,165410,62765],{"class":319},[204,165412,165373],{"class":210},[204,165414,4534],{"class":214},[204,165416,62765],{"class":319},[204,165418,51523],{"class":214},[204,165420,149933],{"class":319},[204,165422,165197],{"class":214},[14,165424,165426],{"id":165425},"_614-推导式","6.14 推导式",[19,165428,165429],{},"推导式用于快速生成容器。",[19,165431,165432],{},"列表推导式：",[196,165434,165436],{"className":30464,"code":165435,"language":30466,"meta":125,"style":125},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[81,165437,165438,165465],{"__ignoreMap":125},[204,165439,165440,165442,165444,165447,165449,165451,165453,165455,165457,165459,165461,165463],{"class":206,"line":207},[204,165441,164145],{"class":214},[204,165443,260],{"class":210},[204,165445,165446],{"class":214}," [i ",[204,165448,3111],{"class":210},[204,165450,9525],{"class":214},[204,165452,26129],{"class":210},[204,165454,32529],{"class":263},[204,165456,215],{"class":214},[204,165458,431],{"class":263},[204,165460,12522],{"class":214},[204,165462,557],{"class":263},[204,165464,97386],{"class":214},[204,165466,165467,165469],{"class":206,"line":126},[204,165468,30501],{"class":263},[204,165470,164361],{"class":214},[19,165472,165473],{},"带条件：",[196,165475,165477],{"className":30464,"code":165476,"language":30466,"meta":125,"style":125},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[81,165478,165479,165520],{"__ignoreMap":125},[204,165480,165481,165484,165486,165488,165490,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518],{"class":206,"line":207},[204,165482,165483],{"class":214},"even_nums ",[204,165485,260],{"class":210},[204,165487,165446],{"class":214},[204,165489,3111],{"class":210},[204,165491,9525],{"class":214},[204,165493,26129],{"class":210},[204,165495,32529],{"class":263},[204,165497,215],{"class":214},[204,165499,431],{"class":263},[204,165501,12522],{"class":214},[204,165503,550],{"class":263},[204,165505,13801],{"class":214},[204,165507,1617],{"class":210},[204,165509,9525],{"class":214},[204,165511,541],{"class":210},[204,165513,14842],{"class":263},[204,165515,101644],{"class":210},[204,165517,4179],{"class":263},[204,165519,33332],{"class":214},[204,165521,165522,165524],{"class":206,"line":126},[204,165523,30501],{"class":263},[204,165525,165526],{"class":214},"(even_nums)\n",[19,165528,165529],{},"字典推导式：",[196,165531,165533],{"className":30464,"code":165532,"language":30466,"meta":125,"style":125},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[81,165534,165535,165569],{"__ignoreMap":125},[204,165536,165537,165540,165542,165545,165547,165549,165552,165554,165556,165558,165560,165562,165564,165566],{"class":206,"line":207},[204,165538,165539],{"class":214},"squares ",[204,165541,260],{"class":210},[204,165543,165544],{"class":214}," {i: i ",[204,165546,10748],{"class":210},[204,165548,14842],{"class":263},[204,165550,165551],{"class":210}," for",[204,165553,9525],{"class":214},[204,165555,26129],{"class":210},[204,165557,32529],{"class":263},[204,165559,215],{"class":214},[204,165561,431],{"class":263},[204,165563,12522],{"class":214},[204,165565,557],{"class":263},[204,165567,165568],{"class":214},")}\n",[204,165570,165571,165573],{"class":206,"line":126},[204,165572,30501],{"class":263},[204,165574,165575],{"class":214},"(squares)\n",[19,165577,165578],{},"集合推导式：",[196,165580,165582],{"className":30464,"code":165581,"language":30466,"meta":125,"style":125},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[81,165583,165584,165605],{"__ignoreMap":125},[204,165585,165586,165589,165591,165594,165596,165598,165600,165603],{"class":206,"line":207},[204,165587,165588],{"class":214},"chars ",[204,165590,260],{"class":210},[204,165592,165593],{"class":214}," {ch ",[204,165595,3111],{"class":210},[204,165597,159737],{"class":214},[204,165599,26129],{"class":210},[204,165601,165602],{"class":319}," \"hello\"",[204,165604,1651],{"class":214},[204,165606,165607,165609],{"class":206,"line":126},[204,165608,30501],{"class":263},[204,165610,165611],{"class":214},"(chars)\n",[19,165613,165614],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165616,165618],{"id":165617},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[196,165620,165622],{"className":30464,"code":165621,"language":30466,"meta":125,"style":125},"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",[81,165623,165624,165632,165652,165672,165692,165712,165716,165720,165728,165742,165751,165755,165765,165777,165781,165801,165810,165814,165830,165835,165839,165853,165857,165879,165915],{"__ignoreMap":125},[204,165625,165626,165628,165630],{"class":206,"line":207},[204,165627,159761],{"class":214},[204,165629,260],{"class":210},[204,165631,55533],{"class":214},[204,165633,165634,165636,165638,165640,165642,165644,165646,165648,165650],{"class":206,"line":126},[204,165635,148430],{"class":214},[204,165637,62765],{"class":319},[204,165639,51523],{"class":214},[204,165641,149933],{"class":319},[204,165643,12522],{"class":214},[204,165645,151517],{"class":319},[204,165647,51523],{"class":214},[204,165649,1202],{"class":263},[204,165651,5016],{"class":214},[204,165653,165654,165656,165658,165660,165662,165664,165666,165668,165670],{"class":206,"line":131},[204,165655,148430],{"class":214},[204,165657,62765],{"class":319},[204,165659,51523],{"class":214},[204,165661,150981],{"class":319},[204,165663,12522],{"class":214},[204,165665,151517],{"class":319},[204,165667,51523],{"class":214},[204,165669,1024],{"class":263},[204,165671,5016],{"class":214},[204,165673,165674,165676,165678,165680,165682,165684,165686,165688,165690],{"class":206,"line":1281},[204,165675,148430],{"class":214},[204,165677,62765],{"class":319},[204,165679,51523],{"class":214},[204,165681,159776],{"class":319},[204,165683,12522],{"class":214},[204,165685,151517],{"class":319},[204,165687,51523],{"class":214},[204,165689,619],{"class":263},[204,165691,5016],{"class":214},[204,165693,165694,165696,165698,165700,165702,165704,165706,165708,165710],{"class":206,"line":1287},[204,165695,148430],{"class":214},[204,165697,62765],{"class":319},[204,165699,51523],{"class":214},[204,165701,163355],{"class":319},[204,165703,12522],{"class":214},[204,165705,151517],{"class":319},[204,165707,51523],{"class":214},[204,165709,1095],{"class":263},[204,165711,5016],{"class":214},[204,165713,165714],{"class":206,"line":1301},[204,165715,33332],{"class":214},[204,165717,165718],{"class":206,"line":1307},[204,165719,2486],{"emptyLinePlaceholder":135},[204,165721,165722,165724,165726],{"class":206,"line":1398},[204,165723,157305],{"class":214},[204,165725,260],{"class":210},[204,165727,47419],{"class":263},[204,165729,165730,165733,165735,165738,165740],{"class":206,"line":1404},[204,165731,165732],{"class":214},"max_student ",[204,165734,260],{"class":210},[204,165736,165737],{"class":214}," students[",[204,165739,405],{"class":263},[204,165741,33332],{"class":214},[204,165743,165744,165747,165749],{"class":206,"line":1416},[204,165745,165746],{"class":214},"passed ",[204,165748,260],{"class":210},[204,165750,51924],{"class":214},[204,165752,165753],{"class":206,"line":1698},[204,165754,2486],{"emptyLinePlaceholder":135},[204,165756,165757,165759,165761,165763],{"class":206,"line":1703},[204,165758,3111],{"class":210},[204,165760,152182],{"class":214},[204,165762,26129],{"class":210},[204,165764,152187],{"class":214},[204,165766,165767,165769,165771,165773,165775],{"class":206,"line":1709},[204,165768,159352],{"class":214},[204,165770,9564],{"class":210},[204,165772,152194],{"class":214},[204,165774,151517],{"class":319},[204,165776,33332],{"class":214},[204,165778,165779],{"class":206,"line":1714},[204,165780,2486],{"emptyLinePlaceholder":135},[204,165782,165783,165785,165787,165789,165791,165793,165796,165798],{"class":206,"line":1728},[204,165784,3187],{"class":210},[204,165786,152194],{"class":214},[204,165788,151517],{"class":319},[204,165790,4529],{"class":214},[204,165792,1173],{"class":210},[204,165794,165795],{"class":214}," max_student[",[204,165797,151517],{"class":319},[204,165799,165800],{"class":214},"]:\n",[204,165802,165803,165806,165808],{"class":206,"line":1733},[204,165804,165805],{"class":214},"        max_student ",[204,165807,260],{"class":210},[204,165809,152210],{"class":214},[204,165811,165812],{"class":206,"line":1739},[204,165813,2486],{"emptyLinePlaceholder":135},[204,165815,165816,165818,165820,165822,165824,165826,165828],{"class":206,"line":1760},[204,165817,3187],{"class":210},[204,165819,152194],{"class":214},[204,165821,151517],{"class":319},[204,165823,4529],{"class":214},[204,165825,1796],{"class":210},[204,165827,157882],{"class":263},[204,165829,3825],{"class":214},[204,165831,165832],{"class":206,"line":1765},[204,165833,165834],{"class":214},"        passed.append(student)\n",[204,165836,165837],{"class":206,"line":1779},[204,165838,2486],{"emptyLinePlaceholder":135},[204,165840,165841,165843,165845,165847,165849,165851],{"class":206,"line":1784},[204,165842,163819],{"class":214},[204,165844,260],{"class":210},[204,165846,163824],{"class":214},[204,165848,797],{"class":210},[204,165850,7418],{"class":263},[204,165852,165040],{"class":214},[204,165854,165855],{"class":206,"line":1813},[204,165856,2486],{"emptyLinePlaceholder":135},[204,165858,165859,165861,165863,165865,165867,165869,165871,165873,165875,165877],{"class":206,"line":1818},[204,165860,30501],{"class":263},[204,165862,215],{"class":214},[204,165864,267],{"class":210},[204,165866,163842],{"class":319},[204,165868,1109],{"class":263},[204,165870,163847],{"class":214},[204,165872,157204],{"class":210},[204,165874,1159],{"class":263},[204,165876,464],{"class":319},[204,165878,221],{"class":214},[204,165880,165881,165883,165885,165887,165890,165892,165895,165897,165899,165901,165903,165905,165907,165909,165911,165913],{"class":206,"line":1835},[204,165882,30501],{"class":263},[204,165884,215],{"class":214},[204,165886,267],{"class":210},[204,165888,165889],{"class":319},"\"最高分学生:",[204,165891,1109],{"class":263},[204,165893,165894],{"class":214},"max_student[",[204,165896,152927],{"class":319},[204,165898,1153],{"class":214},[204,165900,1159],{"class":263},[204,165902,4534],{"class":263},[204,165904,165894],{"class":214},[204,165906,152965],{"class":319},[204,165908,1153],{"class":214},[204,165910,1159],{"class":263},[204,165912,464],{"class":319},[204,165914,221],{"class":214},[204,165916,165917,165919,165921,165923,165926,165929,165932,165934,165936],{"class":206,"line":1840},[204,165918,30501],{"class":263},[204,165920,215],{"class":214},[204,165922,267],{"class":210},[204,165924,165925],{"class":319},"\"及格人数:",[204,165927,165928],{"class":263},"{len",[204,165930,165931],{"class":214},"(passed)",[204,165933,1159],{"class":263},[204,165935,464],{"class":319},[204,165937,221],{"class":214},[14,165939,165941],{"id":165940},"_616-易错点","6.16 易错点",[161,165943,165944,165947,165950,165953,165959,165968],{},[71,165945,165946],{},"列表可变，元组和字符串不可变。",[71,165948,165949],{},"切片结束位置不包含。",[71,165951,165952],{},"字典通过 key 取值，不是通过索引。",[71,165954,165955,165956,28471],{},"空集合要用 ",[81,165957,165958],{},"set()",[71,165960,104451,165961,165964,165965,28471],{},[81,165962,165963],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[81,165966,165967],{},"get()",[71,165969,165970],{},"嵌套容器要先看清楚每一层是什么类型。",[14,165972,165974],{"id":165973},"_617-本章练习","6.17 本章练习",[161,165976,165977,165980,165983,165986,165989],{},[71,165978,165979],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[71,165981,165982],{},"输入一句话，统计每个字符出现次数。",[71,165984,165985],{},"使用集合去除列表中的重复元素。",[71,165987,165988],{},"使用字典保存一个学生的信息，并实现修改成绩。",[71,165990,165991],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5213,165993,165994],{},"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":125,"searchDepth":126,"depth":126,"links":165996},[165997,165998,165999,166000,166001,166002,166003,166004,166005,166006,166007,166008,166009,166010,166011,166012,166013],{"id":162977,"depth":126,"text":162978},{"id":163094,"depth":126,"text":163095},{"id":163184,"depth":126,"text":163185},{"id":163308,"depth":126,"text":163309},{"id":163671,"depth":126,"text":163672},{"id":163858,"depth":126,"text":163859},{"id":163977,"depth":126,"text":163978},{"id":164119,"depth":126,"text":164120},{"id":164306,"depth":126,"text":164307},{"id":164550,"depth":126,"text":164551},{"id":164760,"depth":126,"text":164761},{"id":164845,"depth":126,"text":164846},{"id":165143,"depth":126,"text":165144},{"id":165425,"depth":126,"text":165426},{"id":165617,"depth":126,"text":165618},{"id":165940,"depth":126,"text":165941},{"id":165973,"depth":126,"text":165974},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162969,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166020,"title":166021,"body":166022,"description":132,"extension":133,"meta":168194,"navigation":135,"path":168195,"seo":168196,"stem":168197,"__hash__":168198},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166023,"toc":168169},[166024,166027,166031,166034,166114,166117,166138,166141,166145,166148,166210,166213,166230,166234,166237,166282,166284,166292,166296,166299,166381,166384,166387,166412,166415,166438,166442,166445,166447,166509,166512,166514,166565,166569,166573,166579,166684,166688,166694,166765,166769,166772,166840,166843,166923,166927,166933,166969,166972,166975,167085,167091,167095,167098,167170,167173,167177,167181,167186,167248,167252,167257,167325,167329,167334,167450,167454,167457,167537,167540,167544,167547,167651,167653,167668,167671,167675,167813,167821,167825,167827,167838,167840,168098,168102,168134,168138,168166],[10,166025,166021],{"id":166026},"_7-函数进阶",[14,166028,166030],{"id":166029},"_71-多返回值","7.1 多返回值",[19,166032,166033],{},"Python 函数可以返回多个值，本质上返回的是元组。",[196,166035,166037],{"className":30464,"code":166036,"language":30466,"meta":125,"style":125},"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",[81,166038,166039,166048,166056,166064,166073,166080,166084,166088,166097,166103],{"__ignoreMap":125},[204,166040,166041,166043,166046],{"class":206,"line":207},[204,166042,32033],{"class":210},[204,166044,166045],{"class":2049}," get_info",[204,166047,32039],{"class":214},[204,166049,166050,166052,166054],{"class":206,"line":126},[204,166051,152415],{"class":214},[204,166053,260],{"class":210},[204,166055,149398],{"class":319},[204,166057,166058,166060,166062],{"class":206,"line":131},[204,166059,152431],{"class":214},[204,166061,260],{"class":210},[204,166063,146596],{"class":263},[204,166065,166066,166068,166070],{"class":206,"line":1281},[204,166067,152446],{"class":214},[204,166069,260],{"class":210},[204,166071,166072],{"class":263}," 95\n",[204,166074,166075,166077],{"class":206,"line":1287},[204,166076,4176],{"class":210},[204,166078,166079],{"class":214}," name, age, score\n",[204,166081,166082],{"class":206,"line":1301},[204,166083,2486],{"emptyLinePlaceholder":135},[204,166085,166086],{"class":206,"line":1307},[204,166087,2486],{"emptyLinePlaceholder":135},[204,166089,166090,166092,166094],{"class":206,"line":1398},[204,166091,161351],{"class":214},[204,166093,260],{"class":210},[204,166095,166096],{"class":214}," get_info()\n",[204,166098,166099,166101],{"class":206,"line":1404},[204,166100,30501],{"class":263},[204,166102,76671],{"class":214},[204,166104,166105,166107,166109,166111],{"class":206,"line":1416},[204,166106,30501],{"class":263},[204,166108,215],{"class":214},[204,166110,103192],{"class":263},[204,166112,166113],{"class":214},"(result))\n",[19,166115,166116],{},"可以直接解包：",[196,166118,166120],{"className":30464,"code":166119,"language":30466,"meta":125,"style":125},"name, age, score = get_info()\nprint(name, age, score)\n",[81,166121,166122,166131],{"__ignoreMap":125},[204,166123,166124,166127,166129],{"class":206,"line":207},[204,166125,166126],{"class":214},"name, age, score ",[204,166128,260],{"class":210},[204,166130,166096],{"class":214},[204,166132,166133,166135],{"class":206,"line":126},[204,166134,30501],{"class":263},[204,166136,166137],{"class":214},"(name, age, score)\n",[19,166139,166140],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166142,166144],{"id":166143},"_72-位置参数","7.2 位置参数",[19,166146,166147],{},"位置参数按顺序传递。",[196,166149,166151],{"className":30464,"code":166150,"language":30466,"meta":125,"style":125},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[81,166152,166153,166161,166189,166193,166197],{"__ignoreMap":125},[204,166154,166155,166157,166159],{"class":206,"line":207},[204,166156,32033],{"class":210},[204,166158,149417],{"class":2049},[204,166160,149420],{"class":214},[204,166162,166163,166165,166167,166169,166171,166173,166175,166177,166179,166181,166183,166185,166187],{"class":206,"line":126},[204,166164,31385],{"class":263},[204,166166,215],{"class":214},[204,166168,267],{"class":210},[204,166170,149431],{"class":319},[204,166172,1109],{"class":263},[204,166174,79896],{"class":214},[204,166176,1159],{"class":263},[204,166178,149440],{"class":319},[204,166180,1109],{"class":263},[204,166182,70307],{"class":214},[204,166184,1159],{"class":263},[204,166186,149449],{"class":319},[204,166188,221],{"class":214},[204,166190,166191],{"class":206,"line":131},[204,166192,2486],{"emptyLinePlaceholder":135},[204,166194,166195],{"class":206,"line":1281},[204,166196,2486],{"emptyLinePlaceholder":135},[204,166198,166199,166202,166204,166206,166208],{"class":206,"line":1287},[204,166200,166201],{"class":214},"introduce(",[204,166203,149933],{"class":319},[204,166205,12522],{"class":214},[204,166207,863],{"class":263},[204,166209,221],{"class":214},[19,166211,166212],{},"顺序错了就会得到错误含义：",[196,166214,166216],{"className":30464,"code":166215,"language":30466,"meta":125,"style":125},"introduce(18, \"小明\")\n",[81,166217,166218],{"__ignoreMap":125},[204,166219,166220,166222,166224,166226,166228],{"class":206,"line":207},[204,166221,166201],{"class":214},[204,166223,863],{"class":263},[204,166225,12522],{"class":214},[204,166227,149933],{"class":319},[204,166229,221],{"class":214},[14,166231,166233],{"id":166232},"_73-关键字参数","7.3 关键字参数",[19,166235,166236],{},"关键字参数按参数名传递。",[196,166238,166240],{"className":30464,"code":166239,"language":30466,"meta":125,"style":125},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[81,166241,166242,166262],{"__ignoreMap":125},[204,166243,166244,166246,166248,166250,166252,166254,166256,166258,166260],{"class":206,"line":207},[204,166245,166201],{"class":214},[204,166247,79896],{"class":5303},[204,166249,260],{"class":210},[204,166251,149933],{"class":319},[204,166253,12522],{"class":214},[204,166255,70307],{"class":5303},[204,166257,260],{"class":210},[204,166259,863],{"class":263},[204,166261,221],{"class":214},[204,166263,166264,166266,166268,166270,166272,166274,166276,166278,166280],{"class":206,"line":126},[204,166265,166201],{"class":214},[204,166267,70307],{"class":5303},[204,166269,260],{"class":210},[204,166271,863],{"class":263},[204,166273,12522],{"class":214},[204,166275,79896],{"class":5303},[204,166277,260],{"class":210},[204,166279,149933],{"class":319},[204,166281,221],{"class":214},[19,166283,118019],{},[161,166285,166286,166289],{},[71,166287,166288],{},"顺序不容易错。",[71,166290,166291],{},"调用时可读性更强。",[14,166293,166295],{"id":166294},"_74-默认参数","7.4 默认参数",[19,166297,166298],{},"默认参数给参数设置默认值。",[196,166300,166302],{"className":30464,"code":166301,"language":30466,"meta":125,"style":125},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[81,166303,166304,166320,166350,166354,166358,166368],{"__ignoreMap":125},[204,166305,166306,166308,166310,166313,166315,166318],{"class":206,"line":207},[204,166307,32033],{"class":210},[204,166309,122178],{"class":2049},[204,166311,166312],{"class":214},"(host, port",[204,166314,260],{"class":210},[204,166316,166317],{"class":263},"3306",[204,166319,30872],{"class":214},[204,166321,166322,166324,166326,166328,166331,166333,166335,166337,166339,166341,166344,166346,166348],{"class":206,"line":126},[204,166323,31385],{"class":263},[204,166325,215],{"class":214},[204,166327,267],{"class":210},[204,166329,166330],{"class":319},"\"连接",[204,166332,1109],{"class":263},[204,166334,27481],{"class":214},[204,166336,1159],{"class":263},[204,166338,1072],{"class":319},[204,166340,1109],{"class":263},[204,166342,166343],{"class":214},"port",[204,166345,1159],{"class":263},[204,166347,464],{"class":319},[204,166349,221],{"class":214},[204,166351,166352],{"class":206,"line":131},[204,166353,2486],{"emptyLinePlaceholder":135},[204,166355,166356],{"class":206,"line":1281},[204,166357,2486],{"emptyLinePlaceholder":135},[204,166359,166360,166363,166366],{"class":206,"line":1287},[204,166361,166362],{"class":214},"connect(",[204,166364,166365],{"class":319},"\"localhost\"",[204,166367,221],{"class":214},[204,166369,166370,166372,166374,166376,166379],{"class":206,"line":1301},[204,166371,166362],{"class":214},[204,166373,166365],{"class":319},[204,166375,12522],{"class":214},[204,166377,166378],{"class":263},"6379",[204,166380,221],{"class":214},[19,166382,166383],{},"注意：默认参数必须放在非默认参数后面。",[19,166385,166386],{},"错误：",[196,166388,166390],{"className":30464,"code":166389,"language":30466,"meta":125,"style":125},"def connect(port=3306, host):\n    pass\n",[81,166391,166392,166408],{"__ignoreMap":125},[204,166393,166394,166396,166398,166401,166403,166405],{"class":206,"line":207},[204,166395,32033],{"class":210},[204,166397,122178],{"class":2049},[204,166399,166400],{"class":214},"(port",[204,166402,260],{"class":210},[204,166404,166317],{"class":263},[204,166406,166407],{"class":214},", host):\n",[204,166409,166410],{"class":206,"line":126},[204,166411,149582],{"class":210},[19,166413,166414],{},"正确：",[196,166416,166418],{"className":30464,"code":166417,"language":30466,"meta":125,"style":125},"def connect(host, port=3306):\n    pass\n",[81,166419,166420,166434],{"__ignoreMap":125},[204,166421,166422,166424,166426,166428,166430,166432],{"class":206,"line":207},[204,166423,32033],{"class":210},[204,166425,122178],{"class":2049},[204,166427,166312],{"class":214},[204,166429,260],{"class":210},[204,166431,166317],{"class":263},[204,166433,30872],{"class":214},[204,166435,166436],{"class":206,"line":126},[204,166437,149582],{"class":210},[14,166439,166441],{"id":166440},"_75-默认参数的坑","7.5 默认参数的坑",[19,166443,166444],{},"不要使用可变对象作为默认参数。",[19,166446,157668],{},[196,166448,166450],{"className":30464,"code":166449,"language":30466,"meta":125,"style":125},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[81,166451,166452,166467,166472,166479,166483,166487,166498],{"__ignoreMap":125},[204,166453,166454,166456,166459,166462,166464],{"class":206,"line":207},[204,166455,32033],{"class":210},[204,166457,166458],{"class":2049}," add_item",[204,166460,166461],{"class":214},"(item, items",[204,166463,260],{"class":210},[204,166465,166466],{"class":214},"[]):\n",[204,166468,166469],{"class":206,"line":126},[204,166470,166471],{"class":214},"    items.append(item)\n",[204,166473,166474,166476],{"class":206,"line":131},[204,166475,4176],{"class":210},[204,166477,166478],{"class":214}," items\n",[204,166480,166481],{"class":206,"line":1281},[204,166482,2486],{"emptyLinePlaceholder":135},[204,166484,166485],{"class":206,"line":1287},[204,166486,2486],{"emptyLinePlaceholder":135},[204,166488,166489,166491,166494,166496],{"class":206,"line":1301},[204,166490,30501],{"class":263},[204,166492,166493],{"class":214},"(add_item(",[204,166495,165370],{"class":319},[204,166497,30583],{"class":214},[204,166499,166500,166502,166504,166507],{"class":206,"line":1307},[204,166501,30501],{"class":263},[204,166503,166493],{"class":214},[204,166505,166506],{"class":319},"\"b\"",[204,166508,30583],{"class":214},[19,166510,166511],{},"第二次调用会复用第一次的列表。",[19,166513,155933],{},[196,166515,166517],{"className":30464,"code":166516,"language":30466,"meta":125,"style":125},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[81,166518,166519,166533,166546,166555,166559],{"__ignoreMap":125},[204,166520,166521,166523,166525,166527,166529,166531],{"class":206,"line":207},[204,166522,32033],{"class":210},[204,166524,166458],{"class":2049},[204,166526,166461],{"class":214},[204,166528,260],{"class":210},[204,166530,95772],{"class":263},[204,166532,30872],{"class":214},[204,166534,166535,166537,166540,166542,166544],{"class":206,"line":126},[204,166536,3187],{"class":210},[204,166538,166539],{"class":214}," items ",[204,166541,39013],{"class":210},[204,166543,39019],{"class":263},[204,166545,3825],{"class":214},[204,166547,166548,166551,166553],{"class":206,"line":131},[204,166549,166550],{"class":214},"        items ",[204,166552,260],{"class":210},[204,166554,51924],{"class":214},[204,166556,166557],{"class":206,"line":1281},[204,166558,166471],{"class":214},[204,166560,166561,166563],{"class":206,"line":1287},[204,166562,4176],{"class":210},[204,166564,166478],{"class":214},[14,166566,166568],{"id":166567},"_76-不定长参数","7.6 不定长参数",[49,166570,166572],{"id":166571},"_761-args","7.6.1 *args",[19,166574,166575,166578],{},[81,166576,166577],{},"*args"," 接收任意数量的位置参数，得到元组。",[196,166580,166582],{"className":30464,"code":166581,"language":30466,"meta":125,"style":125},"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",[81,166583,166584,166597,166605,166616,166625,166631,166635,166639,166658],{"__ignoreMap":125},[204,166585,166586,166588,166590,166592,166594],{"class":206,"line":207},[204,166587,32033],{"class":210},[204,166589,5296],{"class":2049},[204,166591,215],{"class":214},[204,166593,668],{"class":210},[204,166595,166596],{"class":214},"args):\n",[204,166598,166599,166601,166603],{"class":206,"line":126},[204,166600,159352],{"class":214},[204,166602,260],{"class":210},[204,166604,47419],{"class":263},[204,166606,166607,166609,166611,166613],{"class":206,"line":131},[204,166608,3287],{"class":210},[204,166610,156225],{"class":214},[204,166612,26129],{"class":210},[204,166614,166615],{"class":214}," args:\n",[204,166617,166618,166620,166622],{"class":206,"line":1281},[204,166619,160027],{"class":214},[204,166621,9564],{"class":210},[204,166623,166624],{"class":214}," num\n",[204,166626,166627,166629],{"class":206,"line":1287},[204,166628,4176],{"class":210},[204,166630,162332],{"class":214},[204,166632,166633],{"class":206,"line":1301},[204,166634,2486],{"emptyLinePlaceholder":135},[204,166636,166637],{"class":206,"line":1307},[204,166638,2486],{"emptyLinePlaceholder":135},[204,166640,166641,166643,166646,166648,166650,166652,166654,166656],{"class":206,"line":1398},[204,166642,30501],{"class":263},[204,166644,166645],{"class":214},"(add(",[204,166647,431],{"class":263},[204,166649,12522],{"class":214},[204,166651,292],{"class":263},[204,166653,12522],{"class":214},[204,166655,286],{"class":263},[204,166657,30583],{"class":214},[204,166659,166660,166662,166664,166666,166668,166670,166672,166674,166676,166678,166680,166682],{"class":206,"line":1404},[204,166661,30501],{"class":263},[204,166663,166645],{"class":214},[204,166665,431],{"class":263},[204,166667,12522],{"class":214},[204,166669,292],{"class":263},[204,166671,12522],{"class":214},[204,166673,286],{"class":263},[204,166675,12522],{"class":214},[204,166677,506],{"class":263},[204,166679,12522],{"class":214},[204,166681,532],{"class":263},[204,166683,30583],{"class":214},[49,166685,166687],{"id":166686},"_762-kwargs","7.6.2 **kwargs",[19,166689,166690,166693],{},[81,166691,166692],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[196,166695,166697],{"className":30464,"code":166696,"language":30466,"meta":125,"style":125},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[81,166698,166699,166712,166723,166729,166733,166737],{"__ignoreMap":125},[204,166700,166701,166703,166705,166707,166709],{"class":206,"line":207},[204,166702,32033],{"class":210},[204,166704,161990],{"class":2049},[204,166706,215],{"class":214},[204,166708,10748],{"class":210},[204,166710,166711],{"class":214},"kwargs):\n",[204,166713,166714,166716,166718,166720],{"class":206,"line":126},[204,166715,3287],{"class":210},[204,166717,164830],{"class":214},[204,166719,26129],{"class":210},[204,166721,166722],{"class":214}," kwargs.items():\n",[204,166724,166725,166727],{"class":206,"line":131},[204,166726,32537],{"class":263},[204,166728,164842],{"class":214},[204,166730,166731],{"class":206,"line":1281},[204,166732,2486],{"emptyLinePlaceholder":135},[204,166734,166735],{"class":206,"line":1287},[204,166736,2486],{"emptyLinePlaceholder":135},[204,166738,166739,166741,166743,166745,166747,166749,166751,166753,166755,166757,166759,166761,166763],{"class":206,"line":1301},[204,166740,162055],{"class":214},[204,166742,79896],{"class":5303},[204,166744,260],{"class":210},[204,166746,149933],{"class":319},[204,166748,12522],{"class":214},[204,166750,70307],{"class":5303},[204,166752,260],{"class":210},[204,166754,863],{"class":263},[204,166756,12522],{"class":214},[204,166758,70358],{"class":5303},[204,166760,260],{"class":210},[204,166762,69355],{"class":319},[204,166764,221],{"class":214},[14,166766,166768],{"id":166767},"_77-参数解包","7.7 参数解包",[19,166770,166771],{},"列表或元组解包为位置参数：",[196,166773,166775],{"className":30464,"code":166774,"language":30466,"meta":125,"style":125},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[81,166776,166777,166786,166801,166805,166809,166829],{"__ignoreMap":125},[204,166778,166779,166781,166783],{"class":206,"line":207},[204,166780,32033],{"class":210},[204,166782,5296],{"class":2049},[204,166784,166785],{"class":214},"(a, b, c):\n",[204,166787,166788,166790,166792,166794,166796,166798],{"class":206,"line":126},[204,166789,4176],{"class":210},[204,166791,10956],{"class":214},[204,166793,694],{"class":210},[204,166795,10969],{"class":214},[204,166797,694],{"class":210},[204,166799,166800],{"class":214}," c\n",[204,166802,166803],{"class":206,"line":131},[204,166804,2486],{"emptyLinePlaceholder":135},[204,166806,166807],{"class":206,"line":1281},[204,166808,2486],{"emptyLinePlaceholder":135},[204,166810,166811,166813,166815,166817,166819,166821,166823,166825,166827],{"class":206,"line":1287},[204,166812,164145],{"class":214},[204,166814,260],{"class":210},[204,166816,52312],{"class":214},[204,166818,431],{"class":263},[204,166820,12522],{"class":214},[204,166822,292],{"class":263},[204,166824,12522],{"class":214},[204,166826,286],{"class":263},[204,166828,33332],{"class":214},[204,166830,166831,166833,166835,166837],{"class":206,"line":1301},[204,166832,30501],{"class":263},[204,166834,166645],{"class":214},[204,166836,668],{"class":210},[204,166838,166839],{"class":214},"nums))\n",[19,166841,166842],{},"字典解包为关键字参数：",[196,166844,166846],{"className":30464,"code":166845,"language":30466,"meta":125,"style":125},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[81,166847,166848,166856,166882,166886,166890,166914],{"__ignoreMap":125},[204,166849,166850,166852,166854],{"class":206,"line":207},[204,166851,32033],{"class":210},[204,166853,149417],{"class":2049},[204,166855,149420],{"class":214},[204,166857,166858,166860,166862,166864,166866,166868,166870,166872,166874,166876,166878,166880],{"class":206,"line":126},[204,166859,31385],{"class":263},[204,166861,215],{"class":214},[204,166863,267],{"class":210},[204,166865,464],{"class":319},[204,166867,1109],{"class":263},[204,166869,79896],{"class":214},[204,166871,1159],{"class":263},[204,166873,4534],{"class":263},[204,166875,70307],{"class":214},[204,166877,1159],{"class":263},[204,166879,464],{"class":319},[204,166881,221],{"class":214},[204,166883,166884],{"class":206,"line":131},[204,166885,2486],{"emptyLinePlaceholder":135},[204,166887,166888],{"class":206,"line":1281},[204,166889,2486],{"emptyLinePlaceholder":135},[204,166891,166892,166894,166896,166898,166900,166902,166904,166906,166908,166910,166912],{"class":206,"line":1287},[204,166893,116399],{"class":214},[204,166895,260],{"class":210},[204,166897,4534],{"class":214},[204,166899,62765],{"class":319},[204,166901,51523],{"class":214},[204,166903,149933],{"class":319},[204,166905,12522],{"class":214},[204,166907,69210],{"class":319},[204,166909,51523],{"class":214},[204,166911,863],{"class":263},[204,166913,1651],{"class":214},[204,166915,166916,166918,166920],{"class":206,"line":1301},[204,166917,166201],{"class":214},[204,166919,10748],{"class":210},[204,166921,166922],{"class":214},"info)\n",[14,166924,166926],{"id":166925},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,166928,166929,166932],{},[81,166930,166931],{},"lambda"," 用于定义简单匿名函数。",[196,166934,166936],{"className":30464,"code":166935,"language":30466,"meta":125,"style":125},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[81,166937,166938,166955],{"__ignoreMap":125},[204,166939,166940,166943,166945,166948,166951,166953],{"class":206,"line":207},[204,166941,166942],{"class":214},"add ",[204,166944,260],{"class":210},[204,166946,166947],{"class":210}," lambda",[204,166949,166950],{"class":214}," a, b: a ",[204,166952,694],{"class":210},[204,166954,151149],{"class":214},[204,166956,166957,166959,166961,166963,166965,166967],{"class":206,"line":126},[204,166958,30501],{"class":263},[204,166960,166645],{"class":214},[204,166962,431],{"class":263},[204,166964,12522],{"class":214},[204,166966,292],{"class":263},[204,166968,30583],{"class":214},[19,166970,166971],{},"常和排序、过滤等函数一起使用。",[19,166973,166974],{},"按分数排序：",[196,166976,166978],{"className":30464,"code":166977,"language":30466,"meta":125,"style":125},"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",[81,166979,166980,166988,167008,167028,167048,167052,167056,167079],{"__ignoreMap":125},[204,166981,166982,166984,166986],{"class":206,"line":207},[204,166983,159761],{"class":214},[204,166985,260],{"class":210},[204,166987,55533],{"class":214},[204,166989,166990,166992,166994,166996,166998,167000,167002,167004,167006],{"class":206,"line":126},[204,166991,148430],{"class":214},[204,166993,62765],{"class":319},[204,166995,51523],{"class":214},[204,166997,149933],{"class":319},[204,166999,12522],{"class":214},[204,167001,151517],{"class":319},[204,167003,51523],{"class":214},[204,167005,1202],{"class":263},[204,167007,5016],{"class":214},[204,167009,167010,167012,167014,167016,167018,167020,167022,167024,167026],{"class":206,"line":131},[204,167011,148430],{"class":214},[204,167013,62765],{"class":319},[204,167015,51523],{"class":214},[204,167017,150981],{"class":319},[204,167019,12522],{"class":214},[204,167021,151517],{"class":319},[204,167023,51523],{"class":214},[204,167025,1024],{"class":263},[204,167027,5016],{"class":214},[204,167029,167030,167032,167034,167036,167038,167040,167042,167044,167046],{"class":206,"line":1281},[204,167031,148430],{"class":214},[204,167033,62765],{"class":319},[204,167035,51523],{"class":214},[204,167037,159776],{"class":319},[204,167039,12522],{"class":214},[204,167041,151517],{"class":319},[204,167043,51523],{"class":214},[204,167045,619],{"class":263},[204,167047,5016],{"class":214},[204,167049,167050],{"class":206,"line":1287},[204,167051,33332],{"class":214},[204,167053,167054],{"class":206,"line":1301},[204,167055,2486],{"emptyLinePlaceholder":135},[204,167057,167058,167061,167063,167065,167067,167069,167071,167073,167075,167077],{"class":206,"line":1307},[204,167059,167060],{"class":214},"students.sort(",[204,167062,153991],{"class":5303},[204,167064,153994],{"class":210},[204,167066,153997],{"class":214},[204,167068,151517],{"class":319},[204,167070,112287],{"class":214},[204,167072,163573],{"class":5303},[204,167074,260],{"class":210},[204,167076,31562],{"class":263},[204,167078,221],{"class":214},[204,167080,167081,167083],{"class":206,"line":1398},[204,167082,30501],{"class":263},[204,167084,165040],{"class":214},[19,167086,167087,167088,167090],{},"如果逻辑复杂，不要硬写 ",[81,167089,166931],{},"，定义普通函数更清晰。",[14,167092,167094],{"id":167093},"_79-函数作为参数","7.9 函数作为参数",[19,167096,167097],{},"函数可以作为参数传给另一个函数。",[196,167099,167101],{"className":30464,"code":167100,"language":30466,"meta":125,"style":125},"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",[81,167102,167103,167111,167121,167125,167129,167139,167146,167150,167154],{"__ignoreMap":125},[204,167104,167105,167107,167109],{"class":206,"line":207},[204,167106,32033],{"class":210},[204,167108,5296],{"class":2049},[204,167110,151138],{"class":214},[204,167112,167113,167115,167117,167119],{"class":206,"line":126},[204,167114,4176],{"class":210},[204,167116,10956],{"class":214},[204,167118,694],{"class":210},[204,167120,151149],{"class":214},[204,167122,167123],{"class":206,"line":131},[204,167124,2486],{"emptyLinePlaceholder":135},[204,167126,167127],{"class":206,"line":1281},[204,167128,2486],{"emptyLinePlaceholder":135},[204,167130,167131,167133,167136],{"class":206,"line":1287},[204,167132,32033],{"class":210},[204,167134,167135],{"class":2049}," calculate",[204,167137,167138],{"class":214},"(a, b, func):\n",[204,167140,167141,167143],{"class":206,"line":1301},[204,167142,4176],{"class":210},[204,167144,167145],{"class":214}," func(a, b)\n",[204,167147,167148],{"class":206,"line":1307},[204,167149,2486],{"emptyLinePlaceholder":135},[204,167151,167152],{"class":206,"line":1398},[204,167153,2486],{"emptyLinePlaceholder":135},[204,167155,167156,167158,167161,167163,167165,167167],{"class":206,"line":1404},[204,167157,30501],{"class":263},[204,167159,167160],{"class":214},"(calculate(",[204,167162,659],{"class":263},[204,167164,12522],{"class":214},[204,167166,913],{"class":263},[204,167168,167169],{"class":214},", add))\n",[19,167171,167172],{},"这种思想在排序、回调、框架中经常出现。",[14,167174,167176],{"id":167175},"_710-mapfiltersorted","7.10 map、filter、sorted",[49,167178,167180],{"id":167179},"_7101-map","7.10.1 map",[19,167182,167183,167185],{},[81,167184,74130],{}," 对每个元素执行函数。",[196,167187,167189],{"className":30464,"code":167188,"language":30466,"meta":125,"style":125},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[81,167190,167191,167215,167238],{"__ignoreMap":125},[204,167192,167193,167195,167197,167199,167201,167203,167205,167207,167209,167211,167213],{"class":206,"line":207},[204,167194,164145],{"class":214},[204,167196,260],{"class":210},[204,167198,52312],{"class":214},[204,167200,431],{"class":263},[204,167202,12522],{"class":214},[204,167204,292],{"class":263},[204,167206,12522],{"class":214},[204,167208,286],{"class":263},[204,167210,12522],{"class":214},[204,167212,506],{"class":263},[204,167214,33332],{"class":214},[204,167216,167217,167219,167221,167224,167226,167228,167231,167233,167235],{"class":206,"line":126},[204,167218,161351],{"class":214},[204,167220,260],{"class":210},[204,167222,167223],{"class":263}," map",[204,167225,215],{"class":214},[204,167227,166931],{"class":210},[204,167229,167230],{"class":214}," x: x ",[204,167232,668],{"class":210},[204,167234,14842],{"class":263},[204,167236,167237],{"class":214},", nums)\n",[204,167239,167240,167242,167244,167246],{"class":206,"line":131},[204,167241,30501],{"class":263},[204,167243,215],{"class":214},[204,167245,154115],{"class":263},[204,167247,166113],{"class":214},[49,167249,167251],{"id":167250},"_7102-filter","7.10.2 filter",[19,167253,167254,167256],{},[81,167255,80137],{}," 保留满足条件的元素。",[196,167258,167260],{"className":30464,"code":167259,"language":30466,"meta":125,"style":125},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[81,167261,167262,167290,167315],{"__ignoreMap":125},[204,167263,167264,167266,167268,167270,167272,167274,167276,167278,167280,167282,167284,167286,167288],{"class":206,"line":207},[204,167265,164145],{"class":214},[204,167267,260],{"class":210},[204,167269,52312],{"class":214},[204,167271,431],{"class":263},[204,167273,12522],{"class":214},[204,167275,292],{"class":263},[204,167277,12522],{"class":214},[204,167279,286],{"class":263},[204,167281,12522],{"class":214},[204,167283,506],{"class":263},[204,167285,12522],{"class":214},[204,167287,532],{"class":263},[204,167289,33332],{"class":214},[204,167291,167292,167294,167296,167299,167301,167303,167305,167307,167309,167311,167313],{"class":206,"line":126},[204,167293,161351],{"class":214},[204,167295,260],{"class":210},[204,167297,167298],{"class":263}," filter",[204,167300,215],{"class":214},[204,167302,166931],{"class":210},[204,167304,167230],{"class":214},[204,167306,541],{"class":210},[204,167308,14842],{"class":263},[204,167310,101644],{"class":210},[204,167312,4179],{"class":263},[204,167314,167237],{"class":214},[204,167316,167317,167319,167321,167323],{"class":206,"line":131},[204,167318,30501],{"class":263},[204,167320,215],{"class":214},[204,167322,154115],{"class":263},[204,167324,166113],{"class":214},[49,167326,167328],{"id":167327},"_7103-sorted","7.10.3 sorted",[19,167330,167331,167333],{},[81,167332,165281],{}," 返回排序后的新列表。",[196,167335,167337],{"className":30464,"code":167336,"language":30466,"meta":125,"style":125},"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",[81,167338,167339,167347,167367,167387,167407,167411,167415,167444],{"__ignoreMap":125},[204,167340,167341,167343,167345],{"class":206,"line":207},[204,167342,159761],{"class":214},[204,167344,260],{"class":210},[204,167346,55533],{"class":214},[204,167348,167349,167351,167353,167355,167357,167359,167361,167363,167365],{"class":206,"line":126},[204,167350,148430],{"class":214},[204,167352,62765],{"class":319},[204,167354,51523],{"class":214},[204,167356,149933],{"class":319},[204,167358,12522],{"class":214},[204,167360,151517],{"class":319},[204,167362,51523],{"class":214},[204,167364,1202],{"class":263},[204,167366,5016],{"class":214},[204,167368,167369,167371,167373,167375,167377,167379,167381,167383,167385],{"class":206,"line":131},[204,167370,148430],{"class":214},[204,167372,62765],{"class":319},[204,167374,51523],{"class":214},[204,167376,150981],{"class":319},[204,167378,12522],{"class":214},[204,167380,151517],{"class":319},[204,167382,51523],{"class":214},[204,167384,1024],{"class":263},[204,167386,5016],{"class":214},[204,167388,167389,167391,167393,167395,167397,167399,167401,167403,167405],{"class":206,"line":1281},[204,167390,148430],{"class":214},[204,167392,62765],{"class":319},[204,167394,51523],{"class":214},[204,167396,159776],{"class":319},[204,167398,12522],{"class":214},[204,167400,151517],{"class":319},[204,167402,51523],{"class":214},[204,167404,619],{"class":263},[204,167406,5016],{"class":214},[204,167408,167409],{"class":206,"line":1287},[204,167410,33332],{"class":214},[204,167412,167413],{"class":206,"line":1301},[204,167414,2486],{"emptyLinePlaceholder":135},[204,167416,167417,167419,167421,167423,167426,167428,167430,167432,167434,167436,167438,167440,167442],{"class":206,"line":1307},[204,167418,161351],{"class":214},[204,167420,260],{"class":210},[204,167422,163649],{"class":263},[204,167424,167425],{"class":214},"(students, ",[204,167427,153991],{"class":5303},[204,167429,153994],{"class":210},[204,167431,153997],{"class":214},[204,167433,151517],{"class":319},[204,167435,112287],{"class":214},[204,167437,163573],{"class":5303},[204,167439,260],{"class":210},[204,167441,31562],{"class":263},[204,167443,221],{"class":214},[204,167445,167446,167448],{"class":206,"line":1398},[204,167447,30501],{"class":263},[204,167449,76671],{"class":214},[14,167451,167453],{"id":167452},"_711-闭包入门","7.11 闭包入门",[19,167455,167456],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[196,167458,167460],{"className":30464,"code":167459,"language":30466,"meta":125,"style":125},"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",[81,167461,167462,167472,167482,167493,167497,167504,167508,167512,167526],{"__ignoreMap":125},[204,167463,167464,167466,167469],{"class":206,"line":207},[204,167465,32033],{"class":210},[204,167467,167468],{"class":2049}," outer",[204,167470,167471],{"class":214},"(base):\n",[204,167473,167474,167476,167479],{"class":206,"line":126},[204,167475,30887],{"class":210},[204,167477,167478],{"class":2049}," inner",[204,167480,167481],{"class":214},"(num):\n",[204,167483,167484,167486,167489,167491],{"class":206,"line":131},[204,167485,14839],{"class":210},[204,167487,167488],{"class":214}," base ",[204,167490,694],{"class":210},[204,167492,166624],{"class":214},[204,167494,167495],{"class":206,"line":1281},[204,167496,2486],{"emptyLinePlaceholder":135},[204,167498,167499,167501],{"class":206,"line":1287},[204,167500,4176],{"class":210},[204,167502,167503],{"class":214}," inner\n",[204,167505,167506],{"class":206,"line":1301},[204,167507,2486],{"emptyLinePlaceholder":135},[204,167509,167510],{"class":206,"line":1307},[204,167511,2486],{"emptyLinePlaceholder":135},[204,167513,167514,167517,167519,167522,167524],{"class":206,"line":1398},[204,167515,167516],{"class":214},"add_10 ",[204,167518,260],{"class":210},[204,167520,167521],{"class":214}," outer(",[204,167523,659],{"class":263},[204,167525,221],{"class":214},[204,167527,167528,167530,167533,167535],{"class":206,"line":1404},[204,167529,30501],{"class":263},[204,167531,167532],{"class":214},"(add_10(",[204,167534,532],{"class":263},[204,167536,30583],{"class":214},[19,167538,167539],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167541,167543],{"id":167542},"_712-装饰器入门","7.12 装饰器入门",[19,167545,167546],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[196,167548,167550],{"className":30464,"code":167549,"language":30466,"meta":125,"style":125},"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",[81,167551,167552,167561,167570,167581,167586,167597,167601,167608,167612,167616,167621,167629,167639,167643,167647],{"__ignoreMap":125},[204,167553,167554,167556,167558],{"class":206,"line":207},[204,167555,32033],{"class":210},[204,167557,87277],{"class":2049},[204,167559,167560],{"class":214},"(func):\n",[204,167562,167563,167565,167568],{"class":206,"line":126},[204,167564,30887],{"class":210},[204,167566,167567],{"class":2049}," wrapper",[204,167569,32039],{"class":214},[204,167571,167572,167574,167576,167579],{"class":206,"line":131},[204,167573,32537],{"class":263},[204,167575,215],{"class":214},[204,167577,167578],{"class":319},"\"函数开始执行\"",[204,167580,221],{"class":214},[204,167582,167583],{"class":206,"line":1281},[204,167584,167585],{"class":214},"        func()\n",[204,167587,167588,167590,167592,167595],{"class":206,"line":1287},[204,167589,32537],{"class":263},[204,167591,215],{"class":214},[204,167593,167594],{"class":319},"\"函数执行结束\"",[204,167596,221],{"class":214},[204,167598,167599],{"class":206,"line":1301},[204,167600,2486],{"emptyLinePlaceholder":135},[204,167602,167603,167605],{"class":206,"line":1307},[204,167604,4176],{"class":210},[204,167606,167607],{"class":214}," wrapper\n",[204,167609,167610],{"class":206,"line":1398},[204,167611,2486],{"emptyLinePlaceholder":135},[204,167613,167614],{"class":206,"line":1404},[204,167615,2486],{"emptyLinePlaceholder":135},[204,167617,167618],{"class":206,"line":1416},[204,167619,167620],{"class":2049},"@log\n",[204,167622,167623,167625,167627],{"class":206,"line":1698},[204,167624,32033],{"class":210},[204,167626,161041],{"class":2049},[204,167628,32039],{"class":214},[204,167630,167631,167633,167635,167637],{"class":206,"line":1703},[204,167632,31385],{"class":263},[204,167634,215],{"class":214},[204,167636,5931],{"class":319},[204,167638,221],{"class":214},[204,167640,167641],{"class":206,"line":1709},[204,167642,2486],{"emptyLinePlaceholder":135},[204,167644,167645],{"class":206,"line":1714},[204,167646,2486],{"emptyLinePlaceholder":135},[204,167648,167649],{"class":206,"line":1728},[204,167650,161076],{"class":214},[19,167652,158319],{},[196,167654,167656],{"className":30464,"code":167655,"language":30466,"meta":125,"style":125},"say_hello = log(say_hello)\n",[81,167657,167658],{"__ignoreMap":125},[204,167659,167660,167663,167665],{"class":206,"line":207},[204,167661,167662],{"class":214},"say_hello ",[204,167664,260],{"class":210},[204,167666,167667],{"class":214}," log(say_hello)\n",[19,167669,167670],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167672,167674],{"id":167673},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[196,167676,167678],{"className":30464,"code":167677,"language":30466,"meta":125,"style":125},"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",[81,167679,167680,167688,167705,167715,167734,167744,167751,167755,167761,167765,167769,167773,167781,167791,167795,167799],{"__ignoreMap":125},[204,167681,167682,167684,167686],{"class":206,"line":207},[204,167683,32033],{"class":210},[204,167685,87277],{"class":2049},[204,167687,167560],{"class":214},[204,167689,167690,167692,167694,167696,167698,167701,167703],{"class":206,"line":126},[204,167691,30887],{"class":210},[204,167693,167567],{"class":2049},[204,167695,215],{"class":214},[204,167697,668],{"class":210},[204,167699,167700],{"class":214},"args, ",[204,167702,10748],{"class":210},[204,167704,166711],{"class":214},[204,167706,167707,167709,167711,167713],{"class":206,"line":131},[204,167708,32537],{"class":263},[204,167710,215],{"class":214},[204,167712,167578],{"class":319},[204,167714,221],{"class":214},[204,167716,167717,167720,167722,167725,167727,167729,167731],{"class":206,"line":1281},[204,167718,167719],{"class":214},"        result ",[204,167721,260],{"class":210},[204,167723,167724],{"class":214}," func(",[204,167726,668],{"class":210},[204,167728,167700],{"class":214},[204,167730,10748],{"class":210},[204,167732,167733],{"class":214},"kwargs)\n",[204,167735,167736,167738,167740,167742],{"class":206,"line":1287},[204,167737,32537],{"class":263},[204,167739,215],{"class":214},[204,167741,167594],{"class":319},[204,167743,221],{"class":214},[204,167745,167746,167748],{"class":206,"line":1301},[204,167747,14839],{"class":210},[204,167749,167750],{"class":214}," result\n",[204,167752,167753],{"class":206,"line":1307},[204,167754,2486],{"emptyLinePlaceholder":135},[204,167756,167757,167759],{"class":206,"line":1398},[204,167758,4176],{"class":210},[204,167760,167607],{"class":214},[204,167762,167763],{"class":206,"line":1404},[204,167764,2486],{"emptyLinePlaceholder":135},[204,167766,167767],{"class":206,"line":1416},[204,167768,2486],{"emptyLinePlaceholder":135},[204,167770,167771],{"class":206,"line":1698},[204,167772,167620],{"class":2049},[204,167774,167775,167777,167779],{"class":206,"line":1703},[204,167776,32033],{"class":210},[204,167778,5296],{"class":2049},[204,167780,151138],{"class":214},[204,167782,167783,167785,167787,167789],{"class":206,"line":1709},[204,167784,4176],{"class":210},[204,167786,10956],{"class":214},[204,167788,694],{"class":210},[204,167790,151149],{"class":214},[204,167792,167793],{"class":206,"line":1714},[204,167794,2486],{"emptyLinePlaceholder":135},[204,167796,167797],{"class":206,"line":1728},[204,167798,2486],{"emptyLinePlaceholder":135},[204,167800,167801,167803,167805,167807,167809,167811],{"class":206,"line":1733},[204,167802,30501],{"class":263},[204,167804,166645],{"class":214},[204,167806,659],{"class":263},[204,167808,12522],{"class":214},[204,167810,913],{"class":263},[204,167812,30583],{"class":214},[19,167814,167815,167816,43,167818,167820],{},"这个写法使用 ",[81,167817,166577],{},[81,167819,166692],{}," 接收原函数的所有参数。",[14,167822,167824],{"id":167823},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167826,123377],{},[161,167828,167829,167832,167835],{},[71,167830,167831],{},"给定一组学生数据。",[71,167833,167834],{},"封装函数，根据传入规则筛选学生。",[71,167836,167837],{},"筛选及格、优秀、未成年学生。",[19,167839,10122],{},[196,167841,167843],{"className":30464,"code":167842,"language":30466,"meta":125,"style":125},"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",[81,167844,167845,167853,167881,167909,167937,167941,167945,167949,167959,167967,167977,167984,167989,167995,167999,168003,168027,168050,168073,168077,168084,168091],{"__ignoreMap":125},[204,167846,167847,167849,167851],{"class":206,"line":207},[204,167848,159761],{"class":214},[204,167850,260],{"class":210},[204,167852,55533],{"class":214},[204,167854,167855,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879],{"class":206,"line":126},[204,167856,148430],{"class":214},[204,167858,62765],{"class":319},[204,167860,51523],{"class":214},[204,167862,149933],{"class":319},[204,167864,12522],{"class":214},[204,167866,69210],{"class":319},[204,167868,51523],{"class":214},[204,167870,863],{"class":263},[204,167872,12522],{"class":214},[204,167874,151517],{"class":319},[204,167876,51523],{"class":214},[204,167878,1202],{"class":263},[204,167880,5016],{"class":214},[204,167882,167883,167885,167887,167889,167891,167893,167895,167897,167899,167901,167903,167905,167907],{"class":206,"line":131},[204,167884,148430],{"class":214},[204,167886,62765],{"class":319},[204,167888,51523],{"class":214},[204,167890,150981],{"class":319},[204,167892,12522],{"class":214},[204,167894,69210],{"class":319},[204,167896,51523],{"class":214},[204,167898,838],{"class":263},[204,167900,12522],{"class":214},[204,167902,151517],{"class":319},[204,167904,51523],{"class":214},[204,167906,1024],{"class":263},[204,167908,5016],{"class":214},[204,167910,167911,167913,167915,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935],{"class":206,"line":1281},[204,167912,148430],{"class":214},[204,167914,62765],{"class":319},[204,167916,51523],{"class":214},[204,167918,159776],{"class":319},[204,167920,12522],{"class":214},[204,167922,69210],{"class":319},[204,167924,51523],{"class":214},[204,167926,888],{"class":263},[204,167928,12522],{"class":214},[204,167930,151517],{"class":319},[204,167932,51523],{"class":214},[204,167934,1095],{"class":263},[204,167936,5016],{"class":214},[204,167938,167939],{"class":206,"line":1287},[204,167940,33332],{"class":214},[204,167942,167943],{"class":206,"line":1301},[204,167944,2486],{"emptyLinePlaceholder":135},[204,167946,167947],{"class":206,"line":1307},[204,167948,2486],{"emptyLinePlaceholder":135},[204,167950,167951,167953,167956],{"class":206,"line":1398},[204,167952,32033],{"class":210},[204,167954,167955],{"class":2049}," filter_students",[204,167957,167958],{"class":214},"(students, condition):\n",[204,167960,167961,167963,167965],{"class":206,"line":1404},[204,167962,161268],{"class":214},[204,167964,260],{"class":210},[204,167966,51924],{"class":214},[204,167968,167969,167971,167973,167975],{"class":206,"line":1416},[204,167970,3287],{"class":210},[204,167972,152182],{"class":214},[204,167974,26129],{"class":210},[204,167976,152187],{"class":214},[204,167978,167979,167981],{"class":206,"line":1698},[204,167980,2583],{"class":210},[204,167982,167983],{"class":214}," condition(student):\n",[204,167985,167986],{"class":206,"line":1703},[204,167987,167988],{"class":214},"            result.append(student)\n",[204,167990,167991,167993],{"class":206,"line":1709},[204,167992,4176],{"class":210},[204,167994,167750],{"class":214},[204,167996,167997],{"class":206,"line":1714},[204,167998,2486],{"emptyLinePlaceholder":135},[204,168000,168001],{"class":206,"line":1728},[204,168002,2486],{"emptyLinePlaceholder":135},[204,168004,168005,168007,168009,168012,168014,168017,168019,168021,168023,168025],{"class":206,"line":1733},[204,168006,165746],{"class":214},[204,168008,260],{"class":210},[204,168010,168011],{"class":214}," filter_students(students, ",[204,168013,166931],{"class":210},[204,168015,168016],{"class":214}," s: s[",[204,168018,151517],{"class":319},[204,168020,4529],{"class":214},[204,168022,1796],{"class":210},[204,168024,157882],{"class":263},[204,168026,221],{"class":214},[204,168028,168029,168032,168034,168036,168038,168040,168042,168044,168046,168048],{"class":206,"line":1739},[204,168030,168031],{"class":214},"excellent ",[204,168033,260],{"class":210},[204,168035,168011],{"class":214},[204,168037,166931],{"class":210},[204,168039,168016],{"class":214},[204,168041,151517],{"class":319},[204,168043,4529],{"class":214},[204,168045,1796],{"class":210},[204,168047,157833],{"class":263},[204,168049,221],{"class":214},[204,168051,168052,168055,168057,168059,168061,168063,168065,168067,168069,168071],{"class":206,"line":1760},[204,168053,168054],{"class":214},"under_age ",[204,168056,260],{"class":210},[204,168058,168011],{"class":214},[204,168060,166931],{"class":210},[204,168062,168016],{"class":214},[204,168064,69210],{"class":319},[204,168066,4529],{"class":214},[204,168068,1123],{"class":210},[204,168070,156330],{"class":263},[204,168072,221],{"class":214},[204,168074,168075],{"class":206,"line":1765},[204,168076,2486],{"emptyLinePlaceholder":135},[204,168078,168079,168081],{"class":206,"line":1779},[204,168080,30501],{"class":263},[204,168082,168083],{"class":214},"(passed)\n",[204,168085,168086,168088],{"class":206,"line":1784},[204,168087,30501],{"class":263},[204,168089,168090],{"class":214},"(excellent)\n",[204,168092,168093,168095],{"class":206,"line":1813},[204,168094,30501],{"class":263},[204,168096,168097],{"class":214},"(under_age)\n",[14,168099,168101],{"id":168100},"_715-易错点","7.15 易错点",[161,168103,168104,168107,168115,168120,168131],{},[71,168105,168106],{},"默认参数不要写可变对象。",[71,168108,168109,168111,168112,168114],{},[81,168110,166577],{}," 是元组，",[81,168113,166692],{}," 是字典。",[71,168116,168117,168119],{},[81,168118,166931],{}," 只适合简单表达式。",[71,168121,168122,43,168124,168126,168127,168130],{},[81,168123,74130],{},[81,168125,80137],{}," 的结果是迭代器，常用 ",[81,168128,168129],{},"list()"," 转换查看。",[71,168132,168133],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168135,168137],{"id":168136},"_716-本章练习","7.16 本章练习",[161,168139,168140,168147,168153,168158,168163],{},[71,168141,168142,168143,168146],{},"写函数 ",[81,168144,168145],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[71,168148,168142,168149,168152],{},[81,168150,168151],{},"print_user(**kwargs)","，输出用户所有字段。",[71,168154,104451,168155,168157],{},[81,168156,166931],{}," 对学生列表按年龄排序。",[71,168159,104451,168160,168162],{},[81,168161,80137],{}," 找出成绩不及格的学生。",[71,168164,168165],{},"写一个装饰器，统计函数执行前后的提示信息。",[5213,168167,168168],{},"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":125,"searchDepth":126,"depth":126,"links":168170},[168171,168172,168173,168174,168175,168176,168180,168181,168182,168183,168188,168189,168190,168191,168192,168193],{"id":166029,"depth":126,"text":166030},{"id":166143,"depth":126,"text":166144},{"id":166232,"depth":126,"text":166233},{"id":166294,"depth":126,"text":166295},{"id":166440,"depth":126,"text":166441},{"id":166567,"depth":126,"text":166568,"children":168177},[168178,168179],{"id":166571,"depth":131,"text":166572},{"id":166686,"depth":131,"text":166687},{"id":166767,"depth":126,"text":166768},{"id":166925,"depth":126,"text":166926},{"id":167093,"depth":126,"text":167094},{"id":167175,"depth":126,"text":167176,"children":168184},[168185,168186,168187],{"id":167179,"depth":131,"text":167180},{"id":167250,"depth":131,"text":167251},{"id":167327,"depth":131,"text":167328},{"id":167452,"depth":126,"text":167453},{"id":167542,"depth":126,"text":167543},{"id":167673,"depth":126,"text":167674},{"id":167823,"depth":126,"text":167824},{"id":168100,"depth":126,"text":168101},{"id":168136,"depth":126,"text":168137},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166021,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168200,"title":168201,"body":168202,"description":132,"extension":133,"meta":170721,"navigation":135,"path":170722,"seo":170723,"stem":170724,"__hash__":170725},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168203,"toc":170696},[168204,168207,168211,168214,168217,168248,168252,168256,168259,168286,168290,168293,168344,168347,168362,168365,168400,168404,168406,168430,168433,168493,168497,168501,168504,168561,168564,168584,168588,168591,168654,168658,168661,168717,168724,168748,168752,168755,168818,168822,168827,168878,168881,168885,168890,168957,168960,169042,169046,169051,169102,169105,169109,169112,169115,169123,169126,169172,169175,169221,169225,169231,169275,169278,169324,169327,169367,169370,169431,169435,169438,169528,169531,169673,169676,169743,169747,169750,169753,169894,169897,169975,169978,170154,170158,170160,170171,170173,170372,170376,170620,170624,170658,170662,170693],[10,168205,168201],{"id":168206},"_8-文件操作",[14,168208,168210],{"id":168209},"_81-文件操作的意义","8.1 文件操作的意义",[19,168212,168213],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168215,168216],{},"常见文件类型：",[161,168218,168219,168225,168231,168237,168243],{},[71,168220,168221,168224],{},[81,168222,168223],{},".txt","：普通文本。",[71,168226,168227,168230],{},[81,168228,168229],{},".csv","：表格文本。",[71,168232,168233,168236],{},[81,168234,168235],{},".json","：结构化数据。",[71,168238,168239,168242],{},[81,168240,168241],{},".log","：日志文件。",[71,168244,168245,168247],{},[81,168246,146397],{},"：Python 源代码。",[14,168249,168251],{"id":168250},"_82-路径","8.2 路径",[49,168253,168255],{"id":168254},"_821-相对路径","8.2.1 相对路径",[19,168257,168258],{},"相对当前运行目录：",[196,168260,168262],{"className":30464,"code":168261,"language":30466,"meta":125,"style":125},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[81,168263,168264],{"__ignoreMap":125},[204,168265,168266,168268,168270,168272,168274,168276,168278,168280,168282,168284],{"class":206,"line":207},[204,168267,87001],{"class":263},[204,168269,215],{"class":214},[204,168271,146841],{"class":319},[204,168273,12522],{"class":214},[204,168275,146846],{"class":319},[204,168277,12522],{"class":214},[204,168279,146851],{"class":5303},[204,168281,260],{"class":210},[204,168283,146856],{"class":319},[204,168285,221],{"class":214},[49,168287,168289],{"id":168288},"_822-绝对路径","8.2.2 绝对路径",[19,168291,168292],{},"从根目录或盘符开始：",[196,168294,168296],{"className":30464,"code":168295,"language":30466,"meta":125,"style":125},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[81,168297,168298,168321],{"__ignoreMap":125},[204,168299,168300,168302,168304,168307,168309,168311,168313,168315,168317,168319],{"class":206,"line":207},[204,168301,87001],{"class":263},[204,168303,215],{"class":214},[204,168305,168306],{"class":319},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[204,168308,12522],{"class":214},[204,168310,146846],{"class":319},[204,168312,12522],{"class":214},[204,168314,146851],{"class":5303},[204,168316,260],{"class":210},[204,168318,146856],{"class":319},[204,168320,221],{"class":214},[204,168322,168323,168325,168327,168330,168332,168334,168336,168338,168340,168342],{"class":206,"line":126},[204,168324,87001],{"class":263},[204,168326,215],{"class":214},[204,168328,168329],{"class":319},"\"D:\u002Fdata\u002Fdata.txt\"",[204,168331,12522],{"class":214},[204,168333,146846],{"class":319},[204,168335,12522],{"class":214},[204,168337,146851],{"class":5303},[204,168339,260],{"class":210},[204,168341,146856],{"class":319},[204,168343,221],{"class":214},[19,168345,168346],{},"Windows 路径建议写成：",[196,168348,168350],{"className":30464,"code":168349,"language":30466,"meta":125,"style":125},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[81,168351,168352],{"__ignoreMap":125},[204,168353,168354,168357,168359],{"class":206,"line":207},[204,168355,168356],{"class":214},"path ",[204,168358,260],{"class":210},[204,168360,168361],{"class":319}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168363,168364],{},"或原始字符串：",[196,168366,168368],{"className":30464,"code":168367,"language":30466,"meta":125,"style":125},"path = r\"D:\\data\\data.txt\"\n",[81,168369,168370],{"__ignoreMap":125},[204,168371,168372,168374,168376,168378,168380,168383,168386,168389,168391,168393,168395,168398],{"class":206,"line":207},[204,168373,168356],{"class":214},[204,168375,260],{"class":210},[204,168377,17208],{"class":210},[204,168379,464],{"class":319},[204,168381,168382],{"class":48063},"D:",[204,168384,168385],{"class":263},"\\d",[204,168387,168388],{"class":48063},"ata",[204,168390,168385],{"class":263},[204,168392,168388],{"class":48063},[204,168394,771],{"class":263},[204,168396,168397],{"class":48063},"txt",[204,168399,25220],{"class":319},[14,168401,168403],{"id":168402},"_83-open函数","8.3 open函数",[19,168405,5268],{},[196,168407,168409],{"className":30464,"code":168408,"language":30466,"meta":125,"style":125},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[81,168410,168411],{"__ignoreMap":125},[204,168412,168413,168415,168417,168419,168422,168424,168426,168428],{"class":206,"line":207},[204,168414,45440],{"class":5303},[204,168416,13651],{"class":210},[204,168418,146836],{"class":263},[204,168420,168421],{"class":214},"(文件路径, 打开模式, ",[204,168423,146851],{"class":5303},[204,168425,260],{"class":210},[204,168427,146856],{"class":319},[204,168429,221],{"class":214},[19,168431,168432],{},"常见模式：",[352,168434,168435,168444],{},[355,168436,168437],{},[358,168438,168439,168442],{},[361,168440,168441],{},"模式",[361,168443,25955],{},[398,168445,168446,168455,168464,168473,168483],{},[358,168447,168448,168452],{},[403,168449,168450],{},[81,168451,883],{},[403,168453,168454],{},"只读，文件不存在会报错",[358,168456,168457,168461],{},[403,168458,168459],{},[81,168460,1008],{},[403,168462,168463],{},"只写，文件不存在会创建，存在会清空",[358,168465,168466,168470],{},[403,168467,168468],{},[81,168469,62],{},[403,168471,168472],{},"追加，文件不存在会创建",[358,168474,168475,168480],{},[403,168476,168477],{},[81,168478,168479],{},"rb",[403,168481,168482],{},"二进制只读",[358,168484,168485,168490],{},[403,168486,168487],{},[81,168488,168489],{},"wb",[403,168491,168492],{},"二进制只写",[14,168494,168496],{"id":168495},"_84-读取文件","8.4 读取文件",[49,168498,168500],{"id":168499},"_841-read","8.4.1 read",[19,168502,168503],{},"一次读取全部内容：",[196,168505,168507],{"className":30464,"code":168506,"language":30466,"meta":125,"style":125},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[81,168508,168509,168535,168547,168554],{"__ignoreMap":125},[204,168510,168511,168513,168515,168517,168519,168521,168523,168525,168527,168529,168531,168533],{"class":206,"line":207},[204,168512,45440],{"class":5303},[204,168514,13651],{"class":210},[204,168516,146836],{"class":263},[204,168518,215],{"class":214},[204,168520,146841],{"class":319},[204,168522,12522],{"class":214},[204,168524,146846],{"class":319},[204,168526,12522],{"class":214},[204,168528,146851],{"class":5303},[204,168530,260],{"class":210},[204,168532,146856],{"class":319},[204,168534,221],{"class":214},[204,168536,168537,168540,168542,168544],{"class":206,"line":126},[204,168538,168539],{"class":214},"content ",[204,168541,260],{"class":210},[204,168543,148198],{"class":5303},[204,168545,168546],{"class":214},".read()\n",[204,168548,168549,168551],{"class":206,"line":131},[204,168550,30501],{"class":263},[204,168552,168553],{"class":214},"(content)\n",[204,168555,168556,168558],{"class":206,"line":1281},[204,168557,45440],{"class":5303},[204,168559,168560],{"class":214},".close()\n",[19,168562,168563],{},"可以指定读取字符数：",[196,168565,168567],{"className":30464,"code":168566,"language":30466,"meta":125,"style":125},"content = file.read(10)\n",[81,168568,168569],{"__ignoreMap":125},[204,168570,168571,168573,168575,168577,168580,168582],{"class":206,"line":207},[204,168572,168539],{"class":214},[204,168574,260],{"class":210},[204,168576,148198],{"class":5303},[204,168578,168579],{"class":214},".read(",[204,168581,659],{"class":263},[204,168583,221],{"class":214},[49,168585,168587],{"id":168586},"_842-readline","8.4.2 readline",[19,168589,168590],{},"一次读取一行：",[196,168592,168594],{"className":30464,"code":168593,"language":30466,"meta":125,"style":125},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[81,168595,168596,168622,168626,168637,168644,168648],{"__ignoreMap":125},[204,168597,168598,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620],{"class":206,"line":207},[204,168599,45440],{"class":5303},[204,168601,13651],{"class":210},[204,168603,146836],{"class":263},[204,168605,215],{"class":214},[204,168607,146841],{"class":319},[204,168609,12522],{"class":214},[204,168611,146846],{"class":319},[204,168613,12522],{"class":214},[204,168615,146851],{"class":5303},[204,168617,260],{"class":210},[204,168619,146856],{"class":319},[204,168621,221],{"class":214},[204,168623,168624],{"class":206,"line":126},[204,168625,2486],{"emptyLinePlaceholder":135},[204,168627,168628,168630,168632,168634],{"class":206,"line":131},[204,168629,147297],{"class":214},[204,168631,260],{"class":210},[204,168633,148198],{"class":5303},[204,168635,168636],{"class":214},".readline()\n",[204,168638,168639,168641],{"class":206,"line":1281},[204,168640,30501],{"class":263},[204,168642,168643],{"class":214},"(line)\n",[204,168645,168646],{"class":206,"line":1287},[204,168647,2486],{"emptyLinePlaceholder":135},[204,168649,168650,168652],{"class":206,"line":1301},[204,168651,45440],{"class":5303},[204,168653,168560],{"class":214},[49,168655,168657],{"id":168656},"_843-readlines","8.4.3 readlines",[19,168659,168660],{},"读取所有行，返回列表：",[196,168662,168664],{"className":30464,"code":168663,"language":30466,"meta":125,"style":125},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[81,168665,168666,168692,168704,168711],{"__ignoreMap":125},[204,168667,168668,168670,168672,168674,168676,168678,168680,168682,168684,168686,168688,168690],{"class":206,"line":207},[204,168669,45440],{"class":5303},[204,168671,13651],{"class":210},[204,168673,146836],{"class":263},[204,168675,215],{"class":214},[204,168677,146841],{"class":319},[204,168679,12522],{"class":214},[204,168681,146846],{"class":319},[204,168683,12522],{"class":214},[204,168685,146851],{"class":5303},[204,168687,260],{"class":210},[204,168689,146856],{"class":319},[204,168691,221],{"class":214},[204,168693,168694,168697,168699,168701],{"class":206,"line":126},[204,168695,168696],{"class":214},"lines ",[204,168698,260],{"class":210},[204,168700,148198],{"class":5303},[204,168702,168703],{"class":214},".readlines()\n",[204,168705,168706,168708],{"class":206,"line":131},[204,168707,30501],{"class":263},[204,168709,168710],{"class":214},"(lines)\n",[204,168712,168713,168715],{"class":206,"line":1281},[204,168714,45440],{"class":5303},[204,168716,168560],{"class":214},[19,168718,168719,168720,168723],{},"每一行通常带有换行符，可以用 ",[81,168721,168722],{},"strip()"," 去掉：",[196,168725,168727],{"className":30464,"code":168726,"language":30466,"meta":125,"style":125},"for line in lines:\n    print(line.strip())\n",[81,168728,168729,168741],{"__ignoreMap":125},[204,168730,168731,168733,168736,168738],{"class":206,"line":207},[204,168732,3111],{"class":210},[204,168734,168735],{"class":214}," line ",[204,168737,26129],{"class":210},[204,168739,168740],{"class":214}," lines:\n",[204,168742,168743,168745],{"class":206,"line":126},[204,168744,31385],{"class":263},[204,168746,168747],{"class":214},"(line.strip())\n",[49,168749,168751],{"id":168750},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168753,168754],{},"推荐读取大文件时使用：",[196,168756,168758],{"className":30464,"code":168757,"language":30466,"meta":125,"style":125},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[81,168759,168760,168786,168790,168802,168808,168812],{"__ignoreMap":125},[204,168761,168762,168764,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784],{"class":206,"line":207},[204,168763,45440],{"class":5303},[204,168765,13651],{"class":210},[204,168767,146836],{"class":263},[204,168769,215],{"class":214},[204,168771,146841],{"class":319},[204,168773,12522],{"class":214},[204,168775,146846],{"class":319},[204,168777,12522],{"class":214},[204,168779,146851],{"class":5303},[204,168781,260],{"class":210},[204,168783,146856],{"class":319},[204,168785,221],{"class":214},[204,168787,168788],{"class":206,"line":126},[204,168789,2486],{"emptyLinePlaceholder":135},[204,168791,168792,168794,168796,168798,168800],{"class":206,"line":131},[204,168793,3111],{"class":210},[204,168795,168735],{"class":214},[204,168797,26129],{"class":210},[204,168799,148198],{"class":5303},[204,168801,3825],{"class":214},[204,168803,168804,168806],{"class":206,"line":1281},[204,168805,31385],{"class":263},[204,168807,168747],{"class":214},[204,168809,168810],{"class":206,"line":1287},[204,168811,2486],{"emptyLinePlaceholder":135},[204,168813,168814,168816],{"class":206,"line":1301},[204,168815,45440],{"class":5303},[204,168817,168560],{"class":214},[14,168819,168821],{"id":168820},"_85-with语句","8.5 with语句",[19,168823,168824,168826],{},[81,168825,107918],{}," 会自动关闭文件，推荐使用。",[196,168828,168830],{"className":30464,"code":168829,"language":30466,"meta":125,"style":125},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[81,168831,168832,168862,168872],{"__ignoreMap":125},[204,168833,168834,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860],{"class":206,"line":207},[204,168835,107918],{"class":210},[204,168837,146836],{"class":263},[204,168839,215],{"class":214},[204,168841,146841],{"class":319},[204,168843,12522],{"class":214},[204,168845,146846],{"class":319},[204,168847,12522],{"class":214},[204,168849,146851],{"class":5303},[204,168851,260],{"class":210},[204,168853,146856],{"class":319},[204,168855,13801],{"class":214},[204,168857,31469],{"class":210},[204,168859,148198],{"class":5303},[204,168861,3825],{"class":214},[204,168863,168864,168866,168868,168870],{"class":206,"line":126},[204,168865,146868],{"class":214},[204,168867,260],{"class":210},[204,168869,148198],{"class":5303},[204,168871,168546],{"class":214},[204,168873,168874,168876],{"class":206,"line":131},[204,168875,31385],{"class":263},[204,168877,168553],{"class":214},[19,168879,168880],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168882,168884],{"id":168883},"_86-写入文件","8.6 写入文件",[19,168886,168887,168889],{},[81,168888,1008],{}," 模式会清空原文件。",[196,168891,168893],{"className":30464,"code":168892,"language":30466,"meta":125,"style":125},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[81,168894,168895,168925,168942],{"__ignoreMap":125},[204,168896,168897,168899,168901,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923],{"class":206,"line":207},[204,168898,107918],{"class":210},[204,168900,146836],{"class":263},[204,168902,215],{"class":214},[204,168904,146841],{"class":319},[204,168906,12522],{"class":214},[204,168908,152021],{"class":319},[204,168910,12522],{"class":214},[204,168912,146851],{"class":5303},[204,168914,260],{"class":210},[204,168916,146856],{"class":319},[204,168918,13801],{"class":214},[204,168920,31469],{"class":210},[204,168922,148198],{"class":5303},[204,168924,3825],{"class":214},[204,168926,168927,168930,168933,168936,168938,168940],{"class":206,"line":126},[204,168928,168929],{"class":5303},"    file",[204,168931,168932],{"class":214},".write(",[204,168934,168935],{"class":319},"\"hello",[204,168937,156570],{"class":263},[204,168939,464],{"class":319},[204,168941,221],{"class":214},[204,168943,168944,168946,168948,168951,168953,168955],{"class":206,"line":131},[204,168945,168929],{"class":5303},[204,168947,168932],{"class":214},[204,168949,168950],{"class":319},"\"python",[204,168952,156570],{"class":263},[204,168954,464],{"class":319},[204,168956,221],{"class":214},[19,168958,168959],{},"写入多行：",[196,168961,168963],{"className":30464,"code":168962,"language":30466,"meta":125,"style":125},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[81,168964,168965,169000,169004,169035],{"__ignoreMap":125},[204,168966,168967,168969,168971,168973,168976,168978,168980,168982,168985,168987,168989,168991,168994,168996,168998],{"class":206,"line":207},[204,168968,168696],{"class":214},[204,168970,260],{"class":210},[204,168972,52312],{"class":214},[204,168974,168975],{"class":319},"\"小明,18",[204,168977,156570],{"class":263},[204,168979,464],{"class":319},[204,168981,12522],{"class":214},[204,168983,168984],{"class":319},"\"小红,17",[204,168986,156570],{"class":263},[204,168988,464],{"class":319},[204,168990,12522],{"class":214},[204,168992,168993],{"class":319},"\"小刚,19",[204,168995,156570],{"class":263},[204,168997,464],{"class":319},[204,168999,33332],{"class":214},[204,169001,169002],{"class":206,"line":126},[204,169003,2486],{"emptyLinePlaceholder":135},[204,169005,169006,169008,169010,169012,169015,169017,169019,169021,169023,169025,169027,169029,169031,169033],{"class":206,"line":131},[204,169007,107918],{"class":210},[204,169009,146836],{"class":263},[204,169011,215],{"class":214},[204,169013,169014],{"class":319},"\"students.txt\"",[204,169016,12522],{"class":214},[204,169018,152021],{"class":319},[204,169020,12522],{"class":214},[204,169022,146851],{"class":5303},[204,169024,260],{"class":210},[204,169026,146856],{"class":319},[204,169028,13801],{"class":214},[204,169030,31469],{"class":210},[204,169032,148198],{"class":5303},[204,169034,3825],{"class":214},[204,169036,169037,169039],{"class":206,"line":1281},[204,169038,168929],{"class":5303},[204,169040,169041],{"class":214},".writelines(lines)\n",[14,169043,169045],{"id":169044},"_87-追加文件","8.7 追加文件",[19,169047,169048,169050],{},[81,169049,62],{}," 模式不会清空原内容，而是在末尾追加。",[196,169052,169054],{"className":30464,"code":169053,"language":30466,"meta":125,"style":125},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[81,169055,169056,169087],{"__ignoreMap":125},[204,169057,169058,169060,169062,169064,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085],{"class":206,"line":207},[204,169059,107918],{"class":210},[204,169061,146836],{"class":263},[204,169063,215],{"class":214},[204,169065,169066],{"class":319},"\"log.txt\"",[204,169068,12522],{"class":214},[204,169070,165370],{"class":319},[204,169072,12522],{"class":214},[204,169074,146851],{"class":5303},[204,169076,260],{"class":210},[204,169078,146856],{"class":319},[204,169080,13801],{"class":214},[204,169082,31469],{"class":210},[204,169084,148198],{"class":5303},[204,169086,3825],{"class":214},[204,169088,169089,169091,169093,169096,169098,169100],{"class":206,"line":126},[204,169090,168929],{"class":5303},[204,169092,168932],{"class":214},[204,169094,169095],{"class":319},"\"程序启动",[204,169097,156570],{"class":263},[204,169099,464],{"class":319},[204,169101,221],{"class":214},[19,169103,169104],{},"日志类文件常用追加模式。",[14,169106,169108],{"id":169107},"_88-文件编码","8.8 文件编码",[19,169110,169111],{},"编码决定文字如何保存为字节。",[19,169113,169114],{},"常见编码：",[161,169116,169117,169120],{},[71,169118,169119],{},"UTF-8：推荐。",[71,169121,169122],{},"GBK：部分 Windows 中文文件常见。",[19,169124,169125],{},"读取文件乱码时，可以尝试：",[196,169127,169129],{"className":30464,"code":169128,"language":30466,"meta":125,"style":125},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[81,169130,169131,169162],{"__ignoreMap":125},[204,169132,169133,169135,169137,169139,169141,169143,169145,169147,169149,169151,169154,169156,169158,169160],{"class":206,"line":207},[204,169134,107918],{"class":210},[204,169136,146836],{"class":263},[204,169138,215],{"class":214},[204,169140,146841],{"class":319},[204,169142,12522],{"class":214},[204,169144,146846],{"class":319},[204,169146,12522],{"class":214},[204,169148,146851],{"class":5303},[204,169150,260],{"class":210},[204,169152,169153],{"class":319},"\"gbk\"",[204,169155,13801],{"class":214},[204,169157,31469],{"class":210},[204,169159,148198],{"class":5303},[204,169161,3825],{"class":214},[204,169163,169164,169166,169168,169170],{"class":206,"line":126},[204,169165,146868],{"class":214},[204,169167,260],{"class":210},[204,169169,148198],{"class":5303},[204,169171,168546],{"class":214},[19,169173,169174],{},"写文件时建议统一 UTF-8：",[196,169176,169178],{"className":30464,"code":169177,"language":30466,"meta":125,"style":125},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[81,169179,169180,169210],{"__ignoreMap":125},[204,169181,169182,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208],{"class":206,"line":207},[204,169183,107918],{"class":210},[204,169185,146836],{"class":263},[204,169187,215],{"class":214},[204,169189,146841],{"class":319},[204,169191,12522],{"class":214},[204,169193,152021],{"class":319},[204,169195,12522],{"class":214},[204,169197,146851],{"class":5303},[204,169199,260],{"class":210},[204,169201,146856],{"class":319},[204,169203,13801],{"class":214},[204,169205,31469],{"class":210},[204,169207,148198],{"class":5303},[204,169209,3825],{"class":214},[204,169211,169212,169214,169216,169219],{"class":206,"line":126},[204,169213,168929],{"class":5303},[204,169215,168932],{"class":214},[204,169217,169218],{"class":319},"\"中文内容\"",[204,169220,221],{"class":214},[14,169222,169224],{"id":169223},"_89-pathlib","8.9 pathlib",[19,169226,169227,169230],{},[81,169228,169229],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[196,169232,169234],{"className":30464,"code":169233,"language":30466,"meta":125,"style":125},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[81,169235,169236,169246,169250,169268],{"__ignoreMap":125},[204,169237,169238,169240,169242,169244],{"class":206,"line":207},[204,169239,30823],{"class":210},[204,169241,108396],{"class":214},[204,169243,30478],{"class":210},[204,169245,108401],{"class":214},[204,169247,169248],{"class":206,"line":126},[204,169249,2486],{"emptyLinePlaceholder":135},[204,169251,169252,169254,169256,169258,169261,169263,169265],{"class":206,"line":131},[204,169253,168356],{"class":214},[204,169255,260],{"class":210},[204,169257,108630],{"class":214},[204,169259,169260],{"class":319},"\"data\"",[204,169262,13801],{"class":214},[204,169264,797],{"class":210},[204,169266,169267],{"class":319}," \"students.txt\"\n",[204,169269,169270,169272],{"class":206,"line":1281},[204,169271,30501],{"class":263},[204,169273,169274],{"class":214},"(path)\n",[19,169276,169277],{},"创建目录：",[196,169279,169281],{"className":30464,"code":169280,"language":30466,"meta":125,"style":125},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[81,169282,169283,169293,169297,169310],{"__ignoreMap":125},[204,169284,169285,169287,169289,169291],{"class":206,"line":207},[204,169286,30823],{"class":210},[204,169288,108396],{"class":214},[204,169290,30478],{"class":210},[204,169292,108401],{"class":214},[204,169294,169295],{"class":206,"line":126},[204,169296,2486],{"emptyLinePlaceholder":135},[204,169298,169299,169302,169304,169306,169308],{"class":206,"line":131},[204,169300,169301],{"class":214},"data_dir ",[204,169303,260],{"class":210},[204,169305,108630],{"class":214},[204,169307,169260],{"class":319},[204,169309,221],{"class":214},[204,169311,169312,169315,169318,169320,169322],{"class":206,"line":1281},[204,169313,169314],{"class":214},"data_dir.mkdir(",[204,169316,169317],{"class":5303},"exist_ok",[204,169319,260],{"class":210},[204,169321,31562],{"class":263},[204,169323,221],{"class":214},[19,169325,169326],{},"判断文件是否存在：",[196,169328,169330],{"className":30464,"code":169329,"language":30466,"meta":125,"style":125},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[81,169331,169332,169345,169349,169356],{"__ignoreMap":125},[204,169333,169334,169336,169338,169340,169343],{"class":206,"line":207},[204,169335,168356],{"class":214},[204,169337,260],{"class":210},[204,169339,108630],{"class":214},[204,169341,169342],{"class":319},"\"data\u002Fstudents.txt\"",[204,169344,221],{"class":214},[204,169346,169347],{"class":206,"line":126},[204,169348,2486],{"emptyLinePlaceholder":135},[204,169350,169351,169353],{"class":206,"line":131},[204,169352,1617],{"class":210},[204,169354,169355],{"class":214}," path.exists():\n",[204,169357,169358,169360,169362,169365],{"class":206,"line":1281},[204,169359,31385],{"class":263},[204,169361,215],{"class":214},[204,169363,169364],{"class":319},"\"文件存在\"",[204,169366,221],{"class":214},[19,169368,169369],{},"读写文本：",[196,169371,169373],{"className":30464,"code":169372,"language":30466,"meta":125,"style":125},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[81,169374,169375,169387,169391,169408,169425],{"__ignoreMap":125},[204,169376,169377,169379,169381,169383,169385],{"class":206,"line":207},[204,169378,168356],{"class":214},[204,169380,260],{"class":210},[204,169382,108630],{"class":214},[204,169384,146841],{"class":319},[204,169386,221],{"class":214},[204,169388,169389],{"class":206,"line":126},[204,169390,2486],{"emptyLinePlaceholder":135},[204,169392,169393,169396,169398,169400,169402,169404,169406],{"class":206,"line":131},[204,169394,169395],{"class":214},"path.write_text(",[204,169397,145921],{"class":319},[204,169399,12522],{"class":214},[204,169401,146851],{"class":5303},[204,169403,260],{"class":210},[204,169405,146856],{"class":319},[204,169407,221],{"class":214},[204,169409,169410,169412,169414,169417,169419,169421,169423],{"class":206,"line":1281},[204,169411,168539],{"class":214},[204,169413,260],{"class":210},[204,169415,169416],{"class":214}," path.read_text(",[204,169418,146851],{"class":5303},[204,169420,260],{"class":210},[204,169422,146856],{"class":319},[204,169424,221],{"class":214},[204,169426,169427,169429],{"class":206,"line":1287},[204,169428,30501],{"class":263},[204,169430,168553],{"class":214},[14,169432,169434],{"id":169433},"_810-json文件","8.10 JSON文件",[19,169436,169437],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[196,169439,169441],{"className":30464,"code":169440,"language":30466,"meta":125,"style":125},"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",[81,169442,169443,169449,169453,169461,169471,169481,169489,169493,169497,169522],{"__ignoreMap":125},[204,169444,169445,169447],{"class":206,"line":207},[204,169446,30478],{"class":210},[204,169448,147136],{"class":214},[204,169450,169451],{"class":206,"line":126},[204,169452,2486],{"emptyLinePlaceholder":135},[204,169454,169455,169457,169459],{"class":206,"line":131},[204,169456,149526],{"class":214},[204,169458,260],{"class":210},[204,169460,15659],{"class":214},[204,169462,169463,169465,169467,169469],{"class":206,"line":1281},[204,169464,147065],{"class":319},[204,169466,51523],{"class":214},[204,169468,149933],{"class":319},[204,169470,31552],{"class":214},[204,169472,169473,169475,169477,169479],{"class":206,"line":1287},[204,169474,164582],{"class":319},[204,169476,51523],{"class":214},[204,169478,863],{"class":263},[204,169480,31552],{"class":214},[204,169482,169483,169485,169487],{"class":206,"line":1301},[204,169484,164593],{"class":319},[204,169486,51523],{"class":214},[204,169488,164598],{"class":263},[204,169490,169491],{"class":206,"line":1307},[204,169492,1651],{"class":214},[204,169494,169495],{"class":206,"line":1398},[204,169496,2486],{"emptyLinePlaceholder":135},[204,169498,169499,169501,169503,169506,169508,169510,169512,169514,169516,169518,169520],{"class":206,"line":1404},[204,169500,156489],{"class":214},[204,169502,260],{"class":210},[204,169504,169505],{"class":214}," json.dumps(student, ",[204,169507,147182],{"class":5303},[204,169509,260],{"class":210},[204,169511,34073],{"class":263},[204,169513,12522],{"class":214},[204,169515,152057],{"class":5303},[204,169517,260],{"class":210},[204,169519,292],{"class":263},[204,169521,221],{"class":214},[204,169523,169524,169526],{"class":206,"line":1416},[204,169525,30501],{"class":263},[204,169527,164116],{"class":214},[19,169529,169530],{},"写入 JSON 文件：",[196,169532,169534],{"className":30464,"code":169533,"language":30466,"meta":125,"style":125},"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",[81,169535,169536,169542,169546,169554,169582,169610,169614,169618,169648],{"__ignoreMap":125},[204,169537,169538,169540],{"class":206,"line":207},[204,169539,30478],{"class":210},[204,169541,147136],{"class":214},[204,169543,169544],{"class":206,"line":126},[204,169545,2486],{"emptyLinePlaceholder":135},[204,169547,169548,169550,169552],{"class":206,"line":131},[204,169549,159761],{"class":214},[204,169551,260],{"class":210},[204,169553,55533],{"class":214},[204,169555,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580],{"class":206,"line":1281},[204,169557,148430],{"class":214},[204,169559,62765],{"class":319},[204,169561,51523],{"class":214},[204,169563,149933],{"class":319},[204,169565,12522],{"class":214},[204,169567,69210],{"class":319},[204,169569,51523],{"class":214},[204,169571,863],{"class":263},[204,169573,12522],{"class":214},[204,169575,151517],{"class":319},[204,169577,51523],{"class":214},[204,169579,1202],{"class":263},[204,169581,5016],{"class":214},[204,169583,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608],{"class":206,"line":1287},[204,169585,148430],{"class":214},[204,169587,62765],{"class":319},[204,169589,51523],{"class":214},[204,169591,150981],{"class":319},[204,169593,12522],{"class":214},[204,169595,69210],{"class":319},[204,169597,51523],{"class":214},[204,169599,838],{"class":263},[204,169601,12522],{"class":214},[204,169603,151517],{"class":319},[204,169605,51523],{"class":214},[204,169607,1024],{"class":263},[204,169609,5016],{"class":214},[204,169611,169612],{"class":206,"line":1301},[204,169613,33332],{"class":214},[204,169615,169616],{"class":206,"line":1307},[204,169617,2486],{"emptyLinePlaceholder":135},[204,169619,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642,169644,169646],{"class":206,"line":1398},[204,169621,107918],{"class":210},[204,169623,146836],{"class":263},[204,169625,215],{"class":214},[204,169627,151876],{"class":319},[204,169629,12522],{"class":214},[204,169631,152021],{"class":319},[204,169633,12522],{"class":214},[204,169635,146851],{"class":5303},[204,169637,260],{"class":210},[204,169639,146856],{"class":319},[204,169641,13801],{"class":214},[204,169643,31469],{"class":210},[204,169645,148198],{"class":5303},[204,169647,3825],{"class":214},[204,169649,169650,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671],{"class":206,"line":1404},[204,169651,169652],{"class":214},"    json.dump(students, ",[204,169654,45440],{"class":5303},[204,169656,12522],{"class":214},[204,169658,147182],{"class":5303},[204,169660,260],{"class":210},[204,169662,34073],{"class":263},[204,169664,12522],{"class":214},[204,169666,152057],{"class":5303},[204,169668,260],{"class":210},[204,169670,292],{"class":263},[204,169672,221],{"class":214},[19,169674,169675],{},"读取 JSON 文件：",[196,169677,169679],{"className":30464,"code":169678,"language":30466,"meta":125,"style":125},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[81,169680,169681,169687,169691,169721,169733,169737],{"__ignoreMap":125},[204,169682,169683,169685],{"class":206,"line":207},[204,169684,30478],{"class":210},[204,169686,147136],{"class":214},[204,169688,169689],{"class":206,"line":126},[204,169690,2486],{"emptyLinePlaceholder":135},[204,169692,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715,169717,169719],{"class":206,"line":131},[204,169694,107918],{"class":210},[204,169696,146836],{"class":263},[204,169698,215],{"class":214},[204,169700,151876],{"class":319},[204,169702,12522],{"class":214},[204,169704,146846],{"class":319},[204,169706,12522],{"class":214},[204,169708,146851],{"class":5303},[204,169710,260],{"class":210},[204,169712,146856],{"class":319},[204,169714,13801],{"class":214},[204,169716,31469],{"class":210},[204,169718,148198],{"class":5303},[204,169720,3825],{"class":214},[204,169722,169723,169725,169727,169729,169731],{"class":206,"line":1281},[204,169724,153082],{"class":214},[204,169726,260],{"class":210},[204,169728,148209],{"class":214},[204,169730,45440],{"class":5303},[204,169732,221],{"class":214},[204,169734,169735],{"class":206,"line":1287},[204,169736,2486],{"emptyLinePlaceholder":135},[204,169738,169739,169741],{"class":206,"line":1301},[204,169740,30501],{"class":263},[204,169742,165040],{"class":214},[14,169744,169746],{"id":169745},"_811-csv文件","8.11 CSV文件",[19,169748,169749],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169751,169752],{},"写入 CSV：",[196,169754,169756],{"className":30464,"code":169755,"language":30466,"meta":125,"style":125},"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",[81,169757,169758,169765,169769,169777,169795,169811,169827,169831,169835,169875,169889],{"__ignoreMap":125},[204,169759,169760,169762],{"class":206,"line":207},[204,169761,30478],{"class":210},[204,169763,169764],{"class":214}," csv\n",[204,169766,169767],{"class":206,"line":126},[204,169768,2486],{"emptyLinePlaceholder":135},[204,169770,169771,169773,169775],{"class":206,"line":131},[204,169772,159761],{"class":214},[204,169774,260],{"class":210},[204,169776,55533],{"class":214},[204,169778,169779,169782,169784,169786,169788,169790,169793],{"class":206,"line":1281},[204,169780,169781],{"class":214},"    [",[204,169783,73185],{"class":319},[204,169785,12522],{"class":214},[204,169787,73218],{"class":319},[204,169789,12522],{"class":214},[204,169791,169792],{"class":319},"\"成绩\"",[204,169794,87922],{"class":214},[204,169796,169797,169799,169801,169803,169805,169807,169809],{"class":206,"line":1287},[204,169798,169781],{"class":214},[204,169800,149933],{"class":319},[204,169802,12522],{"class":214},[204,169804,863],{"class":263},[204,169806,12522],{"class":214},[204,169808,1202],{"class":263},[204,169810,87922],{"class":214},[204,169812,169813,169815,169817,169819,169821,169823,169825],{"class":206,"line":1301},[204,169814,169781],{"class":214},[204,169816,150981],{"class":319},[204,169818,12522],{"class":214},[204,169820,838],{"class":263},[204,169822,12522],{"class":214},[204,169824,1024],{"class":263},[204,169826,87922],{"class":214},[204,169828,169829],{"class":206,"line":1307},[204,169830,33332],{"class":214},[204,169832,169833],{"class":206,"line":1398},[204,169834,2486],{"emptyLinePlaceholder":135},[204,169836,169837,169839,169841,169843,169846,169848,169850,169852,169854,169856,169858,169860,169863,169865,169867,169869,169871,169873],{"class":206,"line":1404},[204,169838,107918],{"class":210},[204,169840,146836],{"class":263},[204,169842,215],{"class":214},[204,169844,169845],{"class":319},"\"students.csv\"",[204,169847,12522],{"class":214},[204,169849,152021],{"class":319},[204,169851,12522],{"class":214},[204,169853,146851],{"class":5303},[204,169855,260],{"class":210},[204,169857,146856],{"class":319},[204,169859,12522],{"class":214},[204,169861,169862],{"class":5303},"newline",[204,169864,260],{"class":210},[204,169866,7739],{"class":319},[204,169868,13801],{"class":214},[204,169870,31469],{"class":210},[204,169872,148198],{"class":5303},[204,169874,3825],{"class":214},[204,169876,169877,169880,169882,169885,169887],{"class":206,"line":1416},[204,169878,169879],{"class":214},"    writer ",[204,169881,260],{"class":210},[204,169883,169884],{"class":214}," csv.writer(",[204,169886,45440],{"class":5303},[204,169888,221],{"class":214},[204,169890,169891],{"class":206,"line":1698},[204,169892,169893],{"class":214},"    writer.writerows(students)\n",[19,169895,169896],{},"读取 CSV：",[196,169898,169900],{"className":30464,"code":169899,"language":30466,"meta":125,"style":125},"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",[81,169901,169902,169908,169912,169942,169956,169968],{"__ignoreMap":125},[204,169903,169904,169906],{"class":206,"line":207},[204,169905,30478],{"class":210},[204,169907,169764],{"class":214},[204,169909,169910],{"class":206,"line":126},[204,169911,2486],{"emptyLinePlaceholder":135},[204,169913,169914,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940],{"class":206,"line":131},[204,169915,107918],{"class":210},[204,169917,146836],{"class":263},[204,169919,215],{"class":214},[204,169921,169845],{"class":319},[204,169923,12522],{"class":214},[204,169925,146846],{"class":319},[204,169927,12522],{"class":214},[204,169929,146851],{"class":5303},[204,169931,260],{"class":210},[204,169933,146856],{"class":319},[204,169935,13801],{"class":214},[204,169937,31469],{"class":210},[204,169939,148198],{"class":5303},[204,169941,3825],{"class":214},[204,169943,169944,169947,169949,169952,169954],{"class":206,"line":1281},[204,169945,169946],{"class":214},"    reader ",[204,169948,260],{"class":210},[204,169950,169951],{"class":214}," csv.reader(",[204,169953,45440],{"class":5303},[204,169955,221],{"class":214},[204,169957,169958,169960,169963,169965],{"class":206,"line":1287},[204,169959,3287],{"class":210},[204,169961,169962],{"class":214}," row ",[204,169964,26129],{"class":210},[204,169966,169967],{"class":214}," reader:\n",[204,169969,169970,169972],{"class":206,"line":1301},[204,169971,32537],{"class":263},[204,169973,169974],{"class":214},"(row)\n",[19,169976,169977],{},"使用字典写入：",[196,169979,169981],{"className":30464,"code":169980,"language":30466,"meta":125,"style":125},"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",[81,169982,169983,169989,169993,170001,170029,170057,170061,170065,170103,170124,170145,170150],{"__ignoreMap":125},[204,169984,169985,169987],{"class":206,"line":207},[204,169986,30478],{"class":210},[204,169988,169764],{"class":214},[204,169990,169991],{"class":206,"line":126},[204,169992,2486],{"emptyLinePlaceholder":135},[204,169994,169995,169997,169999],{"class":206,"line":131},[204,169996,159761],{"class":214},[204,169998,260],{"class":210},[204,170000,55533],{"class":214},[204,170002,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027],{"class":206,"line":1281},[204,170004,148430],{"class":214},[204,170006,62765],{"class":319},[204,170008,51523],{"class":214},[204,170010,149933],{"class":319},[204,170012,12522],{"class":214},[204,170014,69210],{"class":319},[204,170016,51523],{"class":214},[204,170018,863],{"class":263},[204,170020,12522],{"class":214},[204,170022,151517],{"class":319},[204,170024,51523],{"class":214},[204,170026,1202],{"class":263},[204,170028,5016],{"class":214},[204,170030,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055],{"class":206,"line":1287},[204,170032,148430],{"class":214},[204,170034,62765],{"class":319},[204,170036,51523],{"class":214},[204,170038,150981],{"class":319},[204,170040,12522],{"class":214},[204,170042,69210],{"class":319},[204,170044,51523],{"class":214},[204,170046,838],{"class":263},[204,170048,12522],{"class":214},[204,170050,151517],{"class":319},[204,170052,51523],{"class":214},[204,170054,1024],{"class":263},[204,170056,5016],{"class":214},[204,170058,170059],{"class":206,"line":1301},[204,170060,33332],{"class":214},[204,170062,170063],{"class":206,"line":1307},[204,170064,2486],{"emptyLinePlaceholder":135},[204,170066,170067,170069,170071,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101],{"class":206,"line":1398},[204,170068,107918],{"class":210},[204,170070,146836],{"class":263},[204,170072,215],{"class":214},[204,170074,169845],{"class":319},[204,170076,12522],{"class":214},[204,170078,152021],{"class":319},[204,170080,12522],{"class":214},[204,170082,146851],{"class":5303},[204,170084,260],{"class":210},[204,170086,146856],{"class":319},[204,170088,12522],{"class":214},[204,170090,169862],{"class":5303},[204,170092,260],{"class":210},[204,170094,7739],{"class":319},[204,170096,13801],{"class":214},[204,170098,31469],{"class":210},[204,170100,148198],{"class":5303},[204,170102,3825],{"class":214},[204,170104,170105,170108,170110,170112,170114,170116,170118,170120,170122],{"class":206,"line":1404},[204,170106,170107],{"class":214},"    fieldnames ",[204,170109,260],{"class":210},[204,170111,52312],{"class":214},[204,170113,62765],{"class":319},[204,170115,12522],{"class":214},[204,170117,69210],{"class":319},[204,170119,12522],{"class":214},[204,170121,151517],{"class":319},[204,170123,33332],{"class":214},[204,170125,170126,170128,170130,170133,170135,170137,170140,170142],{"class":206,"line":1416},[204,170127,169879],{"class":214},[204,170129,260],{"class":210},[204,170131,170132],{"class":214}," csv.DictWriter(",[204,170134,45440],{"class":5303},[204,170136,12522],{"class":214},[204,170138,170139],{"class":5303},"fieldnames",[204,170141,260],{"class":210},[204,170143,170144],{"class":214},"fieldnames)\n",[204,170146,170147],{"class":206,"line":1698},[204,170148,170149],{"class":214},"    writer.writeheader()\n",[204,170151,170152],{"class":206,"line":1703},[204,170153,169893],{"class":214},[14,170155,170157],{"id":170156},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170159,123377],{},[161,170161,170162,170165,170168],{},[71,170163,170164],{},"读取文本文件。",[71,170166,170167],{},"统计每个单词出现次数。",[71,170169,170170],{},"输出出现次数最多的前 10 个单词。",[19,170172,10122],{},[196,170174,170176],{"className":30464,"code":170175,"language":30466,"meta":125,"style":125},"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",[81,170177,170178,170188,170192,170205,170221,170225,170235,170244,170248,170260,170280,170289,170293,170311,170315,170345,170349,170365],{"__ignoreMap":125},[204,170179,170180,170182,170184,170186],{"class":206,"line":207},[204,170181,30823],{"class":210},[204,170183,108396],{"class":214},[204,170185,30478],{"class":210},[204,170187,108401],{"class":214},[204,170189,170190],{"class":206,"line":126},[204,170191,2486],{"emptyLinePlaceholder":135},[204,170193,170194,170196,170198,170200,170203],{"class":206,"line":131},[204,170195,168356],{"class":214},[204,170197,260],{"class":210},[204,170199,108630],{"class":214},[204,170201,170202],{"class":319},"\"article.txt\"",[204,170204,221],{"class":214},[204,170206,170207,170209,170211,170213,170215,170217,170219],{"class":206,"line":1281},[204,170208,168539],{"class":214},[204,170210,260],{"class":210},[204,170212,169416],{"class":214},[204,170214,146851],{"class":5303},[204,170216,260],{"class":210},[204,170218,146856],{"class":319},[204,170220,221],{"class":214},[204,170222,170223],{"class":206,"line":1287},[204,170224,2486],{"emptyLinePlaceholder":135},[204,170226,170227,170230,170232],{"class":206,"line":1301},[204,170228,170229],{"class":214},"words ",[204,170231,260],{"class":210},[204,170233,170234],{"class":214}," content.lower().split()\n",[204,170236,170237,170240,170242],{"class":206,"line":1307},[204,170238,170239],{"class":214},"counter ",[204,170241,260],{"class":210},[204,170243,87954],{"class":214},[204,170245,170246],{"class":206,"line":1398},[204,170247,2486],{"emptyLinePlaceholder":135},[204,170249,170250,170252,170255,170257],{"class":206,"line":1404},[204,170251,3111],{"class":210},[204,170253,170254],{"class":214}," word ",[204,170256,26129],{"class":210},[204,170258,170259],{"class":214}," words:\n",[204,170261,170262,170265,170267,170270,170273,170275,170278],{"class":206,"line":1416},[204,170263,170264],{"class":214},"    word ",[204,170266,260],{"class":210},[204,170268,170269],{"class":214}," word.strip(",[204,170271,170272],{"class":319},"\".,!?;:",[204,170274,156540],{"class":263},[204,170276,170277],{"class":319},"'()[]\"",[204,170279,221],{"class":214},[204,170281,170282,170284,170286],{"class":206,"line":1698},[204,170283,3187],{"class":210},[204,170285,39016],{"class":210},[204,170287,170288],{"class":214}," word:\n",[204,170290,170291],{"class":206,"line":1703},[204,170292,148557],{"class":210},[204,170294,170295,170298,170300,170303,170305,170307,170309],{"class":206,"line":1709},[204,170296,170297],{"class":214},"    counter[word] ",[204,170299,260],{"class":210},[204,170301,170302],{"class":214}," counter.get(word, ",[204,170304,405],{"class":263},[204,170306,13801],{"class":214},[204,170308,694],{"class":210},[204,170310,55785],{"class":263},[204,170312,170313],{"class":206,"line":1714},[204,170314,2486],{"emptyLinePlaceholder":135},[204,170316,170317,170320,170322,170324,170327,170329,170331,170333,170335,170337,170339,170341,170343],{"class":206,"line":1728},[204,170318,170319],{"class":214},"items ",[204,170321,260],{"class":210},[204,170323,163649],{"class":263},[204,170325,170326],{"class":214},"(counter.items(), ",[204,170328,153991],{"class":5303},[204,170330,153994],{"class":210},[204,170332,153997],{"class":214},[204,170334,431],{"class":263},[204,170336,112287],{"class":214},[204,170338,163573],{"class":5303},[204,170340,260],{"class":210},[204,170342,31562],{"class":263},[204,170344,221],{"class":214},[204,170346,170347],{"class":206,"line":1733},[204,170348,2486],{"emptyLinePlaceholder":135},[204,170350,170351,170353,170356,170358,170361,170363],{"class":206,"line":1739},[204,170352,3111],{"class":210},[204,170354,170355],{"class":214}," word, count ",[204,170357,26129],{"class":210},[204,170359,170360],{"class":214}," items[:",[204,170362,659],{"class":263},[204,170364,165800],{"class":214},[204,170366,170367,170369],{"class":206,"line":1760},[204,170368,31385],{"class":263},[204,170370,170371],{"class":214},"(word, count)\n",[14,170373,170375],{"id":170374},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[196,170377,170379],{"className":30464,"code":170378,"language":30466,"meta":125,"style":125},"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",[81,170380,170381,170387,170397,170401,170413,170417,170421,170429,170439,170445,170449,170479,170489,170493,170497,170505,170535,170559,170563,170567,170575,170604,170609],{"__ignoreMap":125},[204,170382,170383,170385],{"class":206,"line":207},[204,170384,30478],{"class":210},[204,170386,147136],{"class":214},[204,170388,170389,170391,170393,170395],{"class":206,"line":126},[204,170390,30823],{"class":210},[204,170392,108396],{"class":214},[204,170394,30478],{"class":210},[204,170396,108401],{"class":214},[204,170398,170399],{"class":206,"line":131},[204,170400,2486],{"emptyLinePlaceholder":135},[204,170402,170403,170405,170407,170409,170411],{"class":206,"line":1281},[204,170404,151869],{"class":263},[204,170406,13651],{"class":210},[204,170408,108630],{"class":214},[204,170410,151876],{"class":319},[204,170412,221],{"class":214},[204,170414,170415],{"class":206,"line":1287},[204,170416,2486],{"emptyLinePlaceholder":135},[204,170418,170419],{"class":206,"line":1301},[204,170420,2486],{"emptyLinePlaceholder":135},[204,170422,170423,170425,170427],{"class":206,"line":1307},[204,170424,32033],{"class":210},[204,170426,151893],{"class":2049},[204,170428,32039],{"class":214},[204,170430,170431,170433,170435,170437],{"class":206,"line":1398},[204,170432,3187],{"class":210},[204,170434,39016],{"class":210},[204,170436,151904],{"class":263},[204,170438,151907],{"class":214},[204,170440,170441,170443],{"class":206,"line":1404},[204,170442,14839],{"class":210},[204,170444,51924],{"class":214},[204,170446,170447],{"class":206,"line":1416},[204,170448,2486],{"emptyLinePlaceholder":135},[204,170450,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477],{"class":206,"line":1698},[204,170452,34264],{"class":210},[204,170454,146836],{"class":263},[204,170456,215],{"class":214},[204,170458,151869],{"class":263},[204,170460,12522],{"class":214},[204,170462,146846],{"class":319},[204,170464,12522],{"class":214},[204,170466,146851],{"class":5303},[204,170468,260],{"class":210},[204,170470,146856],{"class":319},[204,170472,13801],{"class":214},[204,170474,31469],{"class":210},[204,170476,148198],{"class":5303},[204,170478,3825],{"class":214},[204,170480,170481,170483,170485,170487],{"class":206,"line":1703},[204,170482,14839],{"class":210},[204,170484,148209],{"class":214},[204,170486,45440],{"class":5303},[204,170488,221],{"class":214},[204,170490,170491],{"class":206,"line":1709},[204,170492,2486],{"emptyLinePlaceholder":135},[204,170494,170495],{"class":206,"line":1714},[204,170496,2486],{"emptyLinePlaceholder":135},[204,170498,170499,170501,170503],{"class":206,"line":1728},[204,170500,32033],{"class":210},[204,170502,152003],{"class":2049},[204,170504,152006],{"class":214},[204,170506,170507,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533],{"class":206,"line":1733},[204,170508,34264],{"class":210},[204,170510,146836],{"class":263},[204,170512,215],{"class":214},[204,170514,151869],{"class":263},[204,170516,12522],{"class":214},[204,170518,152021],{"class":319},[204,170520,12522],{"class":214},[204,170522,146851],{"class":5303},[204,170524,260],{"class":210},[204,170526,146856],{"class":319},[204,170528,13801],{"class":214},[204,170530,31469],{"class":210},[204,170532,148198],{"class":5303},[204,170534,3825],{"class":214},[204,170536,170537,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557],{"class":206,"line":1739},[204,170538,152042],{"class":214},[204,170540,45440],{"class":5303},[204,170542,12522],{"class":214},[204,170544,147182],{"class":5303},[204,170546,260],{"class":210},[204,170548,34073],{"class":263},[204,170550,12522],{"class":214},[204,170552,152057],{"class":5303},[204,170554,260],{"class":210},[204,170556,292],{"class":263},[204,170558,221],{"class":214},[204,170560,170561],{"class":206,"line":1760},[204,170562,2486],{"emptyLinePlaceholder":135},[204,170564,170565],{"class":206,"line":1765},[204,170566,2486],{"emptyLinePlaceholder":135},[204,170568,170569,170571,170573],{"class":206,"line":1779},[204,170570,159761],{"class":214},[204,170572,260],{"class":210},[204,170574,153087],{"class":214},[204,170576,170577,170580,170582,170584,170586,170588,170590,170592,170594,170596,170598,170600,170602],{"class":206,"line":1784},[204,170578,170579],{"class":214},"students.append({",[204,170581,62765],{"class":319},[204,170583,51523],{"class":214},[204,170585,149933],{"class":319},[204,170587,12522],{"class":214},[204,170589,69210],{"class":319},[204,170591,51523],{"class":214},[204,170593,863],{"class":263},[204,170595,12522],{"class":214},[204,170597,151517],{"class":319},[204,170599,51523],{"class":214},[204,170601,1202],{"class":263},[204,170603,165197],{"class":214},[204,170605,170606],{"class":206,"line":1813},[204,170607,170608],{"class":214},"save_students(students)\n",[204,170610,170611,170613,170615,170618],{"class":206,"line":1818},[204,170612,30501],{"class":263},[204,170614,215],{"class":214},[204,170616,170617],{"class":319},"\"保存成功\"",[204,170619,221],{"class":214},[14,170621,170623],{"id":170622},"_814-易错点","8.14 易错点",[161,170625,170626,170630,170636,170641,170648,170655],{},[71,170627,170628,168889],{},[81,170629,1008],{},[71,170631,170632,170633,28471],{},"读写中文要指定 ",[81,170634,170635],{},"encoding=\"utf-8\"",[71,170637,170638,170639,28471],{},"打开文件后要关闭，推荐使用 ",[81,170640,107918],{},[71,170642,170643,170644,170647],{},"读取大文件不要直接 ",[81,170645,170646],{},"read()"," 全部内容。",[71,170649,170650,170651,170654],{},"Windows 写 CSV 时建议加 ",[81,170652,170653],{},"newline=\"\"","，避免空行。",[71,170656,170657],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170659,170661],{"id":170660},"_815-本章练习","8.15 本章练习",[161,170663,170664,170671,170676,170679,170682],{},[71,170665,170666,170667,170670],{},"写入一个 ",[81,170668,170669],{},"students.txt","，每行保存一个学生姓名。",[71,170672,104440,170673,170675],{},[81,170674,170669],{}," 并输出所有学生。",[71,170677,170678],{},"把学生列表保存为 JSON 文件。",[71,170680,170681],{},"从 JSON 文件读取学生数据，计算平均分。",[71,170683,170684,170685,170688,170689,170692],{},"写一个日志函数 ",[81,170686,170687],{},"write_log(message)","，每次调用向 ",[81,170690,170691],{},"app.log"," 追加一行。",[5213,170694,170695],{},"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":125,"searchDepth":126,"depth":126,"links":170697},[170698,170699,170703,170704,170710,170711,170712,170713,170714,170715,170716,170717,170718,170719,170720],{"id":168209,"depth":126,"text":168210},{"id":168250,"depth":126,"text":168251,"children":170700},[170701,170702],{"id":168254,"depth":131,"text":168255},{"id":168288,"depth":131,"text":168289},{"id":168402,"depth":126,"text":168403},{"id":168495,"depth":126,"text":168496,"children":170705},[170706,170707,170708,170709],{"id":168499,"depth":131,"text":168500},{"id":168586,"depth":131,"text":168587},{"id":168656,"depth":131,"text":168657},{"id":168750,"depth":131,"text":168751},{"id":168820,"depth":126,"text":168821},{"id":168883,"depth":126,"text":168884},{"id":169044,"depth":126,"text":169045},{"id":169107,"depth":126,"text":169108},{"id":169223,"depth":126,"text":169224},{"id":169433,"depth":126,"text":169434},{"id":169745,"depth":126,"text":169746},{"id":170156,"depth":126,"text":170157},{"id":170374,"depth":126,"text":170375},{"id":170622,"depth":126,"text":170623},{"id":170660,"depth":126,"text":170661},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168201,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170727,"title":170728,"body":170729,"description":132,"extension":133,"meta":172915,"navigation":135,"path":172916,"seo":172917,"stem":172918,"__hash__":172919},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170730,"toc":172882},[170731,170734,170738,170741,170744,170836,170838,170857,170862,170866,170869,170872,170901,170908,170911,170915,170918,170947,170949,171001,171007,171060,171064,171162,171165,171232,171236,171293,171295,171301,171305,171310,171316,171407,171412,171416,171419,171497,171500,171538,171542,171660,171663,171667,171670,171715,171718,171722,171727,171733,171783,171786,171817,171821,171825,171855,171859,171894,171898,171933,171973,171977,171993,171996,172000,172004,172083,172087,172128,172132,172187,172191,172225,172229,172259,172268,172275,172281,172338,172341,172349,172352,172356,172363,172366,172372,172375,172392,172397,172401,172407,172420,172423,172460,172463,172474,172477,172491,172494,172508,172512,172519,172552,172555,172557,172563,172566,172570,172572,172578,172583,172756,172760,172823,172827,172851,172855,172879],[10,170732,170728],{"id":170733},"_9-异常模块与包",[14,170735,170737],{"id":170736},"_91-什么是异常","9.1 什么是异常",[19,170739,170740],{},"异常是程序运行过程中出现的错误。",[19,170742,170743],{},"常见异常：",[352,170745,170746,170755],{},[355,170747,170748],{},[358,170749,170750,170753],{},[361,170751,170752],{},"异常",[361,170754,25955],{},[398,170756,170757,170767,170777,170786,170796,170806,170816,170826],{},[358,170758,170759,170764],{},[403,170760,170761],{},[81,170762,170763],{},"NameError",[403,170765,170766],{},"使用了未定义变量",[358,170768,170769,170774],{},[403,170770,170771],{},[81,170772,170773],{},"TypeError",[403,170775,170776],{},"类型不匹配",[358,170778,170779,170783],{},[403,170780,170781],{},[81,170782,154879],{},[403,170784,170785],{},"值不合法",[358,170787,170788,170793],{},[403,170789,170790],{},[81,170791,170792],{},"IndexError",[403,170794,170795],{},"列表索引越界",[358,170797,170798,170803],{},[403,170799,170800],{},[81,170801,170802],{},"KeyError",[403,170804,170805],{},"字典 key 不存在",[358,170807,170808,170813],{},[403,170809,170810],{},[81,170811,170812],{},"FileNotFoundError",[403,170814,170815],{},"文件不存在",[358,170817,170818,170823],{},[403,170819,170820],{},[81,170821,170822],{},"ZeroDivisionError",[403,170824,170825],{},"除数为 0",[358,170827,170828,170833],{},[403,170829,170830],{},[81,170831,170832],{},"ImportError",[403,170834,170835],{},"导入失败",[19,170837,15222],{},[196,170839,170841],{"className":30464,"code":170840,"language":30466,"meta":125,"style":125},"num = int(\"abc\")\n",[81,170842,170843],{"__ignoreMap":125},[204,170844,170845,170847,170849,170851,170853,170855],{"class":206,"line":207},[204,170846,155832],{"class":214},[204,170848,260],{"class":210},[204,170850,2468],{"class":263},[204,170852,215],{"class":214},[204,170854,155925],{"class":319},[204,170856,221],{"class":214},[19,170858,170859,170860,28471],{},"会触发 ",[81,170861,154879],{},[14,170863,170865],{"id":170864},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170867,170868],{},"如果不处理异常，程序会直接终止。",[19,170870,170871],{},"例如用户输入年龄：",[196,170873,170875],{"className":30464,"code":170874,"language":30466,"meta":125,"style":125},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[81,170876,170877,170895],{"__ignoreMap":125},[204,170878,170879,170881,170883,170885,170887,170889,170891,170893],{"class":206,"line":207},[204,170880,146591],{"class":214},[204,170882,260],{"class":210},[204,170884,2468],{"class":263},[204,170886,215],{"class":214},[204,170888,53907],{"class":263},[204,170890,215],{"class":214},[204,170892,152439],{"class":319},[204,170894,30583],{"class":214},[204,170896,170897,170899],{"class":206,"line":126},[204,170898,30501],{"class":263},[204,170900,155806],{"class":214},[19,170902,170903,170904,170907],{},"用户输入 ",[81,170905,170906],{},"abc","，程序就会报错退出。",[19,170909,170910],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170912,170914],{"id":170913},"_93-try-except","9.3 try except",[19,170916,170917],{},"基础语法：",[196,170919,170921],{"className":30464,"code":170920,"language":30466,"meta":125,"style":125},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[81,170922,170923,170930,170935,170942],{"__ignoreMap":125},[204,170924,170925,170928],{"class":206,"line":207},[204,170926,170927],{"class":210},"try",[204,170929,3825],{"class":214},[204,170931,170932],{"class":206,"line":126},[204,170933,170934],{"class":214},"    可能出错的代码\n",[204,170936,170937,170940],{"class":206,"line":131},[204,170938,170939],{"class":210},"except",[204,170941,3825],{"class":214},[204,170943,170944],{"class":206,"line":1281},[204,170945,170946],{"class":214},"    出错后的处理代码\n",[19,170948,15222],{},[196,170950,170952],{"className":30464,"code":170951,"language":30466,"meta":125,"style":125},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[81,170953,170954,170960,170978,170984,170990],{"__ignoreMap":125},[204,170955,170956,170958],{"class":206,"line":207},[204,170957,170927],{"class":210},[204,170959,3825],{"class":214},[204,170961,170962,170964,170966,170968,170970,170972,170974,170976],{"class":206,"line":126},[204,170963,152431],{"class":214},[204,170965,260],{"class":210},[204,170967,2468],{"class":263},[204,170969,215],{"class":214},[204,170971,53907],{"class":263},[204,170973,215],{"class":214},[204,170975,152439],{"class":319},[204,170977,30583],{"class":214},[204,170979,170980,170982],{"class":206,"line":131},[204,170981,31385],{"class":263},[204,170983,155806],{"class":214},[204,170985,170986,170988],{"class":206,"line":1281},[204,170987,170939],{"class":210},[204,170989,3825],{"class":214},[204,170991,170992,170994,170996,170999],{"class":206,"line":1287},[204,170993,31385],{"class":263},[204,170995,215],{"class":214},[204,170997,170998],{"class":319},"\"年龄必须是数字\"",[204,171000,221],{"class":214},[19,171002,171003,171004,171006],{},"不建议裸写 ",[81,171005,170939],{},"，最好指定异常类型。",[196,171008,171010],{"className":30464,"code":171009,"language":30466,"meta":125,"style":125},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[81,171011,171012,171018,171036,171042,171050],{"__ignoreMap":125},[204,171013,171014,171016],{"class":206,"line":207},[204,171015,170927],{"class":210},[204,171017,3825],{"class":214},[204,171019,171020,171022,171024,171026,171028,171030,171032,171034],{"class":206,"line":126},[204,171021,152431],{"class":214},[204,171023,260],{"class":210},[204,171025,2468],{"class":263},[204,171027,215],{"class":214},[204,171029,53907],{"class":263},[204,171031,215],{"class":214},[204,171033,152439],{"class":319},[204,171035,30583],{"class":214},[204,171037,171038,171040],{"class":206,"line":131},[204,171039,31385],{"class":263},[204,171041,155806],{"class":214},[204,171043,171044,171046,171048],{"class":206,"line":1281},[204,171045,170939],{"class":210},[204,171047,152271],{"class":263},[204,171049,3825],{"class":214},[204,171051,171052,171054,171056,171058],{"class":206,"line":1287},[204,171053,31385],{"class":263},[204,171055,215],{"class":214},[204,171057,170998],{"class":319},[204,171059,221],{"class":214},[14,171061,171063],{"id":171062},"_94-捕获多个异常","9.4 捕获多个异常",[196,171065,171067],{"className":30464,"code":171066,"language":30466,"meta":125,"style":125},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[81,171068,171069,171075,171096,171116,171123,171131,171142,171151],{"__ignoreMap":125},[204,171070,171071,171073],{"class":206,"line":207},[204,171072,170927],{"class":210},[204,171074,3825],{"class":214},[204,171076,171077,171080,171082,171084,171086,171088,171090,171092,171094],{"class":206,"line":126},[204,171078,171079],{"class":214},"    nums ",[204,171081,260],{"class":210},[204,171083,52312],{"class":214},[204,171085,431],{"class":263},[204,171087,12522],{"class":214},[204,171089,292],{"class":263},[204,171091,12522],{"class":214},[204,171093,286],{"class":263},[204,171095,33332],{"class":214},[204,171097,171098,171101,171103,171105,171107,171109,171111,171114],{"class":206,"line":131},[204,171099,171100],{"class":214},"    index ",[204,171102,260],{"class":210},[204,171104,2468],{"class":263},[204,171106,215],{"class":214},[204,171108,53907],{"class":263},[204,171110,215],{"class":214},[204,171112,171113],{"class":319},"\"请输入索引:\"",[204,171115,30583],{"class":214},[204,171117,171118,171120],{"class":206,"line":1281},[204,171119,31385],{"class":263},[204,171121,171122],{"class":214},"(nums[index])\n",[204,171124,171125,171127,171129],{"class":206,"line":1287},[204,171126,170939],{"class":210},[204,171128,152271],{"class":263},[204,171130,3825],{"class":214},[204,171132,171133,171135,171137,171140],{"class":206,"line":1301},[204,171134,31385],{"class":263},[204,171136,215],{"class":214},[204,171138,171139],{"class":319},"\"索引必须是整数\"",[204,171141,221],{"class":214},[204,171143,171144,171146,171149],{"class":206,"line":1307},[204,171145,170939],{"class":210},[204,171147,171148],{"class":263}," IndexError",[204,171150,3825],{"class":214},[204,171152,171153,171155,171157,171160],{"class":206,"line":1398},[204,171154,31385],{"class":263},[204,171156,215],{"class":214},[204,171158,171159],{"class":319},"\"索引越界\"",[204,171161,221],{"class":214},[19,171163,171164],{},"多个异常使用相同处理逻辑：",[196,171166,171168],{"className":30464,"code":171167,"language":30466,"meta":125,"style":125},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[81,171169,171170,171176,171194,171207,171221],{"__ignoreMap":125},[204,171171,171172,171174],{"class":206,"line":207},[204,171173,170927],{"class":210},[204,171175,3825],{"class":214},[204,171177,171178,171180,171182,171184,171186,171188,171190,171192],{"class":206,"line":126},[204,171179,45679],{"class":214},[204,171181,260],{"class":210},[204,171183,2468],{"class":263},[204,171185,215],{"class":214},[204,171187,53907],{"class":263},[204,171189,215],{"class":214},[204,171191,155841],{"class":319},[204,171193,30583],{"class":214},[204,171195,171196,171198,171200,171202,171204],{"class":206,"line":131},[204,171197,31385],{"class":263},[204,171199,215],{"class":214},[204,171201,659],{"class":263},[204,171203,156091],{"class":210},[204,171205,171206],{"class":214}," num)\n",[204,171208,171209,171211,171213,171215,171217,171219],{"class":206,"line":1281},[204,171210,170939],{"class":210},[204,171212,1744],{"class":214},[204,171214,154879],{"class":263},[204,171216,12522],{"class":214},[204,171218,170822],{"class":263},[204,171220,30872],{"class":214},[204,171222,171223,171225,171227,171230],{"class":206,"line":1287},[204,171224,31385],{"class":263},[204,171226,215],{"class":214},[204,171228,171229],{"class":319},"\"输入不合法\"",[204,171231,221],{"class":214},[14,171233,171235],{"id":171234},"_95-获取异常信息","9.5 获取异常信息",[196,171237,171239],{"className":30464,"code":171238,"language":30466,"meta":125,"style":125},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[81,171240,171241,171247,171261,171272],{"__ignoreMap":125},[204,171242,171243,171245],{"class":206,"line":207},[204,171244,170927],{"class":210},[204,171246,3825],{"class":214},[204,171248,171249,171251,171253,171255,171257,171259],{"class":206,"line":126},[204,171250,45679],{"class":214},[204,171252,260],{"class":210},[204,171254,2468],{"class":263},[204,171256,215],{"class":214},[204,171258,155925],{"class":319},[204,171260,221],{"class":214},[204,171262,171263,171265,171267,171269],{"class":206,"line":131},[204,171264,170939],{"class":210},[204,171266,152271],{"class":263},[204,171268,64690],{"class":210},[204,171270,171271],{"class":214}," e:\n",[204,171273,171274,171276,171278,171280,171283,171285,171287,171289,171291],{"class":206,"line":1281},[204,171275,31385],{"class":263},[204,171277,215],{"class":214},[204,171279,267],{"class":210},[204,171281,171282],{"class":319},"\"出错了:",[204,171284,1109],{"class":263},[204,171286,289],{"class":214},[204,171288,1159],{"class":263},[204,171290,464],{"class":319},[204,171292,221],{"class":214},[19,171294,146502],{},[196,171296,171299],{"className":171297,"code":171298,"language":5274,"meta":125},[5272],"出错了:invalid literal for int() with base 10: 'abc'\n",[81,171300,171298],{"__ignoreMap":125},[14,171302,171304],{"id":171303},"_96-else和finally","9.6 else和finally",[19,171306,171307,171309],{},[81,171308,1787],{},"：没有异常时执行。",[19,171311,171312,171315],{},[81,171313,171314],{},"finally","：无论是否异常都会执行。",[196,171317,171319],{"className":30464,"code":171318,"language":30466,"meta":125,"style":125},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[81,171320,171321,171327,171345,171353,171363,171369,171390,171396],{"__ignoreMap":125},[204,171322,171323,171325],{"class":206,"line":207},[204,171324,170927],{"class":210},[204,171326,3825],{"class":214},[204,171328,171329,171331,171333,171335,171337,171339,171341,171343],{"class":206,"line":126},[204,171330,45679],{"class":214},[204,171332,260],{"class":210},[204,171334,2468],{"class":263},[204,171336,215],{"class":214},[204,171338,53907],{"class":263},[204,171340,215],{"class":214},[204,171342,155841],{"class":319},[204,171344,30583],{"class":214},[204,171346,171347,171349,171351],{"class":206,"line":131},[204,171348,170939],{"class":210},[204,171350,152271],{"class":263},[204,171352,3825],{"class":214},[204,171354,171355,171357,171359,171361],{"class":206,"line":1281},[204,171356,31385],{"class":263},[204,171358,215],{"class":214},[204,171360,153259],{"class":319},[204,171362,221],{"class":214},[204,171364,171365,171367],{"class":206,"line":1287},[204,171366,1787],{"class":210},[204,171368,3825],{"class":214},[204,171370,171371,171373,171375,171377,171380,171382,171384,171386,171388],{"class":206,"line":1301},[204,171372,31385],{"class":263},[204,171374,215],{"class":214},[204,171376,267],{"class":210},[204,171378,171379],{"class":319},"\"输入正确:",[204,171381,1109],{"class":263},[204,171383,1751],{"class":214},[204,171385,1159],{"class":263},[204,171387,464],{"class":319},[204,171389,221],{"class":214},[204,171391,171392,171394],{"class":206,"line":1307},[204,171393,171314],{"class":210},[204,171395,3825],{"class":214},[204,171397,171398,171400,171402,171405],{"class":206,"line":1398},[204,171399,31385],{"class":263},[204,171401,215],{"class":214},[204,171403,171404],{"class":319},"\"程序结束\"",[204,171406,221],{"class":214},[19,171408,171409,171411],{},[81,171410,171314],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171413,171415],{"id":171414},"_97-抛出异常","9.7 抛出异常",[19,171417,171418],{},"程序可以主动抛出异常。",[196,171420,171422],{"className":30464,"code":171421,"language":30466,"meta":125,"style":125},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[81,171423,171424,171433,171445,171458,171478,171482,171486],{"__ignoreMap":125},[204,171425,171426,171428,171431],{"class":206,"line":207},[204,171427,32033],{"class":210},[204,171429,171430],{"class":2049}," set_age",[204,171432,161460],{"class":214},[204,171434,171435,171437,171439,171441,171443],{"class":206,"line":126},[204,171436,3187],{"class":210},[204,171438,15794],{"class":214},[204,171440,1123],{"class":210},[204,171442,4179],{"class":263},[204,171444,3825],{"class":214},[204,171446,171447,171449,171451,171453,171456],{"class":206,"line":131},[204,171448,103517],{"class":210},[204,171450,152271],{"class":263},[204,171452,215],{"class":214},[204,171454,171455],{"class":319},"\"年龄不能为负数\"",[204,171457,221],{"class":214},[204,171459,171460,171462,171464,171466,171468,171470,171472,171474,171476],{"class":206,"line":1281},[204,171461,31385],{"class":263},[204,171463,215],{"class":214},[204,171465,267],{"class":210},[204,171467,162028],{"class":319},[204,171469,1109],{"class":263},[204,171471,70307],{"class":214},[204,171473,1159],{"class":263},[204,171475,464],{"class":319},[204,171477,221],{"class":214},[204,171479,171480],{"class":206,"line":1287},[204,171481,2486],{"emptyLinePlaceholder":135},[204,171483,171484],{"class":206,"line":1301},[204,171485,2486],{"emptyLinePlaceholder":135},[204,171487,171488,171491,171493,171495],{"class":206,"line":1307},[204,171489,171490],{"class":214},"set_age(",[204,171492,745],{"class":210},[204,171494,431],{"class":263},[204,171496,221],{"class":214},[19,171498,171499],{},"调用者可以捕获：",[196,171501,171503],{"className":30464,"code":171502,"language":30466,"meta":125,"style":125},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[81,171504,171505,171511,171522,171532],{"__ignoreMap":125},[204,171506,171507,171509],{"class":206,"line":207},[204,171508,170927],{"class":210},[204,171510,3825],{"class":214},[204,171512,171513,171516,171518,171520],{"class":206,"line":126},[204,171514,171515],{"class":214},"    set_age(",[204,171517,745],{"class":210},[204,171519,431],{"class":263},[204,171521,221],{"class":214},[204,171523,171524,171526,171528,171530],{"class":206,"line":131},[204,171525,170939],{"class":210},[204,171527,152271],{"class":263},[204,171529,64690],{"class":210},[204,171531,171271],{"class":214},[204,171533,171534,171536],{"class":206,"line":1281},[204,171535,31385],{"class":263},[204,171537,67085],{"class":214},[14,171539,171541],{"id":171540},"_98-自定义异常","9.8 自定义异常",[196,171543,171545],{"className":30464,"code":171544,"language":30466,"meta":125,"style":125},"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",[81,171546,171547,171561,171565,171569,171573,171581,171591,171602,171612,171616,171620,171626,171643,171654],{"__ignoreMap":125},[204,171548,171549,171551,171554,171556,171559],{"class":206,"line":207},[204,171550,14781],{"class":210},[204,171552,171553],{"class":2049}," BalanceNotEnoughError",[204,171555,215],{"class":214},[204,171557,171558],{"class":263},"Exception",[204,171560,30872],{"class":214},[204,171562,171563],{"class":206,"line":126},[204,171564,149582],{"class":210},[204,171566,171567],{"class":206,"line":131},[204,171568,2486],{"emptyLinePlaceholder":135},[204,171570,171571],{"class":206,"line":1281},[204,171572,2486],{"emptyLinePlaceholder":135},[204,171574,171575,171577,171579],{"class":206,"line":1287},[204,171576,32033],{"class":210},[204,171578,150231],{"class":2049},[204,171580,162857],{"class":214},[204,171582,171583,171585,171587,171589],{"class":206,"line":1301},[204,171584,3187],{"class":210},[204,171586,150187],{"class":214},[204,171588,1173],{"class":210},[204,171590,162634],{"class":214},[204,171592,171593,171595,171598,171600],{"class":206,"line":1307},[204,171594,103517],{"class":210},[204,171596,171597],{"class":214}," BalanceNotEnoughError(",[204,171599,150282],{"class":319},[204,171601,221],{"class":214},[204,171603,171604,171606,171608,171610],{"class":206,"line":1398},[204,171605,4176],{"class":210},[204,171607,162864],{"class":214},[204,171609,745],{"class":210},[204,171611,150220],{"class":214},[204,171613,171614],{"class":206,"line":1404},[204,171615,2486],{"emptyLinePlaceholder":135},[204,171617,171618],{"class":206,"line":1416},[204,171619,2486],{"emptyLinePlaceholder":135},[204,171621,171622,171624],{"class":206,"line":1698},[204,171623,170927],{"class":210},[204,171625,3825],{"class":214},[204,171627,171628,171630,171632,171635,171637,171639,171641],{"class":206,"line":1703},[204,171629,162535],{"class":214},[204,171631,260],{"class":210},[204,171633,171634],{"class":214}," withdraw(",[204,171636,524],{"class":263},[204,171638,12522],{"class":214},[204,171640,1808],{"class":263},[204,171642,221],{"class":214},[204,171644,171645,171647,171650,171652],{"class":206,"line":1709},[204,171646,170939],{"class":210},[204,171648,171649],{"class":214}," BalanceNotEnoughError ",[204,171651,31469],{"class":210},[204,171653,171271],{"class":214},[204,171655,171656,171658],{"class":206,"line":1714},[204,171657,31385],{"class":263},[204,171659,67085],{"class":214},[19,171661,171662],{},"入门阶段大多数情况使用内置异常即可。",[14,171664,171666],{"id":171665},"_99-traceback","9.9 traceback",[19,171668,171669],{},"调试时可以输出完整异常堆栈。",[196,171671,171673],{"className":30464,"code":171672,"language":30466,"meta":125,"style":125},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[81,171674,171675,171682,171686,171692,171702,171710],{"__ignoreMap":125},[204,171676,171677,171679],{"class":206,"line":207},[204,171678,30478],{"class":210},[204,171680,171681],{"class":214}," traceback\n",[204,171683,171684],{"class":206,"line":126},[204,171685,2486],{"emptyLinePlaceholder":135},[204,171687,171688,171690],{"class":206,"line":131},[204,171689,170927],{"class":210},[204,171691,3825],{"class":214},[204,171693,171694,171696,171698,171700],{"class":206,"line":1281},[204,171695,2071],{"class":263},[204,171697,215],{"class":214},[204,171699,155925],{"class":319},[204,171701,221],{"class":214},[204,171703,171704,171706,171708],{"class":206,"line":1287},[204,171705,170939],{"class":210},[204,171707,152271],{"class":263},[204,171709,3825],{"class":214},[204,171711,171712],{"class":206,"line":1301},[204,171713,171714],{"class":214},"    traceback.print_exc()\n",[19,171716,171717],{},"日志系统中常把异常堆栈记录到文件。",[14,171719,171721],{"id":171720},"_910-什么是模块","9.10 什么是模块",[19,171723,171724,171725,126068],{},"模块就是一个 ",[81,171726,146397],{},[19,171728,171729,171730,24705],{},"例如创建 ",[81,171731,171732],{},"my_math.py",[196,171734,171736],{"className":30464,"code":171735,"language":30466,"meta":125,"style":125},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[81,171737,171738,171746,171756,171760,171764,171773],{"__ignoreMap":125},[204,171739,171740,171742,171744],{"class":206,"line":207},[204,171741,32033],{"class":210},[204,171743,5296],{"class":2049},[204,171745,151138],{"class":214},[204,171747,171748,171750,171752,171754],{"class":206,"line":126},[204,171749,4176],{"class":210},[204,171751,10956],{"class":214},[204,171753,694],{"class":210},[204,171755,151149],{"class":214},[204,171757,171758],{"class":206,"line":131},[204,171759,2486],{"emptyLinePlaceholder":135},[204,171761,171762],{"class":206,"line":1281},[204,171763,2486],{"emptyLinePlaceholder":135},[204,171765,171766,171768,171771],{"class":206,"line":1287},[204,171767,32033],{"class":210},[204,171769,171770],{"class":2049}," sub",[204,171772,151138],{"class":214},[204,171774,171775,171777,171779,171781],{"class":206,"line":1301},[204,171776,4176],{"class":210},[204,171778,10956],{"class":214},[204,171780,745],{"class":210},[204,171782,151149],{"class":214},[19,171784,171785],{},"在另一个文件中导入：",[196,171787,171789],{"className":30464,"code":171788,"language":30466,"meta":125,"style":125},"import my_math\n\nprint(my_math.add(1, 2))\n",[81,171790,171791,171798,171802],{"__ignoreMap":125},[204,171792,171793,171795],{"class":206,"line":207},[204,171794,30478],{"class":210},[204,171796,171797],{"class":214}," my_math\n",[204,171799,171800],{"class":206,"line":126},[204,171801,2486],{"emptyLinePlaceholder":135},[204,171803,171804,171806,171809,171811,171813,171815],{"class":206,"line":131},[204,171805,30501],{"class":263},[204,171807,171808],{"class":214},"(my_math.add(",[204,171810,431],{"class":263},[204,171812,12522],{"class":214},[204,171814,292],{"class":263},[204,171816,30583],{"class":214},[14,171818,171820],{"id":171819},"_911-import导入","9.11 import导入",[49,171822,171824],{"id":171823},"_9111-导入模块","9.11.1 导入模块",[196,171826,171828],{"className":30464,"code":171827,"language":30466,"meta":125,"style":125},"import random\n\nprint(random.randint(1, 10))\n",[81,171829,171830,171836,171840],{"__ignoreMap":125},[204,171831,171832,171834],{"class":206,"line":207},[204,171833,30478],{"class":210},[204,171835,45414],{"class":214},[204,171837,171838],{"class":206,"line":126},[204,171839,2486],{"emptyLinePlaceholder":135},[204,171841,171842,171844,171847,171849,171851,171853],{"class":206,"line":131},[204,171843,30501],{"class":263},[204,171845,171846],{"class":214},"(random.randint(",[204,171848,431],{"class":263},[204,171850,12522],{"class":214},[204,171852,659],{"class":263},[204,171854,30583],{"class":214},[49,171856,171858],{"id":171857},"_9112-导入指定内容","9.11.2 导入指定内容",[196,171860,171862],{"className":30464,"code":171861,"language":30466,"meta":125,"style":125},"from random import randint\n\nprint(randint(1, 10))\n",[81,171863,171864,171875,171879],{"__ignoreMap":125},[204,171865,171866,171868,171870,171872],{"class":206,"line":207},[204,171867,30823],{"class":210},[204,171869,57882],{"class":214},[204,171871,30478],{"class":210},[204,171873,171874],{"class":214}," randint\n",[204,171876,171877],{"class":206,"line":126},[204,171878,2486],{"emptyLinePlaceholder":135},[204,171880,171881,171883,171886,171888,171890,171892],{"class":206,"line":131},[204,171882,30501],{"class":263},[204,171884,171885],{"class":214},"(randint(",[204,171887,431],{"class":263},[204,171889,12522],{"class":214},[204,171891,659],{"class":263},[204,171893,30583],{"class":214},[49,171895,171897],{"id":171896},"_9113-起别名","9.11.3 起别名",[196,171899,171901],{"className":30464,"code":171900,"language":30466,"meta":125,"style":125},"import random as rd\n\nprint(rd.randint(1, 10))\n",[81,171902,171903,171914,171918],{"__ignoreMap":125},[204,171904,171905,171907,171909,171911],{"class":206,"line":207},[204,171906,30478],{"class":210},[204,171908,57882],{"class":214},[204,171910,31469],{"class":210},[204,171912,171913],{"class":214}," rd\n",[204,171915,171916],{"class":206,"line":126},[204,171917,2486],{"emptyLinePlaceholder":135},[204,171919,171920,171922,171925,171927,171929,171931],{"class":206,"line":131},[204,171921,30501],{"class":263},[204,171923,171924],{"class":214},"(rd.randint(",[204,171926,431],{"class":263},[204,171928,12522],{"class":214},[204,171930,659],{"class":263},[204,171932,30583],{"class":214},[196,171934,171936],{"className":30464,"code":171935,"language":30466,"meta":125,"style":125},"from random import randint as rint\n\nprint(rint(1, 10))\n",[81,171937,171938,171954,171958],{"__ignoreMap":125},[204,171939,171940,171942,171944,171946,171949,171951],{"class":206,"line":207},[204,171941,30823],{"class":210},[204,171943,57882],{"class":214},[204,171945,30478],{"class":210},[204,171947,171948],{"class":214}," randint ",[204,171950,31469],{"class":210},[204,171952,171953],{"class":214}," rint\n",[204,171955,171956],{"class":206,"line":126},[204,171957,2486],{"emptyLinePlaceholder":135},[204,171959,171960,171962,171965,171967,171969,171971],{"class":206,"line":131},[204,171961,30501],{"class":263},[204,171963,171964],{"class":214},"(rint(",[204,171966,431],{"class":263},[204,171968,12522],{"class":214},[204,171970,659],{"class":263},[204,171972,30583],{"class":214},[49,171974,171976],{"id":171975},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[196,171978,171980],{"className":30464,"code":171979,"language":30466,"meta":125,"style":125},"from random import *\n",[81,171981,171982],{"__ignoreMap":125},[204,171983,171984,171986,171988,171990],{"class":206,"line":207},[204,171985,30823],{"class":210},[204,171987,57882],{"class":214},[204,171989,30478],{"class":210},[204,171991,171992],{"class":210}," *\n",[19,171994,171995],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,171997,171999],{"id":171998},"_912-常用内置模块","9.12 常用内置模块",[49,172001,172003],{"id":172002},"_9121-random","9.12.1 random",[196,172005,172007],{"className":30464,"code":172006,"language":30466,"meta":125,"style":125},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[81,172008,172009,172015,172019,172033,172052],{"__ignoreMap":125},[204,172010,172011,172013],{"class":206,"line":207},[204,172012,30478],{"class":210},[204,172014,45414],{"class":214},[204,172016,172017],{"class":206,"line":126},[204,172018,2486],{"emptyLinePlaceholder":135},[204,172020,172021,172023,172025,172027,172029,172031],{"class":206,"line":131},[204,172022,30501],{"class":263},[204,172024,171846],{"class":214},[204,172026,431],{"class":263},[204,172028,12522],{"class":214},[204,172030,659],{"class":263},[204,172032,30583],{"class":214},[204,172034,172035,172037,172040,172042,172044,172046,172048,172050],{"class":206,"line":1281},[204,172036,30501],{"class":263},[204,172038,172039],{"class":214},"(random.choice([",[204,172041,149933],{"class":319},[204,172043,12522],{"class":214},[204,172045,150981],{"class":319},[204,172047,12522],{"class":214},[204,172049,159776],{"class":319},[204,172051,33229],{"class":214},[204,172053,172054,172056,172059,172061,172063,172065,172067,172069,172071,172073,172075,172077,172079,172081],{"class":206,"line":1287},[204,172055,30501],{"class":263},[204,172057,172058],{"class":214},"(random.sample([",[204,172060,431],{"class":263},[204,172062,12522],{"class":214},[204,172064,292],{"class":263},[204,172066,12522],{"class":214},[204,172068,286],{"class":263},[204,172070,12522],{"class":214},[204,172072,506],{"class":263},[204,172074,12522],{"class":214},[204,172076,532],{"class":263},[204,172078,112287],{"class":214},[204,172080,292],{"class":263},[204,172082,30583],{"class":214},[49,172084,172086],{"id":172085},"_9122-time","9.12.2 time",[196,172088,172090],{"className":30464,"code":172089,"language":30466,"meta":125,"style":125},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[81,172091,172092,172098,172102,172109,172117],{"__ignoreMap":125},[204,172093,172094,172096],{"class":206,"line":207},[204,172095,30478],{"class":210},[204,172097,31915],{"class":214},[204,172099,172100],{"class":206,"line":126},[204,172101,2486],{"emptyLinePlaceholder":135},[204,172103,172104,172106],{"class":206,"line":131},[204,172105,30501],{"class":263},[204,172107,172108],{"class":214},"(time.time())\n",[204,172110,172111,172113,172115],{"class":206,"line":1281},[204,172112,95157],{"class":214},[204,172114,431],{"class":263},[204,172116,221],{"class":214},[204,172118,172119,172121,172123,172126],{"class":206,"line":1287},[204,172120,30501],{"class":263},[204,172122,215],{"class":214},[204,172124,172125],{"class":319},"\"1秒后执行\"",[204,172127,221],{"class":214},[49,172129,172131],{"id":172130},"_9123-datetime","9.12.3 datetime",[196,172133,172135],{"className":30464,"code":172134,"language":30466,"meta":125,"style":125},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[81,172136,172137,172149,172153,172163,172170],{"__ignoreMap":125},[204,172138,172139,172141,172144,172146],{"class":206,"line":207},[204,172140,30823],{"class":210},[204,172142,172143],{"class":214}," datetime ",[204,172145,30478],{"class":210},[204,172147,172148],{"class":214}," datetime\n",[204,172150,172151],{"class":206,"line":126},[204,172152,2486],{"emptyLinePlaceholder":135},[204,172154,172155,172158,172160],{"class":206,"line":131},[204,172156,172157],{"class":214},"now ",[204,172159,260],{"class":210},[204,172161,172162],{"class":214}," datetime.now()\n",[204,172164,172165,172167],{"class":206,"line":1281},[204,172166,30501],{"class":263},[204,172168,172169],{"class":214},"(now)\n",[204,172171,172172,172174,172177,172180,172182,172185],{"class":206,"line":1287},[204,172173,30501],{"class":263},[204,172175,172176],{"class":214},"(now.strftime(",[204,172178,172179],{"class":319},"\"%Y-%m-",[204,172181,156736],{"class":263},[204,172183,172184],{"class":319}," %H:%M:%S\"",[204,172186,30583],{"class":214},[49,172188,172190],{"id":172189},"_9124-os","9.12.4 os",[196,172192,172194],{"className":30464,"code":172193,"language":30466,"meta":125,"style":125},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[81,172195,172196,172202,172206,172213],{"__ignoreMap":125},[204,172197,172198,172200],{"class":206,"line":207},[204,172199,30478],{"class":210},[204,172201,45391],{"class":214},[204,172203,172204],{"class":206,"line":126},[204,172205,2486],{"emptyLinePlaceholder":135},[204,172207,172208,172210],{"class":206,"line":131},[204,172209,30501],{"class":263},[204,172211,172212],{"class":214},"(os.getcwd())\n",[204,172214,172215,172217,172220,172223],{"class":206,"line":1281},[204,172216,30501],{"class":263},[204,172218,172219],{"class":214},"(os.listdir(",[204,172221,172222],{"class":319},"\".\"",[204,172224,30583],{"class":214},[49,172226,172228],{"id":172227},"_9125-sys","9.12.5 sys",[196,172230,172232],{"className":30464,"code":172231,"language":30466,"meta":125,"style":125},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[81,172233,172234,172241,172245,172252],{"__ignoreMap":125},[204,172235,172236,172238],{"class":206,"line":207},[204,172237,30478],{"class":210},[204,172239,172240],{"class":214}," sys\n",[204,172242,172243],{"class":206,"line":126},[204,172244,2486],{"emptyLinePlaceholder":135},[204,172246,172247,172249],{"class":206,"line":131},[204,172248,30501],{"class":263},[204,172250,172251],{"class":214},"(sys.version)\n",[204,172253,172254,172256],{"class":206,"line":1281},[204,172255,30501],{"class":263},[204,172257,172258],{"class":214},"(sys.path)\n",[14,172260,172262,172263,172265,172266,464],{"id":172261},"_913-if-name-main","9.13 if ",[30,172264,79896],{}," == \"",[30,172267,102143],{},[19,172269,172270,172271,172274],{},"模块被直接运行和被导入时，",[81,172272,172273],{},"__name__"," 的值不同。",[19,172276,172277,172278,24705],{},"创建 ",[81,172279,172280],{},"my_module.py",[196,172282,172284],{"className":30464,"code":172283,"language":30466,"meta":125,"style":125},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[81,172285,172286,172294,172304,172308,172312,172324],{"__ignoreMap":125},[204,172287,172288,172290,172292],{"class":206,"line":207},[204,172289,32033],{"class":210},[204,172291,5296],{"class":2049},[204,172293,151138],{"class":214},[204,172295,172296,172298,172300,172302],{"class":206,"line":126},[204,172297,4176],{"class":210},[204,172299,10956],{"class":214},[204,172301,694],{"class":210},[204,172303,151149],{"class":214},[204,172305,172306],{"class":206,"line":131},[204,172307,2486],{"emptyLinePlaceholder":135},[204,172309,172310],{"class":206,"line":1281},[204,172311,2486],{"emptyLinePlaceholder":135},[204,172313,172314,172316,172318,172320,172322],{"class":206,"line":1287},[204,172315,1617],{"class":210},[204,172317,31306],{"class":263},[204,172319,101644],{"class":210},[204,172321,101647],{"class":319},[204,172323,3825],{"class":214},[204,172325,172326,172328,172330,172332,172334,172336],{"class":206,"line":1301},[204,172327,31385],{"class":263},[204,172329,166645],{"class":214},[204,172331,431],{"class":263},[204,172333,12522],{"class":214},[204,172335,292],{"class":263},[204,172337,30583],{"class":214},[19,172339,172340],{},"作用：",[161,172342,172343,172346],{},[71,172344,172345],{},"直接运行该文件时，执行测试代码。",[71,172347,172348],{},"被其他文件导入时，不执行测试代码。",[19,172350,172351],{},"这是写模块时很常用的习惯。",[14,172353,172355],{"id":172354},"_914-包","9.14 包",[19,172357,172358,172359,172362],{},"包是包含 ",[81,172360,172361],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172364,172365],{},"目录结构：",[196,172367,172370],{"className":172368,"code":172369,"language":5274,"meta":125},[5272],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[81,172371,172369],{"__ignoreMap":125},[19,172373,172374],{},"导入：",[196,172376,172378],{"className":30464,"code":172377,"language":30466,"meta":125,"style":125},"from utils.file_utils import read_file\n",[81,172379,172380],{"__ignoreMap":125},[204,172381,172382,172384,172387,172389],{"class":206,"line":207},[204,172383,30823],{"class":210},[204,172385,172386],{"class":214}," utils.file_utils ",[204,172388,30478],{"class":210},[204,172390,172391],{"class":214}," read_file\n",[19,172393,172394,172396],{},[81,172395,172361],{}," 可以为空，也可以写包初始化逻辑。",[14,172398,172400],{"id":172399},"_915-第三方包","9.15 第三方包",[19,172402,172403,172404,172406],{},"第三方包通过 ",[81,172405,23918],{}," 安装。",[196,172408,172410],{"className":23909,"code":172409,"language":23911,"meta":125,"style":125},"pip install requests\n",[81,172411,172412],{"__ignoreMap":125},[204,172413,172414,172416,172418],{"class":206,"line":207},[204,172415,23918],{"class":2049},[204,172417,23921],{"class":319},[204,172419,146143],{"class":319},[19,172421,172422],{},"使用：",[196,172424,172426],{"className":30464,"code":172425,"language":30466,"meta":125,"style":125},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[81,172427,172428,172434,172438,172453],{"__ignoreMap":125},[204,172429,172430,172432],{"class":206,"line":207},[204,172431,30478],{"class":210},[204,172433,146143],{"class":214},[204,172435,172436],{"class":206,"line":126},[204,172437,2486],{"emptyLinePlaceholder":135},[204,172439,172440,172443,172445,172448,172451],{"class":206,"line":131},[204,172441,172442],{"class":214},"response ",[204,172444,260],{"class":210},[204,172446,172447],{"class":214}," requests.get(",[204,172449,172450],{"class":319},"\"https:\u002F\u002Fwww.example.com\"",[204,172452,221],{"class":214},[204,172454,172455,172457],{"class":206,"line":1281},[204,172456,30501],{"class":263},[204,172458,172459],{"class":214},"(response.status_code)\n",[19,172461,172462],{},"查看已安装包：",[196,172464,172466],{"className":23909,"code":172465,"language":23911,"meta":125,"style":125},"pip list\n",[81,172467,172468],{"__ignoreMap":125},[204,172469,172470,172472],{"class":206,"line":207},[204,172471,23918],{"class":2049},[204,172473,119040],{"class":319},[19,172475,172476],{},"导出项目依赖：",[196,172478,172479],{"className":23909,"code":146338,"language":23911,"meta":125,"style":125},[81,172480,172481],{"__ignoreMap":125},[204,172482,172483,172485,172487,172489],{"class":206,"line":207},[204,172484,23918],{"class":2049},[204,172486,146347],{"class":319},[204,172488,26308],{"class":210},[204,172490,146352],{"class":319},[19,172492,172493],{},"安装项目依赖：",[196,172495,172496],{"className":23909,"code":146358,"language":23911,"meta":125,"style":125},[81,172497,172498],{"__ignoreMap":125},[204,172499,172500,172502,172504,172506],{"class":206,"line":207},[204,172501,23918],{"class":2049},[204,172503,23921],{"class":319},[204,172505,119724],{"class":263},[204,172507,146352],{"class":319},[14,172509,172511],{"id":172510},"_916-模块搜索路径","9.16 模块搜索路径",[19,172513,172514,172515,172518],{},"Python 导入模块时会在 ",[81,172516,172517],{},"sys.path"," 中查找。",[196,172520,172522],{"className":30464,"code":172521,"language":30466,"meta":125,"style":125},"import sys\n\nfor path in sys.path:\n    print(path)\n",[81,172523,172524,172530,172534,172546],{"__ignoreMap":125},[204,172525,172526,172528],{"class":206,"line":207},[204,172527,30478],{"class":210},[204,172529,172240],{"class":214},[204,172531,172532],{"class":206,"line":126},[204,172533,2486],{"emptyLinePlaceholder":135},[204,172535,172536,172538,172541,172543],{"class":206,"line":131},[204,172537,3111],{"class":210},[204,172539,172540],{"class":214}," path ",[204,172542,26129],{"class":210},[204,172544,172545],{"class":214}," sys.path:\n",[204,172547,172548,172550],{"class":206,"line":1281},[204,172549,31385],{"class":263},[204,172551,169274],{"class":214},[19,172553,172554],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172556,157668],{},[196,172558,172561],{"className":172559,"code":172560,"language":5274,"meta":125},[5272],"random.py\njson.py\ntime.py\n",[81,172562,172560],{"__ignoreMap":125},[19,172564,172565],{},"这些文件名可能导致导入异常。",[14,172567,172569],{"id":172568},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172571,172365],{},[196,172573,172576],{"className":172574,"code":172575,"language":5274,"meta":125},[5272],"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",[81,172577,172575],{"__ignoreMap":125},[19,172579,172580,24705],{},[81,172581,172582],{},"utils\u002Ffile_utils.py",[196,172584,172586],{"className":30464,"code":172585,"language":30466,"meta":125,"style":125},"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",[81,172587,172588,172594,172604,172608,172612,172622,172632,172640,172646,172650,172677,172687,172691,172695,172705,172731],{"__ignoreMap":125},[204,172589,172590,172592],{"class":206,"line":207},[204,172591,30478],{"class":210},[204,172593,147136],{"class":214},[204,172595,172596,172598,172600,172602],{"class":206,"line":126},[204,172597,30823],{"class":210},[204,172599,108396],{"class":214},[204,172601,30478],{"class":210},[204,172603,108401],{"class":214},[204,172605,172606],{"class":206,"line":131},[204,172607,2486],{"emptyLinePlaceholder":135},[204,172609,172610],{"class":206,"line":1281},[204,172611,2486],{"emptyLinePlaceholder":135},[204,172613,172614,172616,172619],{"class":206,"line":1287},[204,172615,32033],{"class":210},[204,172617,172618],{"class":2049}," read_json",[204,172620,172621],{"class":214},"(path):\n",[204,172623,172624,172627,172629],{"class":206,"line":1301},[204,172625,172626],{"class":214},"    path ",[204,172628,260],{"class":210},[204,172630,172631],{"class":214}," Path(path)\n",[204,172633,172634,172636,172638],{"class":206,"line":1307},[204,172635,3187],{"class":210},[204,172637,39016],{"class":210},[204,172639,169355],{"class":214},[204,172641,172642,172644],{"class":206,"line":1398},[204,172643,14839],{"class":210},[204,172645,51924],{"class":214},[204,172647,172648],{"class":206,"line":1404},[204,172649,2486],{"emptyLinePlaceholder":135},[204,172651,172652,172654,172656,172659,172661,172663,172665,172667,172669,172671,172673,172675],{"class":206,"line":1416},[204,172653,34264],{"class":210},[204,172655,146836],{"class":263},[204,172657,172658],{"class":214},"(path, ",[204,172660,146846],{"class":319},[204,172662,12522],{"class":214},[204,172664,146851],{"class":5303},[204,172666,260],{"class":210},[204,172668,146856],{"class":319},[204,172670,13801],{"class":214},[204,172672,31469],{"class":210},[204,172674,148198],{"class":5303},[204,172676,3825],{"class":214},[204,172678,172679,172681,172683,172685],{"class":206,"line":1698},[204,172680,14839],{"class":210},[204,172682,148209],{"class":214},[204,172684,45440],{"class":5303},[204,172686,221],{"class":214},[204,172688,172689],{"class":206,"line":1703},[204,172690,2486],{"emptyLinePlaceholder":135},[204,172692,172693],{"class":206,"line":1709},[204,172694,2486],{"emptyLinePlaceholder":135},[204,172696,172697,172699,172702],{"class":206,"line":1714},[204,172698,32033],{"class":210},[204,172700,172701],{"class":2049}," write_json",[204,172703,172704],{"class":214},"(path, data):\n",[204,172706,172707,172709,172711,172713,172715,172717,172719,172721,172723,172725,172727,172729],{"class":206,"line":1728},[204,172708,34264],{"class":210},[204,172710,146836],{"class":263},[204,172712,172658],{"class":214},[204,172714,152021],{"class":319},[204,172716,12522],{"class":214},[204,172718,146851],{"class":5303},[204,172720,260],{"class":210},[204,172722,146856],{"class":319},[204,172724,13801],{"class":214},[204,172726,31469],{"class":210},[204,172728,148198],{"class":5303},[204,172730,3825],{"class":214},[204,172732,172733,172736,172738,172740,172742,172744,172746,172748,172750,172752,172754],{"class":206,"line":1733},[204,172734,172735],{"class":214},"        json.dump(data, ",[204,172737,45440],{"class":5303},[204,172739,12522],{"class":214},[204,172741,147182],{"class":5303},[204,172743,260],{"class":210},[204,172745,34073],{"class":263},[204,172747,12522],{"class":214},[204,172749,152057],{"class":5303},[204,172751,260],{"class":210},[204,172753,292],{"class":263},[204,172755,221],{"class":214},[19,172757,172758,24705],{},[81,172759,154652],{},[196,172761,172763],{"className":30464,"code":172762,"language":30466,"meta":125,"style":125},"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",[81,172764,172765,172776,172780,172793,172813],{"__ignoreMap":125},[204,172766,172767,172769,172771,172773],{"class":206,"line":207},[204,172768,30823],{"class":210},[204,172770,172386],{"class":214},[204,172772,30478],{"class":210},[204,172774,172775],{"class":214}," read_json, write_json\n",[204,172777,172778],{"class":206,"line":126},[204,172779,2486],{"emptyLinePlaceholder":135},[204,172781,172782,172784,172786,172789,172791],{"class":206,"line":131},[204,172783,159761],{"class":214},[204,172785,260],{"class":210},[204,172787,172788],{"class":214}," read_json(",[204,172790,151876],{"class":319},[204,172792,221],{"class":214},[204,172794,172795,172797,172799,172801,172803,172805,172807,172809,172811],{"class":206,"line":1281},[204,172796,170579],{"class":214},[204,172798,62765],{"class":319},[204,172800,51523],{"class":214},[204,172802,149933],{"class":319},[204,172804,12522],{"class":214},[204,172806,151517],{"class":319},[204,172808,51523],{"class":214},[204,172810,1202],{"class":263},[204,172812,165197],{"class":214},[204,172814,172815,172818,172820],{"class":206,"line":1287},[204,172816,172817],{"class":214},"write_json(",[204,172819,151876],{"class":319},[204,172821,172822],{"class":214},", students)\n",[14,172824,172826],{"id":172825},"_918-易错点","9.18 易错点",[161,172828,172829,172832,172837,172842,172845,172848],{},[71,172830,172831],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[71,172833,172834,172835,28471],{},"能指定异常类型就不要裸写 ",[81,172836,170939],{},[71,172838,172839,172841],{},[81,172840,171314],{}," 无论是否出错都会执行。",[71,172843,172844],{},"模块文件名不要和标准库重名。",[71,172846,172847],{},"导入自己写的模块时，要注意运行目录。",[71,172849,172850],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172852,172854],{"id":172853},"_919-本章练习","9.19 本章练习",[161,172856,172857,172860,172863,172869,172876],{},[71,172858,172859],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[71,172861,172862],{},"写函数读取文件，如果文件不存在则返回空字符串。",[71,172864,172277,172865,172868],{},[81,172866,172867],{},"math_utils.py","，实现加减乘除函数并导入使用。",[71,172870,172871,172872,172875],{},"创建一个 ",[81,172873,172874],{},"utils"," 包，把 JSON 读写函数放进去。",[71,172877,172878],{},"写一个程序，捕获除零异常和输入格式异常。",[5213,172880,172881],{},"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":125,"searchDepth":126,"depth":126,"links":172883},[172884,172885,172886,172887,172888,172889,172890,172891,172892,172893,172894,172900,172907,172909,172910,172911,172912,172913,172914],{"id":170736,"depth":126,"text":170737},{"id":170864,"depth":126,"text":170865},{"id":170913,"depth":126,"text":170914},{"id":171062,"depth":126,"text":171063},{"id":171234,"depth":126,"text":171235},{"id":171303,"depth":126,"text":171304},{"id":171414,"depth":126,"text":171415},{"id":171540,"depth":126,"text":171541},{"id":171665,"depth":126,"text":171666},{"id":171720,"depth":126,"text":171721},{"id":171819,"depth":126,"text":171820,"children":172895},[172896,172897,172898,172899],{"id":171823,"depth":131,"text":171824},{"id":171857,"depth":131,"text":171858},{"id":171896,"depth":131,"text":171897},{"id":171975,"depth":131,"text":171976},{"id":171998,"depth":126,"text":171999,"children":172901},[172902,172903,172904,172905,172906],{"id":172002,"depth":131,"text":172003},{"id":172085,"depth":131,"text":172086},{"id":172130,"depth":131,"text":172131},{"id":172189,"depth":131,"text":172190},{"id":172227,"depth":131,"text":172228},{"id":172261,"depth":126,"text":172908},"9.13 if name == \"main\"",{"id":172354,"depth":126,"text":172355},{"id":172399,"depth":126,"text":172400},{"id":172510,"depth":126,"text":172511},{"id":172568,"depth":126,"text":172569},{"id":172825,"depth":126,"text":172826},{"id":172853,"depth":126,"text":172854},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170728,"description":132},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172921,"title":172922,"body":172923,"description":173086,"extension":133,"meta":173087,"navigation":135,"path":173088,"seo":173089,"stem":173090,"__hash__":173091},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172924,"toc":173081},[172925,172928,172931,172934,172945,172947,173021,173024,173027,173030,173033,173036,173039,173042,173045,173048,173051],[10,172926,172922],{"id":172927},"python教程",[19,172929,172930],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,172932,172933],{},"建议学习环境：",[161,172935,172936,172939,172942],{},[71,172937,172938],{},"Python 版本：Python 3.10 及以上。",[71,172940,172941],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[71,172943,172944],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,172946,117163],{"id":117163},[161,172948,172949,172955,172961,172967,172973,172979,172985,172991,172997,173003,173009,173015],{},[71,172950,172951],{},[62,172952,172954],{"href":172953},".\u002Fch1-Python","Python环境与第一个程序",[71,172956,172957],{},[62,172958,172960],{"href":172959},".\u002Fch2","基础语法、变量与字符串",[71,172962,172963],{},[62,172964,172966],{"href":172965},".\u002Fch3","判断语句",[71,172968,172969],{},[62,172970,172972],{"href":172971},".\u002Fch4","循环语句",[71,172974,172975],{},[62,172976,172978],{"href":172977},".\u002Fch5","函数基础",[71,172980,172981],{},[62,172982,172984],{"href":172983},".\u002Fch6","数据容器",[71,172986,172987],{},[62,172988,172990],{"href":172989},".\u002Fch7","函数进阶",[71,172992,172993],{},[62,172994,172996],{"href":172995},".\u002Fch8","文件操作",[71,172998,172999],{},[62,173000,173002],{"href":173001},".\u002Fch9","异常、模块与包",[71,173004,173005],{},[62,173006,173008],{"href":173007},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[71,173010,173011],{},[62,173012,173014],{"href":173013},".\u002Fch11","面向对象基础",[71,173016,173017],{},[62,173018,173020],{"href":173019},".\u002Fch12","综合案例与复习路线",[14,173022,173023],{"id":173023},"学习路线",[19,173025,173026],{},"第一阶段：能运行程序。",[19,173028,173029],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173031,173032],{},"第二阶段：能组织数据。",[19,173034,173035],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173037,173038],{},"第三阶段：能封装逻辑。",[19,173040,173041],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173043,173044],{},"第四阶段：能做小项目。",[19,173046,173047],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173049,173050],{"id":173050},"参考资料",[161,173052,173053,173060,173067,173074],{},[71,173054,173055,173056],{},"黑马程序员 Python 入门教程推荐：",[62,173057,173058],{"href":173058,"rel":173059},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[66],[71,173061,173062,173063],{},"Python 官方中文教程：",[62,173064,173065],{"href":173065,"rel":173066},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[66],[71,173068,173069,173070],{},"Python 标准库文档：",[62,173071,173072],{"href":173072,"rel":173073},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[66],[71,173075,173076,173077],{},"pyecharts 文档：",[62,173078,173079],{"href":173079,"rel":173080},"https:\u002F\u002Fpyecharts.org\u002F",[66],{"title":125,"searchDepth":126,"depth":126,"links":173082},[173083,173084,173085],{"id":117163,"depth":126,"text":117163},{"id":173023,"depth":126,"text":173023},{"id":173050,"depth":126,"text":173050},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23465},"\u002Fwiki\u002F2024-10-10-python",{"title":172922,"description":173086},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331438876]